CREATE ROUTE (Transact-SQL)
更新 : 2007 年 9 月 15 日
新しいルートを現在のデータベース用のルーティング テーブルに追加します。送信メッセージについては、Service Broker がローカル データベース内のルーティング テーブルを調べてルーティングを決定します。転送されるメッセージなど、別のインスタンスで発生するメッセージ交換でのメッセージについては、Service Broker が msdb 内のルートを調べます。
構文
CREATE ROUTE route_name [ AUTHORIZATION owner_name ] WITH [ SERVICE_NAME = 'service_name', ] [ BROKER_INSTANCE = 'broker_instance_identifier' , ] [ LIFETIME = route_lifetime , ] ADDRESS = 'next_hop_address' [ , MIRROR_ADDRESS = 'next_hop_mirror_address' ] [ ; ]
引数
- route_name
作成するルートの名前を指定します。新しいルートが現在のデータベースで作成され、AUTHORIZATION 句で指定されるプリンシパルによって所有されます。サーバー、データベース、スキーマ名は指定できません。route_name は、有効な sysname データ型で指定する必要があります。
- AUTHORIZATION owner_name
ルートの所有者を、指定したデータベース ユーザーまたはロールに設定します。現在のユーザーが、db_owner 固定データベース ロールのメンバまたは sysadmin 固定サーバー ロールのメンバである場合、owner_name には、有効であればどのユーザーまたはロールの名前も指定できます。それ以外の場合、owner_name には、現在のユーザーの名前、現在のユーザーの IMPERSONATE 権限に対応するユーザーの名前、または現在のユーザーが所属するロールの名前を指定する必要があります。この句を省略すると、ルートは現在のユーザーに属します。
- WITH
作成されるルートを定義するための句を、WITH の後に指定します。
- SERVICE_NAME = 'service_name'
このルートが示すリモート サービスの名前を指定します。service_name はリモート サービスで使用される名前と正確に一致する必要があります。Service Broker では、service_name がバイト単位で照合されます。つまり、この場合、大文字小文字は区別され、現在の照合順序は考慮されません。SERVICE_NAME が省略されると、このルートはすべてのサービス名と照合されることになりますが、SERVICE_NAME が指定されたルートより照合の優先度が下がります。サービス名 'SQL/ServiceBroker/BrokerConfiguration' が持つルートは、Broker Configuration Notice サービスへのルートです。このサービスへのルートは、ブローカ インスタンスを指定できません。
BROKER_INSTANCE = 'broker_instance_identifier'
対象サービスをホストするデータベースを指定します。broker_instance_identifier パラメータは、リモート データベース用のブローカ インスタンス識別子である必要があります。これは選択したデータベースで次のクエリを実行することにより取得できます。SELECT service_broker_guid FROM sys.databases WHERE database_id = DB_ID()
BROKER_INSTANCE 句を省略すると、このルートはすべてのブローカ インスタンスと照合されます。ブローカ インスタンスを指定しないメッセージ交換では、すべてのブローカ インスタンスと照合されるルートは、明示的なブローカ インスタンスを持つルートよりも照合の優先度が高くなります。ブローカ インスタンスを指定するメッセージ交換では、ブローカ インスタンスを持つルートのほうが、すべてのブローカ インスタンスと照合されるルートより優先度が高くなります。
- LIFETIME **=**route_lifetime
SQL Server がルーティング テーブルにルートを保持する時間を秒単位で指定します。有効期間が終了するとルートは期限切れとなり、SQL Server では、新しいメッセージ交換用のルートを選択するときに、そのルートは考慮されなくなります。この句が省略されると、route_lifetime は NULL となり、ルートは期限切れになりません。
ADDRESS ='next_hop_address'
ルート用のネットワーク アドレスを指定します。next_hop_address には、次の形式で TCP/IP アドレスを指定します。TCP://{ dns_name | netbios_name | ip_address } **:**port_number。
指定した port_number は、指定したコンピュータにおける SQL Server インスタンスの Service Broker エンドポイント用のポート番号と一致する必要があります。これは選択したデータベースで次のクエリを実行することにより取得できます。
SELECT tcpe.port FROM sys.tcp_endpoints AS tcpe INNER JOIN sys.service_broker_endpoints AS ssbe ON ssbe.endpoint_id = tcpe.endpoint_id WHERE ssbe.name = N'MyServiceBrokerEndpoint';
ミラー化されたデータベースでサービスがホストされる場合、ミラー化されたデータベースをホストする別のインスタンスに対しても、MIRROR_ADDRESS を指定する必要があります。それ以外の場合は、このルートはミラーに対してフェールオーバーしません。
ルートの next_hop_address が 'LOCAL' になっている場合、メッセージは現在の SQL Server インスタンス内のサービスに配布されます。
ルートの next_hop_address が 'TRANSPORT'' になっている場合、ネットワーク アドレスは、サービス名の中にあるネットワーク アドレスに基づいて決まります。'TRANSPORT' を指定するルートは、サービス名やブローカ インスタンスを指定できません。
MIRROR_ADDRESS ='next_hop_mirror_address'
next_hop_address でホストされているミラー化されたデータベースを 1 つ含んでいる、ミラー化されたデータベースのネットワーク アドレスを指定します。next_hop_mirror_address には、次の形式で TCP/IP アドレスを指定します。TCP://{ dns_name | netbios_name | ip_address } **:**port_number。
指定した port_number は、指定したコンピュータにおける SQL Server インスタンスの Service Broker エンドポイント用のポート番号と一致する必要があります。これは選択したデータベースで次のクエリを実行することにより取得できます。
SELECT tcpe.port FROM sys.tcp_endpoints AS tcpe INNER JOIN sys.service_broker_endpoints AS ssbe ON ssbe.endpoint_id = tcpe.endpoint_id WHERE ssbe.name = N'MyServiceBrokerEndpoint';
MIRROR_ADDRESS が指定されている場合、ルートには SERVICE_NAME 句と BROKER_INSTANCE 句を指定する必要があります。ルートの next_hop_address が 'LOCAL' または 'TRANSPORT' になっている場合、そのルートではミラー アドレスを指定できません。
解説
ルートを格納するルーティング テーブルは、sys.routes カタログ ビューを介して読み取ることができるメタデータ テーブルです。このカタログ ビューを更新できるのは、CREATE ROUTE、ALTER ROUTE、および DROP ROUTE ステートメントだけです。
既定では、各ユーザー データベースにあるルーティング テーブルには 1 つのルートが含まれています。このルートには AutoCreatedLocal という名前が付いています。ルートの next_hop_address は 'LOCAL' で、任意のサービス名およびブローカ インスタンス識別子と一致します。
ルートの next_hop_address が 'TRANSPORT' の場合、ネットワーク アドレスはサービスの名前に基づいて決定されます。SQL Server では、next_hop_address のネットワーク アドレスが有効な形式であれば、このネットワーク アドレスで始まるサービス名が適切に処理されます。
ルートで指定されているサービス、ネットワーク アドレス、およびブローカ インスタンス識別子が同じであれば、ルーティング テーブルにはルートをいくつでも含めることができます。このような場合、Service Broker でルートを選択するときには、メッセージ交換で指定された情報とルーティング テーブル内の情報を照合して、最も正確に一致する情報を取得するためのプロシージャが使用されます。Service Broker がルートを選択する方法の詳細については、「Service Broker のルーティング」を参照してください。
Service Broker では、ルーティング テーブルから期限の切れたルートは削除されません。期限の切れたルートは、ALTER ROUTE ステートメントを使用してアクティブにすることができます。
ルートは一時オブジェクトとして指定できません。# で始まるルート名は許可されますが、パーマネント オブジェクトになります。
権限
ルートを作成する権限は、既定では db_ddladmin 固定データベース ロールまたは db_owner 固定データベース ロールのメンバ、および sysadmin 固定サーバー ロールのメンバに与えられています。
例
A. DNS 名を使用して TCP/IP ルートを作成する
次の例では、サービス //Adventure-Works.com/Expenses
へのルートを作成します。このルートでは、このサービスへのメッセージが、TCP 経由で DNS 名 www.Adventure-Works.com
に対応するホスト上のポート 1234
に伝達されるように指定します。対象サーバーにメッセージが到着すると、一意識別子 D8D4D268-00A3-4C62-8F91-634B89C1E315
で指定されるブローカ インスタンスにメッセージが配信されます。
CREATE ROUTE ExpenseRoute
WITH
SERVICE_NAME = '//Adventure-Works.com/Expenses',
BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89C1E315',
ADDRESS = 'TCP://www.Adventure-Works.com:1234' ;
B. NetBIOS 名を使用して TCP/IP ルートを作成する
次の例では、サービス //Adventure-Works.com/Expenses
へのルートを作成します。このルートでは、このサービスへのメッセージが、TCP 経由で NetBIOS 名 SERVER02
に対応するホスト上のポート 1234
へ伝達されるように指定します。対象の SQL Server にメッセージが到着すると、一意識別子 D8D4D268-00A3-4C62-8F91-634B89C1E315
で指定されるデータベース インスタンスにメッセージが配信されます。
CREATE ROUTE ExpenseRoute
WITH
SERVICE_NAME = '//Adventure-Works.com/Expenses',
BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89C1E315',
ADDRESS = 'TCP://SERVER02:1234' ;
C. IP アドレスを使用して TCP/IP ルートを作成する
次の例では、サービス //Adventure-Works.com/Expenses
へのルートを作成します。このルートでは、このサービスへのメッセージが、TCP 経由で IP アドレス 192.168.10.2
にあるホスト上のポート 1234
へ伝達されるように指定します。対象の SQL Server にメッセージが到着すると、一意識別子 D8D4D268-00A3-4C62-8F91-634B89C1E315
で指定されるブローカ インスタンスにメッセージが配信されます。
CREATE ROUTE ExpenseRoute
WITH
SERVICE_NAME = '//Adventure-Works.com/Expenses',
BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89C1E315',
ADDRESS = 'TCP://192.168.10.2:1234' ;
D. 転送ブローカへのルートを作成する
次の例では、サーバー dispatch.Adventure-Works.com
の転送ブローカへのルートを作成します。サービス名とブローカ インスタンス識別子が両方指定されていないため、SQL Server では、他のルートが定義されていないサービスに対してこのルートが使用されます。ルーティングの詳細については、「Service Broker のルーティング」を参照してください。
CREATE ROUTE ExpenseRoute
WITH
ADDRESS = 'TCP://dispatch.Adventure-Works.com' ;
E. ローカル サービスへのルートを作成する
次の例では、ルートと同じインスタンスにあるサービス //Adventure-Works.com/LogRequests
へのルートを作成します。
CREATE ROUTE LogRequests
WITH
SERVICE_NAME = '//Adventure-Works.com/LogRequests',
ADDRESS = 'LOCAL' ;
F. 有効期間が指定されたルートを作成する
次の例では、サービス //Adventure-Works.com/Expenses
へのルートを作成します。ルートの有効期間は、259200
秒、つまり 72 時間です。
CREATE ROUTE ExpenseRoute
WITH
SERVICE_NAME = '//Adventure-Works.com/Expenses',
LIFETIME = 259200,
ADDRESS = 'TCP://services.Adventure-Works.com:1234' ;
G. ミラー化されたデータベースへのルートを作成する
次の例では、サービス //Adventure-Works.com/Expenses
へのルートを作成します。サービスは、ミラー化されたデータベースでホストされています。ミラー化されたデータベースのうち一つのアドレスは services.Adventure-Works.com:1234
で、もう一つのアドレスは services-mirror.Adventure-Works.com:1234
です。
CREATE ROUTE ExpenseRoute
WITH
SERVICE_NAME = '//Adventure-Works.com/Expenses',
BROKER_INSTANCE = '69fcc80c-2239-4700-8437-1001ecddf933',
ADDRESS = 'TCP://services.Adventure-Works.com:1234',
MIRROR_ADDRESS = 'TCP://services-mirror.Adventure-Works.com:1234' ;
H. ルーティング用のサービス名を使用するルートを作成する
次の例では、メッセージの送信先となるネットワーク アドレスを判別するためにサービス名が使用されるルートを作成します。ネットワーク アドレスとして 'TRANSPORT'
を指定するルートは、他のルートより照合の優先度が低いことに注意してください。
CREATE ROUTE TransportRoute
WITH ADDRESS = 'TRANSPORT' ;
参照
関連項目
ALTER ROUTE (Transact-SQL)
DROP ROUTE (Transact-SQL)
EVENTDATA (Transact-SQL)
その他の技術情報
Service Broker のルーティング
インスタンス間のメッセージ交換の実行
ヘルプおよび情報
変更履歴
リリース | 履歴 |
---|---|
2007 年 9 月 15 日 |
|