Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Managed Instance
Elke database bevat een unieke id die wordt gebruikt voor het routeren van Service Broker-berichten naar die database. In dit onderwerp worden Service Broker-id's beschreven, hoe Service Broker beveiligt tegen berichtfoutrichting en de opties die beschikbaar zijn voor het beheren van Service Broker-id's.
Service Broker-id's
Elke database bevat een Service Broker-id die deze onderscheidt van alle andere databases in het netwerk. In service_broker_guid de kolom van de sys.databases catalogusweergave ziet u de Service Broker-id voor elke database in het exemplaar. Service Broker-systemen kunnen worden ontworpen om meerdere kopieën van een service uit te voeren. Elke kopie van de service wordt uitgevoerd in een afzonderlijke database. Gebruik in een systeem met meerdere kopieën van een service de BROKER_INSTANCE component van de CREATE ROUTE instructie om een route naar een specifieke kopie van de service te maken.
Service Broker-routering maakt gebruik van de Service Broker-id om ervoor te zorgen dat alle berichten voor een gesprek worden bezorgd in dezelfde database. De BEGIN DIALOG CONVERSATION instructie opent een gesprek met een doelservice. Als een gesprek is geopend, bevat het bevestigingsbericht van de doelservice de Service Broker-id voor de doeldatabase. Service Broker stuurt vervolgens alle berichten voor het gesprek naar de opgegeven database.
Service Broker-id's kunnen worden opgegeven in de TO SERVICE component van de BEGIN DIALOG CONVERSATION instructie om te bepalen welk type routering moet worden uitgevoerd:
Als u gesprekken wilt routeren naar een specifieke kopie van een service, geeft u een service_broker_guid op. U kunt bijvoorbeeld drie kopieën van een service in drie databases in het netwerk hebben: een ontwikkelingsdatabase, een testdatabase en een productiedatabase. De
BEGIN DIALOG CONVERSATIONinstructies in elk systeem moeten service_broker_guid opgeven om ervoor te zorgen dat alle berichten naar de juiste database gaan.Als u Service Broker het gesprek wilt laten laden in meerdere exemplaren van een service, geeft u geen service_broker_guid op. Service Broker kiest ook tussen de routes met dezelfde servicenaam als die is opgegeven in de
TO SERVICEcomponent vanBEGIN DIALOG CONVERSATION.
Als er slechts één exemplaar van een service in een netwerk is, worden de gesprekken door Service Broker standaard correct gerouteerd. U hoeft de Service Broker-id niet in CREATE ROUTE of BEGIN DIALOG CONVERSATION instructies op te geven.
Raadpleeg Service Broker-routering voor meer informatie over het matchen van Service Broker-routes.
Om de bezorging van berichten correct te ondersteunen, moet elke Service Broker-id uniek zijn in alle exemplaren van de database-engine in hetzelfde netwerk. Anders kunnen berichten verkeerd worden doorgestuurd. Wanneer een nieuwe database wordt gemaakt, wordt er een nieuwe Service Broker-id toegewezen die uniek moet zijn in het netwerk. De id wordt hersteld wanneer de database is hersteld of gekoppeld. Wees voorzichtig wanneer u databases herstelt en koppelt. U mag niet meerdere databases hebben die actief Service Broker-bewerkingen uitvoeren en dezelfde id's gebruiken.
Service Broker-berichtbezorging
SQL Server biedt een mechanisme voor het deactiveren van Service Broker-berichtbezorging in een database als deze dezelfde Service Broker-id heeft als een andere database in hetzelfde netwerk. Wanneer de bezorging van berichten wordt gedeactiveerd in een database, blijven alle berichten die vanuit die database worden verzonden in de overdrachtswachtrij voor de database. Verder beschouwt Service Broker geen services in die database die beschikbaar zijn voor het ontvangen van berichten. Deze services worden niet overwogen wanneer Service Broker-routering een doelservice in een exemplaar zoekt.
Door Service Broker-berichtenbezorging uit te schakelen, kunt u veilig een back-up van een database koppelen voor probleemoplossing of gegevensherstel zonder het risico van verkeerd doorgestuurde berichten. In is_broker_enabled de kolom met sys.databases de huidige status van de Service Broker-berichtbezorging voor elke database.
Wanneer u een database koppelt of herstelt, moet u ervoor zorgen dat slechts één database met een bepaalde Service Broker-id berichtbezorging actief heeft. Anders kunnen berichten verkeerd worden doorgestuurd en kan de verwerking voor een gesprek zich voordoen in de verkeerde kopie van de database.
Id's en berichtbezorging beheren
De CREATE DATABASE opdracht, de ALTER DATABASE opdracht en de RESTORE DATABASE opdracht bevatten opties om de bezorging van Service Broker-berichten te activeren. Ze bevatten ook opties om de Service Broker-id voor een database te wijzigen.
Wanneer u een database koppelt of herstelt, worden de Service Broker-id en de bezorgingsstatus van berichten standaard ongewijzigd. Normaal gesproken wijzigt u de Service Broker-id niet in de volgende situaties:
- Wanneer u een back-up herstelt voor hersteldoeleinden.
- Wanneer u een gespiegeld paar configureert.
- Wanneer u logboekverzending instelt voor een stand-byserver. Wanneer u een kopie van de database maakt, wijzigt u de exemplaar-id.
Er zijn vier opties voor het beheren van id's en berichtbezorging:
ENABLE_BROKER: Met deze optie wordt de bezorging van Service Broker-berichten geactiveerd, waarbij de bestaande Service Broker-id voor de database behouden blijft.Opmerking
Voor het inschakelen van SQL Server Service Broker in elke database is een databasevergrendeling vereist. Als u Service Broker in de
msdbdatabase wilt inschakelen, moet u eerst SQL Server Agent stoppen. Vervolgens kan Service Broker de benodigde vergrendeling verkrijgen.DISABLE_BROKER: Met deze optie wordt de bezorging van Service Broker-berichten gedeactiveerd, waarbij de bestaande Service Broker-id voor de database behouden blijft.NEW_BROKER: Met deze optie activeert u de bezorging van Service Broker-berichten en maakt u een nieuwe Service Broker-id voor de database. Deze optie beëindigt alle bestaande gesprekken in de database en retourneert een fout voor elk gesprek. Dit komt doordat deze gesprekken de nieuwe id niet gebruiken. Elke route die verwijst naar de oude Service Broker-id, moet opnieuw worden gemaakt met de nieuwe id.ERROR_BROKER_CONVERSATIONS: Met deze optie wordt de bezorging van Service Broker-berichten geactiveerd, waarbij de bestaande Service Broker-id voor de database behouden blijft. Service Broker beëindigt alle gesprekken in de database en retourneert een fout voor elk gesprek. Deze optie wordt meestal gebruikt wanneer u een database naar een ander tijdstip moet herstellen dan andere databases waarmee gesprekken zijn geopend. Alle gesprekken in de herstelde database moeten worden beëindigd met een fout omdat ze nu niet zijn gesynchroniseerd met de andere databases. De Service Broker-id wordt bewaard, zodat alle routes die verwijzen naar de id nog steeds geldig zijn.
Ongeacht de opgegeven optie staat SQL Server niet toe dat twee databases met dezelfde Service Broker-id actief zijn voor de bezorging van berichten in hetzelfde exemplaar van SQL Server. Als u een database met dezelfde Service Broker-id als een bestaande database koppelt, deactiveert SQL Server de levering van Service Broker-berichten in de database die wordt gekoppeld.
Zie CREATE DATABASE en ALTER DATABASE voor meer informatie over de opties voor het koppelen van databases. Zie How to: Activate Service Broker message delivery in databases( Service Broker message delivery in databases) (Service Broker-berichtbezorging activeren in databases) voor informatie over het activeren van Service Broker-berichtenbezorging in een database.