Gestione delle identità di Service Broker

Ogni database contiene un identificatore univoco utilizzato per il routing dei messaggi di Service Broker al database stesso. In questo argomento vengono descritte le identità di Service Broker, le opzioni disponibili per la gestione di queste e la funzionalità di protezione dall'indirizzamento errato dei messaggi.

Identificatori di Service Broker

Ogni database contiene un identificatore di Service Broker. Nella colonna service_broker_guid della vista del catalogo sys.databases è riportato l'identificatore di Service Broker per ogni database nell'istanza. Il routing di Service Broker utilizza tale identificatore per garantire il recapito di tutti i messaggi di una conversazione allo stesso database. Pertanto, l'identificatore di Service Broker deve essere univoco in tutte le istanze presenti nella stessa rete. In caso contrario, può verificarsi un indirizzamento errato dei messaggi.

Recapito dei messaggi di Service Broker

Per garantire l'univocità di un identificatore di Service Broker in tutti i database in una rete, SQL Server dispone di un meccanismo che consente di disattivare il recapito dei messaggi di Service Broker in un database. Tutti i messaggi inviati dal database per il quale il recapito è disattivato rimangono nella coda di trasmissione del database. I servizi del database, inoltre, non vengono considerati disponibili per la ricezione dei messaggi, ad esempio nel caso in cui un servizio all'interno di un'istanza venga individuato come servizio di destinazione dal routing di Service Broker.

La disattivazione del recapito dei messaggi di Service Broker consente il collegamento sicuro del backup di un database per la risoluzione di eventuali problemi o il recupero dei dati, evitando il rischio di un indirizzamento errato dei messaggi. Nella colonna is_broker_enabled della vista del catalogo sys.databases è riportato lo stato corrente del recapito dei messaggi di Service Broker per ogni database.

SQL Server genera un nuovo identificatore di Service Broker per ogni nuovo database. L'identificatore è nuovo, quindi SQL Server può attivare in modo sicuro il recapito dei messaggi di Service Broker nel nuovo database. A nessun altro database nella rete deve essere assegnato lo stesso identificatore di Service Broker.

Quando si collega o si ripristina un database, verificare con attenzione che per un identificatore di Service Broker specifico il recapito dei messaggi sia attivo per un solo database. In caso contrario, può verificarsi un indirizzamento errato dei messaggi, con conseguente elaborazione della conversazione in una copia del database non corretta.

Gestione degli identificatori e del recapito dei messaggi

I comandi CREATE DATABASE, ALTER DATABASE e RESTORE DATABASE includono opzioni per l'attivazione del recapito dei messaggi di Service Broker e la modifica dell'identificatore di Service Broker per un database.

Quando si collega o si ripristina un database, per impostazione predefinita l'identificatore e lo stato di recapito dei messaggi di Service Broker rimangono invariati. In genere, l'identificatore di Service Broker non viene modificato quando si ripristina un backup a scopo di recupero di un database, quando si configura una coppia con mirroring o quando si imposta la distribuzione dei log per un server di standby. Quando si esegue una copia del database, l'identificatore dell'istanza viene modificato.

Per la gestione degli identificatori e del recapito dei messaggi sono disponibili quattro opzioni:

  • ENABLE_BROKER. Questa opzione consente di attivare il recapito dei messaggi di Service Broker, mantenendo l'identificatore di Service Broker esistente del database.

[!NOTA] L'attivazione di SQL Server Service Broker in un database richiede un blocco a livello del database. Per attivare Service Broker nel database msdb, interrompere innanzitutto SQL Server Agent per consentire a Service Broker di ottenere il blocco necessario.

  • DISABLE_BROKER. Questa opzione consente di disattivare il recapito dei messaggi di Service Broker, mantenendo l'identificatore di Service Broker esistente del database.
  • NEW_BROKER. Questa opzione consente di attivare il recapito dei messaggi di Service Broker, creando un nuovo identificatore di Service Broker per il database. In questo caso, eventuali conversazioni esistenti nel database vengono terminate con un errore. Non utilizzano infatti il nuovo identificatore dell'istanza.
  • ERROR_BROKER_CONVERSATIONS. Questa opzione consente di attivare il recapito dei messaggi di Service Broker, mantenendo l'identificatore di Service Broker esistente del database. Tutte le conversazioni nel database vengono terminate con un errore.

Indipendentemente dall'opzione specificata, tuttavia, SQL Server non consente l'attivazione del recapito dei messaggi nella stessa istanza di SQL Server per due database con lo stesso identificatore di Service Broker. Se si collega un database con lo stesso identificatore di Service Broker di un database esistente, SQL Server disattiva il recapito dei messaggi di Service Broker nel database collegato.

Per ulteriori informazioni sulle opzioni per il collegamento di database, vedere CREATE DATABASE (Transact-SQL) e ALTER DATABASE (Transact-SQL). Per istruzioni sull'attivazione del recapito dei messaggi di Service Broker in un database, vedere Procedura: Attivazione del recapito dei messaggi di Service Broker nei database (Transact-SQL).

Vedere anche

Altre risorse

ALTER DATABASE (Transact-SQL)
CREATE DATABASE (Transact-SQL)
RESTORE (Transact-SQL)
sys.databases (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005