Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Managed Instance
Varje databas innehåller en unik identifierare som används för att dirigera Service Broker-meddelanden till databasen. Det här avsnittet beskriver Service Broker-identifierare, hur Service Broker skyddar mot meddelandedirigering och vilka alternativ som är tillgängliga för att hantera Service Broker-identifierare.
Service Broker-identifierare
Varje databas innehåller en Service Broker-identifierare som skiljer den från alla andra databaser i nätverket. Kolumnen service_broker_guid i sys.databases katalogvyn visar Service Broker-identifieraren för varje databas i instansen. Service Broker-system kan utformas för att köra flera kopior av en tjänst. Varje kopia av tjänsten körs i en separat databas. I ett system som har flera kopior av en tjänst använder du instruktionssatsen BROKER_INSTANCECREATE ROUTE för att skapa en väg till en specifik kopia av tjänsten.
Service Broker-routning använder Service Broker-identifieraren för att säkerställa att alla meddelanden för en konversation levereras till samma databas. Instruktionen BEGIN DIALOG CONVERSATION öppnar en konversation med en måltjänst. Om en konversation har öppnats innehåller bekräftelsemeddelandet från måltjänsten Service Broker-identifieraren för måldatabasen. Service Broker dirigerar sedan alla meddelanden för konversationen till den angivna databasen.
Service Broker-identifierare kan anges i instruktionens TO SERVICEBEGIN DIALOG CONVERSATION sats för att styra vilken typ av routning som ska utföras:
Om du vill dirigera konversationer till en specifik kopia av en tjänst anger du en service_broker_guid. Du kan till exempel ha tre kopior av en tjänst i tre databaser i nätverket: en utvecklingsdatabas, en testdatabas och en produktionsdatabas. Instruktionerna
BEGIN DIALOG CONVERSATIONi varje system bör ange service_broker_guid för att säkerställa att alla meddelanden går till rätt databas.Om du vill låta Service Broker balansera konversationsbelastningar över flera kopior av en tjänst anger du inte service_broker_guid. Service Broker väljer alternativt bland vägarna med samma tjänstnamn som anges i -satsen
TO SERVICEiBEGIN DIALOG CONVERSATION.
Om det bara finns en kopia av en tjänst i ett nätverk dirigerar Service Broker som standard konversationerna korrekt. Du behöver inte ange Service Broker-identifieraren i CREATE ROUTE eller BEGIN DIALOG CONVERSATION -instruktioner.
För mer information om Service Broker-routningsmatchning, se Service Broker-routning.
För att kunna leverera meddelanden korrekt bör varje Service Broker-identifierare vara unik för alla instanser av databasmotorn i samma nätverk. Annars kan meddelanden vara felriktade. När en ny databas skapas tilldelas den en ny Service Broker-identifierare som ska vara unik i nätverket. Identifieraren återställs när databasen antingen återställs eller kopplas. Var försiktig när du återställer och bifogar databaser. Du bör inte ha flera databaser som aktivt utför Service Broker-åtgärder och använder samma identifierare.
Meddelandeleverans för Service Broker
SQL Server tillhandahåller en mekanism för att inaktivera Service Broker-meddelandeleverans i en databas om den har samma Service Broker-identifierare som en annan databas i samma nätverk. När meddelandeleveransen inaktiveras i en databas finns alla meddelanden som skickas från databasen kvar i överföringskö för databasen. Dessutom anser Service Broker inte att tjänster i databasen är tillgängliga för att ta emot meddelanden. Dessa tjänster beaktas inte när Service Broker-routning letar upp en måltjänst i en instans.
Om du inaktiverar service broker-meddelandeleveransen kan du på ett säkert sätt bifoga en säkerhetskopia av en databas för felsökning eller dataåterställning utan risk för felriktade meddelanden. Kolumnen is_broker_enabledsys.databases i visar det aktuella tillståndet för Service Broker-meddelandeleverans för varje databas.
När du kopplar eller återställer en databas bör du se till att endast en databas som har en viss Service Broker-identifierare har meddelandeleveransen aktiv. Annars kan meddelanden vara felriktade och bearbetning för en konversation kan ske i fel kopia av databasen.
Hantera identifierare och meddelandeleverans
Kommandot CREATE DATABASE , ALTER DATABASE kommandot och RESTORE DATABASE kommandot innehåller alternativ för att aktivera service broker-meddelandeleverans. De innehåller också alternativ för att ändra Service Broker-identifieraren för en databas.
När du ansluter eller återställer en databas ändras som standard service broker-identifieraren och meddelandeleveransstatusen oförändrade. Vanligtvis ändrar du inte Service Broker-identifieraren i följande situationer:
- När du återställer en säkerhetskopia i återställningssyfte.
- När du konfigurerar ett speglat par.
- När du konfigurerar loggöverföring för en väntelägesserver. När du gör en kopia av databasen ändrar du instansidentifieraren.
Det finns fyra alternativ för att hantera identifierare och meddelandeleverans:
ENABLE_BROKER: Det här alternativet aktiverar Service Broker-meddelandeleverans och bevarar den befintliga Service Broker-identifieraren för databasen.Anmärkning
För att aktivera SQL Server Service Broker i alla databaser krävs ett databaslås. Om du vill aktivera Service Broker i
msdbdatabasen stoppar du först SQL Server Agent. Sedan kan Service Broker hämta det nödvändiga låset.DISABLE_BROKER: Det här alternativet inaktiverar leverans av Service Broker-meddelanden, vilket bevarar den befintliga Service Broker-identifieraren för databasen.NEW_BROKER: Det här alternativet aktiverar service broker-meddelandeleverans och skapar en ny Service Broker-identifierare för databasen. Det här alternativet avslutar alla befintliga konversationer i databasen och returnerar ett fel för varje konversation. Det beror på att dessa konversationer inte använder den nya identifieraren. Alla vägar som refererar till den gamla Service Broker-identifieraren måste återskapas med den nya identifieraren.ERROR_BROKER_CONVERSATIONS: Det här alternativet aktiverar Service Broker-meddelandeleverans och bevarar den befintliga Service Broker-identifieraren för databasen. Service Broker avslutar alla konversationer i databasen och returnerar ett fel för varje konversation. Det här alternativet används vanligtvis när du måste återställa en databas till en annan tidpunkt än andra databaser som den har öppna konversationer med. Alla konversationer i den återställde databasen måste avslutas med ett fel eftersom de nu inte är synkroniserade med de andra databaserna. Service Broker-identifieraren behålls så att alla vägar som refererar till identifieraren fortfarande är giltiga.
Oavsett det angivna alternativet tillåter INTE SQL Server att två databaser som har samma Service Broker-identifierare har meddelandeleverans aktiv i samma instans av SQL Server. Om du bifogar en databas som har samma Service Broker-identifierare som en befintlig databas inaktiverar SQL Server service broker-meddelandeleveransen i databasen som kopplas.
Mer information om alternativen för att koppla databaser finns i SKAPA DATABAS och ÄNDRA DATABAS. Information om hur du aktiverar Service Broker-meddelandeleverans i en databas finns i Så här aktiverar du meddelandeleverans av Service Broker i databaser.