programing

SQL Server 2008에서 Service Broker 사용

telecom 2023. 11. 6. 21:38
반응형

SQL Server 2008에서 Service Broker 사용

저는 제 LinqToSQL 데이터 컨텍스트에서 사용하기 위해 SqlCacheDependency를 통합하고 있습니다.

여기에 있는 Linq 쿼리에 대해 확장 클래스를 사용하고 있습니다 - http://code.msdn.microsoft.com/linqtosqlcache

코드를 연결했는데 페이지를 열면 예외가 발생합니다.

"현재 데이터베이스에 대해 SQL Server Service Broker를 사용할 수 없으므로 쿼리 알림이 지원되지 않습니다.알림을 사용하려면 이 데이터베이스에 대해 Service Broker를 활성화하십시오."

그것은 전세계적으로 이 사건에서 나온 것입니다. axax.

        protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
        //In Application Start Event
        System.Data.SqlClient.SqlDependency.Start(new dataContextDataContext().Connection.ConnectionString);

    }

제 질문은...

  1. SQL Server 2008 데이터베이스에서 Service Broker를 활성화하려면 어떻게 해야 합니까?이 쿼리를 실행하려고 했습니다.ALTER DATABATE tablename SET ENABLE_BROKER 하지만 영원히 끝나지 않고 실행되므로 수동으로 중지해야 합니다.

  2. SQL Server 2008에 이 설정이 있으면 DataContext로 필터링이 되나요, 아니면 거기서도 구성해야 하나요?

도와주셔서 감사합니다

트루길리

다른 사람이 이 문제에 대한 해결책을 찾고 있는 경우, 다음 명령어가 저에게 아주 효과적이었습니다.대기하는 대신 데이터베이스에 대한 다른 모든 연결을 해제합니다.

ALTER DATABASE [DBNAME] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE

Sql Server 2012에서 다음으로 이동할 수 있습니다.Properties-> Options -> Service Broker

Enable Service Broker

OK 여기서는 백업을 사용하지 않도록 설정하거나 백업을 복원해야 할 경우 이를 수행하는 방법을 보여 줍니다.

이 스크립트를 실행하면 데이터베이스에서 사용하는 모든 프로세스가 삭제됩니다(2005년과 달리 2008년에 수동으로 프로세스를 삭제하는 이유는 저를 넘어선 것입니다). 그리고 브로커를 설정합니다.

USE master
go

DECLARE @dbname sysname

SET @dbname = 'YourDBName'

DECLARE @spid int
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname)
WHILE @spid IS NOT NULL
BEGIN
EXECUTE ('KILL ' + @spid)
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) AND spid > @spid
END


ALTER DATABASE @dbname SET ENABLE_BROKER

DB에 대한 모든 연결을 삭제하고 브로커 서비스를 활성화하는 데 사용할 수 있는 권한을 가진 사용자 계정을 삭제해야 합니다.

다음 사항이 이상적입니다(교체).databasename):

     IF ((SELECT is_broker_enabled FROM sys.databases WHERE name = '%DATABASE_NAME%') = 1)
      BEGIN
        ALTER DATABASE %DATABASE_NAME% SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
     END

    ALTER DATABASE %DATABASE_NAME% SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE;

또한 적절한 권한을 가진 새 역할 및 사용자 계정을 만들 것을 제안합니다(데이터베이스 로그인 대체).

  --DBA creates a new role 
   if not exists (select 1 from sys.database_principals where name='sql_dependency_subscriber' and Type = 'R')
  begin
   EXEC sp_addrole 'sql_dependency_subscriber' 
  end

  --Minimum Required  Permissions needed for SQLDependancy Notification to work
   GRANT CREATE PROCEDURE to sql_dependency_subscriber;
   GRANT CREATE QUEUE to sql_dependency_subscriber; 
   GRANT CREATE SERVICE to sql_dependency_subscriber;
   GRANT REFERENCES on CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] to sql_dependency_subscriber ;
   GRANT VIEW DEFINITION TO sql_dependency_subscriber;

  --Minimum Required  Permissions  needed for SQLDependaney Notification to work
   GRANT SELECT to sql_dependency_subscriber;
   GRANT SUBSCRIBE QUERY NOTIFICATIONS TO sql_dependency_subscriber;
   GRANT RECEIVE ON QueryNotificationErrorsQueue TO sql_dependency_subscriber;
   GRANT REFERENCES on CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] to sql_dependency_subscriber ;
   EXEC sp_addrolemember 'sql_dependency_subscriber', '%DATABASE_LOGIN%';
   EXEC sp_addrolemember 'sql_dependency_subscriber', 'sqldp';

ALTER DATABATE 문을 사용하여 Broker 서비스를 활성화할 수 있으며, Database 속성 > Options > Service Broker Enable에서도 Broker 서비스를 활성화:참/거짓.

그러나 여기서 문제가 되는 것은 브로커를 활성화하는 동안입니다. 프로세스는 특정 데이터베이스를 사용하여 실행되므로 이 데이터베이스를 제거한 후에야 브로커 서비스를 활성화할 수 있습니다.@JGilmartin에 의해 답변이 완벽하게 작동하지만 데이터베이스의 진행 중인 모든 프로세스가 중단되는지 확인하십시오. 프로덕션에 이 스크립트를 사용하기 전에 트래픽이나 프로세스의 심각도를 확인하십시오.

  1. Service Broker에서 출력한 오류입니다.이미지1

  2. 수정하려면 SSMS, 이미지 2를 사용하여 서비스 브로커를 활성화합니다.

  3. True Service Broker로 설정 오류가 사라지면 이미지 3을 참조

enter image description here enter image description here enter image description here

언급URL : https://stackoverflow.com/questions/2758976/enabling-service-broker-in-sql-server-2008

반응형