Aktivera uppdatering av prenumerationer för transaktionspublikationer

Gäller för:SQL Server

Detta ämne beskriver hur man möjliggör uppdatering av prenumerationer för transaktionspublikationer i SQL Server genom att använda SQL Server Management Studio eller Transact-SQL.

Note

Den här funktionen tas bort i en framtida version av SQL Server. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen.

Security

När det är möjligt uppmanar du användarna att ange säkerhetsautentiseringsuppgifter vid körning. Om du måste lagra autentiseringsuppgifter i en skriptfil måste du skydda filen för att förhindra obehörig åtkomst.

Använda SQL Server Management Studio

Aktivera uppdatering av prenumerationer för transaktionella publikationer på sidan Publikationstyp i Ny publiceringsguiden.

För att använda uppdatering av prenumerationer måste du också konfigurera alternativ i Nya prenumerationsguiden.

För att möjliggöra uppdatering av prenumerationer

  1. På sidan Publikationstyp i Guiden för ny publicering, välj Transaktionell publikation med uppdaterbara prenumerationer.

  2. På sidan Agent Security specificerar du säkerhetsinställningar för Queue Reader Agent utöver Snapshot Agent och Log Reader Agent. För mer information om vilka behörigheter som krävs för det konto som Queue Reader Agent körs under, se Replication Agent Security Model.

    Note

    Queue Reader Agent är konfigurerad även om du bara använder prenumerationer med omedelbar uppdatering.

Använda Transact-SQL

När du skapar en transaktionell publikation programmatiskt med hjälp av replikeringslagrade procedurer kan du aktivera antingen omedelbara eller köade uppdateringsprenumerationer.

Att skapa en publikation som stödjer omedelbar uppdatering av prenumerationer

  1. Vid behov, skapa ett jobb som loggläsaragent för publikationsdatabasen.

    • Om det redan finns ett jobb som Log Reader Agent för publikationsdatabasen, gå vidare till steg 2.

    • Om du är osäker på om det finns ett Log Reader Agent-jobb för en publicerad databas, kör sp_helplogreader_agent (Transact-SQL) vid Publisher i publikationsdatabasen. Om resultatuppsättningen är tom måste ett Log Reader Agent-jobb skapas.

    • På utgivaren kör du sp_addlogreader_agent (Transact-SQL). Ange de Microsoft Windows uppgifter under vilka agenten körs för @job_name och @password. Om agenten använder SQL Server Authentication vid anslutning till Publisher måste du också ange värdet 0 för @publisher_security_mode och Microsoft SQL Server inloggningsinformation för @publisher_login och @publisher_password.

  2. Utför sp_addpublication (Transact-SQL), och specificera värdet sant för parametern @allow_sync_tran.

  3. Vid Publisher, utför sp_addpublication_snapshot (Transact-SQL). Ange publiceringsnamnet som används i steg 2 för @publication och de Windows behörigheter under vilka Snapshot Agent körs för @job_name och @password. Om agenten använder SQL Server autentisering vid anslutning till Publisher måste du också ange värdet 0 för @publisher_security_mode och SQL Server inloggningsinformation för @publisher_login och @publisher_password. Detta skapar ett Snapshot Agent-jobb för publikationen.

  4. Lägg till artiklar i publikationen. Mer information finns i Definiera en artikel.

  5. På Prenumeranten, skapa en uppdaterad prenumeration på denna publikation.

Att skapa en publikation som stödjer köad uppdatering av prenumerationer

  1. Vid behov, skapa ett jobb som loggläsaragent för publikationsdatabasen.

    • Om det redan finns ett jobb som Log Reader Agent för publikationsdatabasen, gå vidare till steg 2.

    • Om du är osäker på om det finns ett Log Reader Agent-jobb för en publicerad databas, kör sp_helplogreader_agent (Transact-SQL) vid Publisher i publikationsdatabasen. Om resultatmängden är tom måste ett Log Reader Agent-jobb skapas.

    • På utgivaren kör du sp_addlogreader_agent (Transact-SQL). Ange de Windows inloggningsuppgifter som agenten använder för @job_name och @password. Om agenten använder SQL Server autentisering vid anslutning till Publisher måste du också ange värdet 0 för @publisher_security_mode och SQL Server inloggningsinformation för @publisher_login och @publisher_password.

  2. Om det behövs skapar du ett jobb för Queue Reader Agent åt Distributorn.

    • Om det redan finns ett Queue Reader Agent-jobb för distributionsdatabasen, gå vidare till steg 3.

    • Om du är osäker på om det finns ett Queue Reader Agent-jobb för distributionsdatabasen, kör sp_helpqreader_agent (Transact-SQL) på distributören i distributionsdatabasen. Om resultatuppsättningen är tom måste ett Queue Reader Agent-jobb skapas.

    • På distributionsservern kör du sp_addqreader_agent (Transact-SQL). Ange de Windows inloggningsuppgifter som agenten använder för @job_name och @password. Dessa inloggningsuppgifter används när Queue Reader Agent ansluter till Publisher och Subscriber. Mer information finns i Säkerhetsmodell för replikeringsagent.

  3. Utför sp_addpublication (Transact-SQL), där du specificerar värdet true för parametern @allow_queued_tran och värdet pub wins, sub reinit eller sub wins för @conflict_policy.

  4. Vid Publisher, utför sp_addpublication_snapshot (Transact-SQL). Ange publikationsnamnet som används i steg 3 för @publication och de Windows behörigheter under vilka Snapshot Agent körs för @snapshot_job_name och @password. Om agenten använder SQL Server autentisering vid anslutning till Publisher måste du också ange värdet 0 för @publisher_security_mode och SQL Server inloggningsinformation för @publisher_login och @publisher_password. Detta skapar ett Snapshot Agent-jobb för publikationen.

  5. Lägg till artiklar i publikationen. Mer information finns i Definiera en artikel.

  6. På Prenumeranten, skapa en uppdaterad prenumeration på denna publikation.

För att ändra konfliktpolicyn för en publikation som tillåter köad uppdatering av prenumerationer

  1. Vid Publisher i publikationsdatabasen, kör sp_changepublication (Transact-SQL). Ange ett conflict_policy-värde för @property och det önskade läget för konfliktprincipen pub wins, sub reinit eller sub wins för @value.

Exempel (Transact-SQL)

Detta exempel skapar en publikation som stöder både pullprenumerationer med omedelbar uppdatering och pullprenumerationer med köad uppdatering.

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

--Declarations for adding a transactional publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2022'; 
SET @publication = N'AdvWorksProductTran'; 
SET @login = $(Login); 
SET @password = $(Password); 

USE [AdventureWorks2022]
-- Enable transactional replication on the publication database.
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Create a transactional publication that supports immediate updating, 
-- queued updating, and pull subscriptions. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_sync_tran = N'true', 
    @allow_queued_tran = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true',
  -- Explicitly declare the related default properties 
    @conflict_policy = N'pub wins';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO

--Declarations for adding an article.
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @owner AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product'; 
SET @owner = N'Production'; 

-- Add a horizontally and vertically filtered article for the Product table.
USE [AdventureWorks2022]
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @article, 
    @source_table = @article, 
    @vertical_partition = N'false', 
    @type = N'logbased',
    @source_owner = @owner, 
    @destination_owner = @owner;
GO