ALTER ROUTE (Transact-SQL)
適用於:SQL Server Azure SQL 受控執行個體
在 SQL Server 中修改現有路由的路由資訊。
語法
ALTER ROUTE route_name
WITH
[ SERVICE_NAME = 'service_name' [ , ] ]
[ BROKER_INSTANCE = 'broker_instance' [ , ] ]
[ LIFETIME = route_lifetime [ , ] ]
[ ADDRESS = 'next_hop_address' [ , ] ]
[ MIRROR_ADDRESS = 'next_hop_mirror_address' ]
[ ; ]
引數
route_name
這是要變更的路由名稱。 您不可指定伺服器、資料庫和結構描述名稱。
WITH
導入定義所改變之路由的子句。
SERVICE_NAME ='service_name'
指定這個路由所指向的遠端服務名稱。 service_name 必須與遠端服務所使用的名稱完全相符。 Service Broker 會使用逐一位元組比較方式來比對 service_name。 換言之,這項比較會區分大小寫,且不會考慮目前的定序。 服務名稱是 'SQL/ServiceBroker/BrokerConfiguration' 的路由,是指向 Broker Configuration Notice 服務的路由。 指向這項服務的路由不能指定 Broker 執行個體。
如果省略 SERVICE_NAME 子句,路由的服務名稱就會維持不變。
BROKER_INSTANCE ='broker_instance'
指定主控目標服務的資料庫。 broker_instance 參數必須是遠端資料庫的 Broker 執行個體識別碼,您可以在所選資料庫中執行下列查詢來取得這個識別碼:
SELECT service_broker_guid
FROM sys.databases
WHERE database_id = DB_ID();
當省略 BROKER_INSTANCE 子句時,路由的 Broker 執行個體就會維持不變。
注意
自主資料庫無法使用這個選項。
LIFETIME =route_lifetime
指定 SQL Server 將路由保留在路由表中的時間量 (以秒為單位)。 在存留期間結束時,路由會到期,SQL Server 在選擇新交談的路由時,不會再考慮這個路由。 如果省略這個子句,路由的存留期間會維持不變。
ADDRESS ='next_hop_address'
針對 Azure SQL 受控執行個體,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';
當路由在 next_hop_address 中指定 'LOCAL' 時,訊息會傳遞給在目前 SQL Server 執行個體內的服務。
當路由在 next_hop_address 中指定 'TRANSPORT' 時,會根據服務名稱中的網路位址來決定網路位址。 指定 'TRANSPORT' 的路由可以指定服務名稱或 Broker 執行個體。
當 next_hop_address 是資料庫鏡像的主體伺服器時,您也必須指定鏡像伺服器的 MIRROR_ADDRESS。 否則,這個路由不會自動進行容錯移轉,將工作交給鏡像伺服器。
注意
自主資料庫無法使用這個選項。
MIRROR_ADDRESS ='next_hop_mirror_address'
指定鏡像組 (其主體伺服器位於 next_hop_address) 之鏡像伺服器的網路位址。 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 陳述式來更新路由表。
ALTER ROUTE 命令所未指定的子句會維持不變。 因此,您無法變更 (ALTER) 路由來指定路由不逾時、路由符合任何服務名稱,或是路由符合任何 Broker 執行個體。 若要變更路由的這些特性,您必須卸除現有的路由,再以新的資訊建立新的路由。
當路由在 next_hop_address 中指定 'TRANSPORT' 時,會根據服務名稱來決定網路位址。 SQL Server 可以順利處理開頭是網路位址且格式對 next_hop_address 有效的服務名稱。 名稱包含有效網路位址的服務會遞送到服務名稱中的網路位址。
路由表可以包含指定相同服務、網路位址及/或 Broker 執行個體識別碼之任意數目的路由。 在這個情況下,Service Broker 會利用在交談所指定的資訊和路由表所指定的資訊之間,設計用來尋找完全相符項目的程序,來選擇路由。
若要改變服務的 AUTHORIZATION,請使用 ALTER AUTHORIZATION 陳述式。
權限
改變路由的權限預設為路由的擁有者、db_ddladmin 或 db_owner 固定資料庫角色的成員,以及系統管理員 (sysadmin) 固定伺服器角色的成員。
範例
A. 變更路由的服務
下列範例會修改 ExpenseRoute
路由來指向遠端服務 //Adventure-Works.com/Expenses
。
ALTER ROUTE ExpenseRoute
WITH
SERVICE_NAME = '//Adventure-Works.com/Expenses';
B. 變更路由的目標資料庫
下列範例將 ExpenseRoute
路由的目標資料庫變更為唯一識別碼 D8D4D268-00A3-4C62-8F91-634B89B1E317.
所識別的資料庫。
ALTER ROUTE ExpenseRoute
WITH
BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89B1E317';
C. 變更路由的位址
下列範例會將 ExpenseRoute
路由的網路位址改成 IP 位址是 1234
之主機的 TCP 通訊埠 10.2.19.72
。
ALTER ROUTE ExpenseRoute
WITH
ADDRESS = 'TCP://10.2.19.72:1234';
D. 變更路由的資料庫和位址
下列範例會將 ExpenseRoute
路由的網路位址改成 DNS 名稱是 1234
之主機的 TCP 通訊埠 www.Adventure-Works.com
。 它也會將目標資料庫變更為唯一識別碼 D8D4D268-00A3-4C62-8F91-634B89B1E317
所識別的資料庫。
ALTER ROUTE ExpenseRoute
WITH
BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89B1E317',
ADDRESS = 'TCP://www.Adventure-Works.com:1234';
另請參閱
CREATE ROUTE (Transact-SQL)
DROP ROUTE (Transact-SQL)
EVENTDATA (Transact-SQL)