Condividi tramite


ALTER ROUTE (Transact-SQL)

Modifica le informazioni relative a una route esistente.

Icona di collegamento a un argomentoConvenzioni della 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 utilizzato dal servizio remoto. Per la corrispondenza di service_name, Service Broker utilizza un confronto byte per byte. 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.

  • LIFETIME **=**route_lifetime
    Specifica per quanti 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'
    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 valore 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 next_hop_address è il server principale per il mirroring di un database, è necessario specificare MIRROR_ADDRESS per il server mirror. In caso contrario non può venire eseguito il failover automatico della route al server mirror.

  • 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 specificato in 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 valore 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.

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. È possibile aggiornare la tabella di routing solo mediante 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 al nome del servizio. SQL Server è in grado di elaborare 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 utilizzando 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 ulteriori informazioni sulla scelta di una route in Service Broker, vedere Routing e funzionalità di rete di Service Broker.

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 del ruolo predefinito del database db_ddladmin o db_owner e ai membri del ruolo predefinito del server sysadmin.

Esempi

A. 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'