Share via


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.databasesis_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 識別子を維持します。
ms166057.note(ja-jp,SQL.90).gifメモ :
任意のデータベースで 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)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手