Service Broker 설명은 여기서 (MSDN)
https://docs.microsoft.com/ko-kr/sql/database-engine/configure-windows/sql-server-service-broker?view=sql-server-2017
SSMS에서 Service Broker를 활성화하는 방법
1. 데이터베이스 속성 - 옵션 - Service Broker에서 Broker 활성화를 True로 바꾸고 저장한다.
2. 쿼리로 데이터베이스 업데이트
ALTER DATABASE [MyDatabase] SET ENABLE_BROKER
그런데 1과 2의 방법은 데이터베이스가 사용중이면 상태를 변경할 수 없다.
1은 아래와 같은 오류 메시지 창이 나오고,
2는 될 때까지 계속 쿼리를 실행중인 상태가 되는데 데이터베이스가 1분 1초도 쉬지 않고 사용 중인 상태면
절대 Service Broker를 활성화할 수 없다.
왜 그런고 하니, Stack overflow에서 답변을 찾았다.
[출처: https://stackoverflow.com/questions/29172828/can-i-turn-on-service-broker-on-all-my-databases]
Activating Service Broker on a database requires exclusive access to the database, in other words all existing connections will need to be terminated and non committed transactions will need to be rolled back. You would need to query sys.databases and set up a Dynamic SQL Statement to loop through the databases to activate Service Broker on all of them. There isn't a server level command to activate Service Broker on all databases.
Activating Service Broker will not have an impact on the Server until you begin creating Message Types, Contracts, Queues and Services on those Queues and begin accumulating data.
그렇다는군.
Here is the code to activate Service Broker, again beware, because it will terminate all connections and rollback all non committed transactions.
친절히 방법도 알려 주었다.
다음과 같이 쿼리를 작성하여 실행하면 된다.
ALTER DATABASE MyDatabase
SET ENABLE_BROKER
WITH ROLLBACK IMMEDIATE
GO
쿼리결과 메시지는 다음과 같다.
그다음 알려준대로
SELECT is_broker_enabled FROM sys.databases WHERE name = 'MyDatabase'
상태를 조회하여 결과를 보면 값이 1이다.
Service Broker가 비활성화 되어 있으면 값이 0이므로 활성화가 된 것을 알 수 있다.
반대로 Sevice Broker를 비활성화하려면 쿼리에서 enable을 disable로 바꾼다.
ALTER DATABASE MyDatabase
SET DISABLE_BROKER
WITH ROLLBACK IMMEDIATE
GO