Condividi tramite


ALTER ROUTE (Transact-SQL)

Si applica a: SQL Server Istanza gestita di SQL di Azure

Modifica le informazioni relative a una route esistente in SQL Server.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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' ]  
[ ; ]  
  

Argomenti

route_name
Nome della route da modificare. Non è possibile specificare i nomi del server, del database e dello schema.

WITH
Introduce le clausole che definiscono la route da modificare.

SERVICE_NAME ='service_name'
Specifica il nome del servizio remoto a cui la route fa riferimento. service_name deve corrispondere esattamente al nome usato dal servizio remoto. Service Broker usa un confronto byte per byte per trovare la corrispondenza con service_name. In altre parole, nel confronto viene fatta distinzione tra maiuscole e minuscole e non vengono considerate le regole di confronto correnti. Una route con nome di servizio 'SQL/ServiceBroker/BrokerConfiguration' è una route per un servizio di configurazione di Service Broker. Per una route per questo servizio non è necessario specificare un'istanza di Service Broker.

Se la clausola SERVICE_NAME viene omessa, il nome del servizio per la route rimane invariato.

BROKER_INSTANCE ='broker_instance'
Specifica il database che ospita il servizio di destinazione. Il parametro broker_instance deve corrispondere all'identificatore dell'istanza di Service Broker per il database remoto. Per ottenere tale identificatore, è possibile eseguire la query seguente nel database selezionato:

SELECT service_broker_guid  
FROM sys.databases  
WHERE database_id = DB_ID();  

Se la clausola BROKER_NAME viene omessa, l'istanza di Service Broker per la route rimane invariata.

Nota

Questa opzione non è disponibile in un database indipendente.

LIFETIME =route_lifetime
Specifica per quanto tempo, in secondi, SQL Server mantiene la route nella tabella di routing. Al termine di questo periodo di tempo, la route scade e non viene più presa in considerazione da SQL Server per la scelta della route per una nuova conversazione. Se questa clausola viene omessa, la durata della route rimane invariata.

ADDRESS ='next_hop_address'

Per Istanza gestita di SQL di Azure, ADDRESS deve essere locale.

Specifica l'indirizzo di rete per la route. Il parametro next_hop_address specifica un indirizzo TCP/IP nel formato seguente:

TCP:// { dns_name | netbios_name |ip_address } : port_number

Il parametro port_number specificato deve corrispondere al numero di porta dell'endpoint di Service Broker per un'istanza di SQL Server nel computer specificato. Per ottenere tale valore, eseguire la query seguente nel database selezionato:

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';  

Se per il parametro next_hop_address di una route viene specificato il valore 'LOCAL', il messaggio viene recapitato a un servizio nell'istanza corrente di SQL Server.

Se per il parametro next_hop_address di una route viene specificato il valore 'TRANSPORT', l'indirizzo di rete viene determinato in base all'indirizzo di rete nel nome del servizio. Per una route con valore 'TRANSPORT' è possibile specificare un nome di servizio o un'istanza di Service Broker.

Se il parametro next_hop_address corrisponde al server principale per un database mirror, è necessario specificare anche MIRROR_ADDRESS per il server mirror. In caso contrario non può venire eseguito il failover automatico della route al server mirror.

Nota

Questa opzione non è disponibile in un database indipendente.

MIRROR_ADDRESS ='next_hop_mirror_address'
Specifica l'indirizzo di rete per il server mirror di una coppia con mirroring in cui il server principale si trova all'indirizzo next_hop_address. Il parametro next_hop_mirror_address specifica un indirizzo TCP/IP nel formato seguente:

TCP://{ dns_name | netbios_name | ip_address } : port_number

Il parametro port_number specificato deve corrispondere al numero di porta dell'endpoint di Service Broker per un'istanza di SQL Server nel computer specificato. Per ottenere tale valore, eseguire la query seguente nel database selezionato:

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';  

Se si specifica MIRROR_ADDRESS, la route deve specificare la clausola SERVICE_NAME e la clausola BROKER_INSTANCE. Per una route con valore 'LOCAL' o 'TRANSPORT' per il parametro next_hop_address non è necessario specificare un indirizzo mirror.

Nota

Questa opzione non è disponibile in un database indipendente.

Osservazioni:

La tabella di routing in cui sono archiviate le route è una tabella di metadati che può essere letta tramite la vista del catalogo sys.routes. e aggiornata esclusivamente utilizzando le istruzioni CREATE ROUTE, ALTER ROUTE e DROP ROUTE.

Le clausole che non sono specificate nel comando ALTER ROUTE rimangono invariate. Non è possibile pertanto eseguire il comando ALTER per specificare che la route non scade, che corrisponde a un nome di servizio o che corrisponde a un'istanza di Service Broker. Per modificare queste caratteristiche di una route è necessario eliminare la route esistente e creare una nuova route con le nuove informazioni.

Se per il parametro next_hop_address di una route viene specificato il valore 'TRANSPORT', l'indirizzo di rete viene determinato in base all'indirizzo di rete nel nome del servizio. SQL Server elabora correttamente i nomi di servizi che iniziano con un indirizzo di rete in un formato valido per next_hop_address. I servizi con nomi che contengono indirizzi di rete validi verranno indirizzati all'indirizzo di rete indicato nel nome del servizio.

La tabella di routing può includere qualsiasi numero di route che specificano lo stesso servizio, indirizzo di rete e/o identificatore dell'istanza di Service Broker. In questo caso, Service Broker sceglie una route usando una procedura progettata in modo da individuare la corrispondenza più esatta tra le informazioni specificate nella conversazione e le informazioni della tabella di routing.

Per modificare il parametro AUTHORIZATION per un servizio, utilizzare l'istruzione ALTER AUTHORIZATION.

Autorizzazioni

L'autorizzazione per modificare una route viene assegnata per impostazione predefinita al proprietario della route, ai membri dei ruoli predefiniti del database db_ddladmin o db_owner e ai membri del ruolo predefinito del server sysadmin.

Esempi

R. Modifica del servizio per una route

Nell'esempio seguente viene modificata la route ExpenseRoute in modo da puntare al servizio remoto //Adventure-Works.com/Expenses.

ALTER ROUTE ExpenseRoute  
   WITH   
     SERVICE_NAME = '//Adventure-Works.com/Expenses';  

B. Modifica del database di destinazione per una route

Nell'esempio seguente il database di destinazione per la route ExpenseRoute viene modificato e impostato sul database identificato dall'ID univoco D8D4D268-00A3-4C62-8F91-634B89B1E317.

ALTER ROUTE ExpenseRoute  
   WITH   
     BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89B1E317';  

C. Modifica dell'indirizzo per una route

Nell'esempio seguente l'indirizzo di rete per la route ExpenseRoute viene modificato e impostato sulla porta TCP 1234 nell'host con indirizzo IP 10.2.19.72.

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

D. Modifica del database e dell'indirizzo per una route

Nell'esempio seguente l'indirizzo di rete per la route ExpenseRoute viene modificato e impostato sulla porta TCP 1234 nell'host con nome DNS www.Adventure-Works.com. Viene inoltre modificato il database di destinazione, che viene impostato sul database identificato dall'identificatore univoco D8D4D268-00A3-4C62-8F91-634B89B1E317.

ALTER ROUTE ExpenseRoute  
   WITH   
     BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89B1E317',  
     ADDRESS = 'TCP://www.Adventure-Works.com:1234';  

Vedi anche

CREATE ROUTE (Transact-SQL)
DROP ROUTE (Transact-SQL)
EVENTDATA (Transact-SQL)