Service Broker の ID の管理
各データベースには、Service Broker のメッセージをそのデータベースにルーティングするための一意識別子が含まれています。このトピックでは、ブローカの ID、Service Broker がメッセージの宛先違いを防ぐ方法、およびブローカの ID を管理するためのオプションについて説明します。
Service Broker 識別子
各データベースには、Service Broker 識別子が含まれています。sys.databases カタログ ビューの service_broker_guid 列には、インスタンス内の各データベースの Service Broker 識別子が表示されます。Service Broker のルーティングでは、Service Broker 識別子を使用して、あるメッセージ交換のすべてのメッセージが確実に同じデータベースに配信されるようにします。したがって、Service Broker 識別子は同じネットワーク上のすべてのインスタンス内で一意であることが必要です。一意でないと、メッセージが間違った宛先に転送される可能性があります。
Service Broker のメッセージ配信
Service Broker 識別子がネットワーク上のすべてのデータベースで確実に一意となるように、データベース内での Service Broker のメッセージ配信を非アクティブ化するメカニズムが、SQL Server に備わっています。データベースでメッセージ配信が非アクティブ化されると、そのデータベースから送信されたすべてのメッセージが、データベースの転送キューにそのまま残されます。さらに、Service Broker は、そのデータベース内のサービスがメッセージを受信できる状態にないと見なします。Service Broker のルーティングでインスタンス内の転送先サービスが検索される際に、これらのサービスは対象となりません。
Service Broker のメッセージ配信を非アクティブ化することで、トラブルシューティングやデータ復旧の際に、メッセージの宛先を間違えることなく、データベースのバックアップを安全にアタッチできます。sys.databases の is_broker_enabled 列には、Service Broker のメッセージ配信の現在の状態がデータベースごとに表示されます。
SQL Server は、新しいデータベースそれぞれに、新しい Service Broker 識別子を生成します。識別子が新しいので、SQL Server は新しいデータベースで安全に Service Broker のメッセージ配信をアクティブ化できます。ネットワーク上で同じ Service Broker 識別子を使用するデータベースは他にありません。
データベースをアタッチまたは復元するときは、指定の Service Broker 識別子を持つ 1 つのデータベースだけでメッセージ配信がアクティブになっていることを確認してください。それ以外の場合、メッセージが間違った宛先に送信され、メッセージ交換がデータベースの間違ったコピーで処理される可能性があります。
識別子とメッセージ配信の管理
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 識別子を作成します。このオプションを指定すると、データベースでの既存のメッセージ交換をエラーで終了します。これは、これらのメッセージ交換が新しいインスタンス識別子を使用していないためです。
- ERROR_BROKER_CONVERSATIONS。このオプションは、Service Broker のメッセージ配信をアクティブ化して、データベースの既存の Service Broker 識別子を維持します。Service Broker は、データベース内のすべてのメッセージ交換をエラーで終了します。
ただし、どのオプションを指定した場合でも、SQL Server では、同じ Service Broker 識別子を使用する 2 つのデータベースが、同じ SQL Server インスタンス内でメッセージ配信をアクティブ化することはできません。既存のデータベースと同じ Service Broker 識別子でデータベースをアタッチすると、SQL Server によって、アタッチされるデータベースで Service Broker のメッセージ配信が非アクティブ化されます。
データベースのアタッチに関するオプションの詳細については、「CREATE DATABASE (Transact-SQL)」および「ALTER DATABASE (Transact-SQL)」を参照してください。データベースで Service Broker のメッセージ配信をアクティブ化する方法については、「データベースで Service Broker のメッセージ配信をアクティブ化する方法 (Transact-SQL)」を参照してください。
参照
その他の技術情報
ALTER DATABASE (Transact-SQL)
CREATE DATABASE (Transact-SQL)
RESTORE (Transact-SQL)
sys.databases (Transact-SQL)