Włącz aktualizację subskrypcji dla publikacji transakcyjnych

Dotyczy:SQL Server

Ten temat opisuje, jak umożliwić aktualizację subskrypcji publikacji transakcyjnych w SQL Server za pomocą SQL Server Management Studio lub Transact-SQL.

Uwaga / Notatka

Ta funkcja zostanie usunięta w przyszłej wersji programu SQL Server. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji.

Zabezpieczenia

Jeśli to możliwe, proś użytkowników o wprowadzanie poświadczeń zabezpieczających w czasie działania. Jeśli musisz przechowywać poświadczenia w pliku skryptu, musisz zabezpieczyć plik, aby zapobiec nieautoryzowanemu dostępowi.

Korzystanie z programu SQL Server Management Studio

Włącz aktualizację subskrypcji publikacji transakcyjnych na stronie Typ publikacji w Kreatorze Nowych Publikacji.

Aby korzystać z aktualizacji subskrypcji, musisz także skonfigurować opcje w kreatorze nowych subskrypcji.

Aby umożliwić aktualizację subskrypcji

  1. Na stronie Typ publikacji w Kreatorze Nowych Publikacji wybierz Publikację transakcyjną z aktualizowanymi subskrypcjami.

  2. Na stronie Bezpieczeństwo Agenta określ ustawienia bezpieczeństwa dla Queue Reader Agent, oprócz Snapshot Agent i Log Reader Agent. Aby uzyskać więcej informacji o uprawnieniach wymaganych dla konta, na którym działa Agent Reader Queue, zobacz Model Bezpieczeństwa Agenta Replikacji.

    Uwaga / Notatka

    Agent Queue Reader jest skonfigurowany nawet wtedy, gdy używasz tylko subskrypcji z natychmiastową aktualizacją.

Korzystanie z Transact-SQL

Podczas programistycznego tworzenia publikacji transakcyjnej za pomocą procedur składowanych replikacji można włączyć subskrypcje aktualizowane natychmiastowo albo kolejkowane.

Stworzenie publikacji wspierającej natychmiastową aktualizację subskrypcji

  1. Jeśli to konieczne, utwórz zadanie Log Reader Agent dla bazy danych publikacji.

    • Jeśli stanowisko Log Reader Agent już istnieje dla bazy publikacji, przejdź do kroku 2.

    • Jeśli nie masz pewności, czy dla opublikowanej bazy danych istnieje zadanie agenta Log Reader Agent, wykonaj polecenie sp_helplogreader_agent (Transact-SQL) u wydawcy w bazie danych publikacji. Jeśli zbiór wyników jest pusty, należy utworzyć zadanie Log Reader Agent.

    • U wydawcy wykonaj sp_addlogreader_agent (Transact-SQL). Określ Microsoft Windows poświadczenia, pod którymi agent działa dla @job_name i @password. Jeśli agent użyje uwierzytelniania SQL Server podczas łączenia się z Publisher, musisz również podać wartość 0 dla @publisher_security_mode oraz dane logowania Microsoft SQL Server dla @publisher_login i @publisher_password.

  2. Wykonaj sp_addpublication (Transact-SQL), określając wartość true dla parametru @allow_sync_tran.

  3. Na Publisher wykonaj sp_addpublication_snapshot (Transact-SQL). Określ nazwę publikacji używaną w kroku 2 dla @publication oraz poświadczenia systemu Windows, na których jest uruchamiany Agent migawki, dla @job_name i @password. Jeśli agent użyje uwierzytelniania SQL Server podczas łączenia się z Publisher, musisz również podać wartość 0 dla @publisher_security_mode oraz dane logowania SQL Server dla @publisher_login i @publisher_password. To tworzy stanowisko Snapshot Agent dla publikacji.

  4. Dodaj artykuły do publikacji. Aby uzyskać więcej informacji, zobacz Definiowanie artykułu.

  5. Na stronie Subskrybera utworz aktualizującą subskrypcję tej publikacji.

Aby stworzyć publikację wspierającą kolejkowe aktualizowanie subskrypcji

  1. Jeśli to konieczne, utwórz zadanie Log Reader Agent dla bazy danych publikacji.

    • Jeśli stanowisko Log Reader Agent już istnieje dla bazy publikacji, przejdź do kroku 2.

    • Jeśli nie masz pewności, czy dla opublikowanej bazy danych istnieje zadanie agenta Log Reader Agent, wykonaj polecenie sp_helplogreader_agent (Transact-SQL) u wydawcy w bazie danych publikacji. Jeśli zbiór wyników jest pusty, należy utworzyć zadanie Log Reader Agent.

    • U wydawcy wykonaj sp_addlogreader_agent (Transact-SQL). Określ poświadczenia systemu Windows, na których ma działać agent, dla @job_name i @password. Jeśli agent użyje uwierzytelniania SQL Server podczas łączenia się z Publisher, musisz również podać wartość 0 dla @publisher_security_mode oraz dane logowania SQL Server dla @publisher_login i @publisher_password.

  2. W razie potrzeby utwórz zadanie agenta odczytu kolejki dla Dystrybutora.

    • Jeśli zadanie Queue Reader Agent już istnieje dla bazy dystrybucji, przejdź do kroku 3.

    • Jeśli nie masz pewności, czy dla bazy danych dystrybucji istnieje zadanie Agenta czytnika kolejki, wykonaj polecenie sp_helpqreader_agent (Transact-SQL) na serwerze Dystrybutora w bazie danych dystrybucji. Jeśli zbiór wyników jest pusty, należy utworzyć zadanie Queue Reader Agent.

    • W Dystrybutorze wykonaj sp_addqreader_agent (Transact-SQL). Określ poświadczenia systemu Windows, na których ma działać agent, dla @job_name i @password. Te dane uwierzytelniające są używane, gdy Agent Queue Reader łączy się z Publisher i Subskrybentem. Aby uzyskać więcej informacji, zobacz model zabezpieczeń agenta replikacji .

  3. Wykonaj sp_addpublication (Transact-SQL), określając wartość true dla parametru @allow_queued_tran oraz wartość pub wins, sub reinit lub sub wins dla parametru @conflict_policy.

  4. Na Publisher wykonaj sp_addpublication_snapshot (Transact-SQL). Określ nazwę publikacji używaną w kroku 3 dla @publication oraz poświadczenia systemu Windows, przy użyciu których działa Snapshot Agent, dla @snapshot_job_name i @password. Jeśli agent użyje uwierzytelniania SQL Server podczas łączenia się z Publisher, musisz również podać wartość 0 dla @publisher_security_mode oraz dane logowania SQL Server dla @publisher_login i @publisher_password. To tworzy stanowisko Snapshot Agent dla publikacji.

  5. Dodaj artykuły do publikacji. Aby uzyskać więcej informacji, zobacz Definiowanie artykułu.

  6. Na stronie Subskrybera utworz aktualizującą subskrypcję tej publikacji.

Aby zmienić politykę konfliktową dla publikacji umożliwiającej kolejkowe aktualizowanie subskrypcji

  1. W Publikatorze, w bazie danych publikacji, uruchom sp_changepublication (Transact-SQL). Określ wartość conflict_policy dla @property oraz żądany tryb rozwiązywania konfliktów: wygrywa publikujący, ponowna inicjalizacja subskrybenta lub wygrywa subskrybent dla @value.

Przykład (Transact-SQL)

Ten przykład tworzy publikację, która obsługiwała zarówno subskrypcje natychmiastowe, jak i kolejkowe aktualizacje pull (wyciąganie danych).

-- 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