Share via


Service Broker ID 관리

각 데이터베이스에는 Service Broker 메시지를 데이터베이스로 라우팅하는 데 사용되는 고유 식별자가 포함되어 있습니다. 이 항목에서는 Service Broker 식별자, Service Broker가 메시지의 잘못된 전달을 막는 방법, Service Broker 식별자 관리에 사용할 수 있는 옵션에 대해 설명합니다.

Service Broker 식별자

각 데이터베이스에는 네트워크에 있는 다른 데이터베이스와의 구별을 위한 Service Broker 식별자가 포함되어 있습니다. sys.databases 카탈로그 뷰의 service_broker_guid 열은 인스턴스의 각 데이터베이스에 대한 Service Broker 식별자를 보여 줍니다. Service Broker 시스템은 여러 서비스 복사본을 실행하도록 설계할 수 있습니다. 서비스의 각 복사본은 별도의 데이터베이스에서 실행됩니다. 서비스의 복사본이 여러 개 있는 시스템에서는 CREATE ROUTE 문의 BROKER_INSTANCE 절을 사용하여 특정 서비스 복사본에 대한 경로를 만듭니다.

Service Broker 라우팅은 Service Broker 식별자를 사용하여 대화에 대한 모든 메시지가 동일한 데이터베이스로 배달되도록 보장합니다. BEGIN DIALOG CONVERSATION 문은 대상 서비스와의 대화를 엽니다. 대화가 성공적으로 열리면 대상 서비스의 승인 메시지에 대상 데이터베이스에 대한 Service Broker 식별자가 포함됩니다. 그러면 Service Broker는 대화의 모든 메시지를 지정된 데이터베이스로 라우팅합니다.

BEGIN DIALOG CONVERSATION 문의 TO SERVICE 절에 Service Broker 식별자를 지정하면 수행되는 라우팅의 유형을 제어할 수 있습니다.

  • 서비스의 특정 복사본으로 대화를 라우팅하려면 service_broker_guid를 지정합니다. 예를 들어 네트워크에 있는 개발 데이터베이스, 테스트 데이터베이스 및 프로덕션 데이터베이스에 3개의 서비스 복사본이 있을 수 있습니다. 각 시스템의 BEGIN DIALOG CONVERSATION 문은 service_broker_guid를 지정하여 모든 메시지가 올바른 데이터베이스로 가도록 해야 합니다.

  • Service Broker가 서비스의 여러 복사본에 걸쳐 대화 부하를 분산하도록 하려면 service_broker_guid를 지정하지 마십시오. 그러면 Service Broker는 BEGIN DIALOG CONVERSATION의 TO SERVICE 절에 지정된 것과 동일한 서비스 이름을 가진 경로 중에서 선택합니다.

네트워크에 서비스의 복사본이 한 개만 있는 경우 기본적으로 Service Broker는 올바르게 대화를 라우팅합니다. CREATE ROUTE 또는 BEGIN DIALOG CONVERSATION 문에 Service Broker 식별자를 지정할 필요가 없습니다.

Service Broker 경로 일치에 대한 자세한 내용은 Service Broker 라우팅을 참조하십시오.

메시지 배달을 올바르게 지원하려면 동일한 네트워크의 모든 데이터베이스 엔진 인스턴스에서 각 Service Broker 식별자가 고유해야 합니다. 그렇지 않으면 메시지가 잘못 전달될 수 있습니다. 새 데이터베이스가 만들어지면 네트워크에서 고유한 새 Service Broker 식별자가 할당됩니다. 이 식별자는 데이터베이스가 복원 또는 연결될 때 복원됩니다. 데이터베이스를 복원 및 연결하는 경우에는 주의해야 합니다. 여러 데이터베이스가 Service Broker 작업을 수행하고 동일한 식별자를 사용하도록 해서는 안 됩니다.

Service Broker 메시지 배달

SQL Server는 동일한 네트워크에서 동일한 Service Broker 식별자를 가진 다른 데이터베이스가 있는 경우 데이터베이스에서 Service Broker 메시지 배달을 비활성화하는 메커니즘을 제공합니다. 메시지 배달이 데이터베이스에서 비활성화되면 해당 데이터베이스에서 보낸 모든 메시지가 데이터베이스의 전송 큐에 남아 있습니다. 뿐만 아니라 Service Broker는 해당 데이터베이스의 서비스를 메시지 수신에 사용할 수 있는 것으로 간주하지 않습니다. Service Broker 라우팅이 인스턴스 내의 대상 서비스를 찾을 때는 이러한 서비스가 고려되지 않습니다.

