ALTER ROUTE (Transact-SQL)

修改現有路由的路由資訊。

主題連結圖示 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'
    指定這個路由的網路位址。 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 位址是 10.2.19.72 之主機的 TCP 通訊埠 1234。

ALTER ROUTE ExpenseRoute 
   WITH 
     ADDRESS = 'TCP://10.2.19.72:1234'

D.變更路由的資料庫和位址

下列範例會將 ExpenseRoute 路由的網路位址改成 DNS 名稱是 www.Adventure-Works.com 之主機的 TCP 通訊埠 1234。 它也會將目標資料庫變更為唯一識別碼 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)