分享方式:


ALTER ROUTE (Transact-SQL)

適用於:SQL Server Azure SQL 受控執行個體

在 SQL Server 中修改現有路由的路由資訊。

Transact-SQL 語法慣例

語法

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_ddladmindb_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)