Service Broker 메시지 배달을 비활성화하면 메시지가 잘못 전달될 위험 없이 문제 해결이나 데이터 복구 용도로 데이터베이스 백업을 안전하게 연결할 수 있습니다. sys.databasesis_broker_enabled 열은 각 데이터베이스에 대한 Service Broker 메시지 배달의 현재 상태를 보여 줍니다.

데이터베이스를 연결하거나 복원할 때는 지정된 Service Broker 식별자를 가진 데이터베이스만 메시지 배달을 활성화하도록 주의해야 합니다. 그렇지 않으면 메시지가 잘못 전달될 수 있으며 잘못된 데이터베이스 복사본에서 대화에 대한 처리가 수행될 수 있습니다.

식별자 및 메시지 배달 관리

CREATE DATABASE 명령, ALTER DATABASE 명령 및 RESTORE DATABASE 명령에는 Service Broker 메시지 배달을 활성화하기 위한 옵션이 있습니다. 또한 이러한 명령에는 데이터베이스에 대한 Service Broker 식별자를 변경하는 옵션도 있습니다.

데이터베이스를 연결하거나 복원할 때 Service Broker 식별자와 메시지 배달 상태는 기본적으로 변경되지 않습니다. 일반적으로 다음과 같은 상황에서는 Service Broker 식별자를 변경하지 않습니다.

  • 복구를 위해 백업을 복원할 때

  • 미러 쌍을 구성할 때

  • 대기 서버의 로그 전달을 설정할 때. 데이터베이스 복사본을 만들 때는 인스턴스 식별자를 변경합니다.

식별자와 메시지 배달을 관리할 수 있는 옵션은 다음 4가지입니다.

  • ENABLE_BROKER - 이 옵션은 Service Broker 메시지 배달을 활성화하고 데이터베이스에 대한 기존 Service Broker 식별자를 유지합니다.

    [!참고]

    임의의 데이터베이스에서 SQL Server Service Broker를 활성화하려면 데이터베이스 잠금이 필요합니다. msdb 데이터베이스에서 Service Broker를 설정하려면 먼저 SQL Server 에이전트를 중지합니다. 그러면 Service Broker에서 필요한 잠금을 획득할 수 있습니다.

  • DISABLE_BROKER - 이 옵션은 데이터베이스에 대한 기존 Service Broker 식별자를 유지하면서 Service Broker 메시지 배달을 비활성화합니다.

  • NEW_BROKER - 이 옵션은 Service Broker 메시지 배달을 활성화하고 데이터베이스에 대한 새 Service Broker 식별자를 만듭니다. 이 옵션은 데이터베이스의 모든 기존 대화를 종료하고 각 대화에 대해 오류를 반환합니다. 이는 이러한 대화에서 새 식별자를 사용하지 않기 때문입니다. 이전 Service Broker 식별자를 참조하는 경로는 새 식별자로 다시 만들어야 합니다.

  • ERROR_BROKER_CONVERSATIONS - 이 옵션은 데이터베이스에 대한 기존 Service Broker 식별자를 유지하면서 Service Broker 메시지 배달을 활성화합니다. Service Broker는 데이터베이스의 모든 대화를 종료하고 각 대화에 대해 오류를 반환합니다. 이 옵션은 일반적으로 대화를 연 다른 데이터베이스와 시간상 다른 지점으로 데이터베이스를 복원해야 하는 경우에 사용됩니다. 복원된 데이터베이스의 모든 대화는 다른 데이터베이스와 동기화되지 않게 되므로 오류가 발생하며 종료됩니다. Service Broker 식별자는 이 식별자를 참조하는 모든 경로가 유효성을 유지하도록 그대로 보존됩니다.

지정된 옵션에 관계없이 SQL Server는 동일한 Service Broker 식별자를 가진 두 데이터베이스가 동일한 SQL Server 인스턴스에서 메시지 배달을 모두 활성화하도록 허용하지 않습니다. 기존 데이터베이스와 동일한 Service Broker 식별자를 갖는 데이터베이스를 연결하는 경우 SQL Server는 연결되는 데이터베이스에서 Service Broker 메시지 배달을 비활성화합니다.

데이터베이스 연결 옵션에 대한 자세한 내용은 CREATE DATABASE(Transact-SQL)ALTER DATABASE(Transact-SQL)를 참조하십시오. 데이터베이스에서 Service Broker 메시지 배달을 활성화하는 방법은 방법: 데이터베이스에서 Service Broker 메시지 배달 활성화(Transact-SQL)를 참조하십시오.