Как настроить публикацию и распространение (программирование репликации на языке Transact-SQL)

Публикацию и распространение репликации можно настроить программно с помощью хранимых процедур репликации.

Настройка публикации с помощью локального распространителя

  1. Чтобы определить, настроен ли сервер в качестве распространителя, выполните процедуру, описанную в разделе sp_get_distributor (Transact-SQL).

    • Если значение installed в результирующем наборе равно 0, выполните процедуру sp_adddistributor (Transact-SQL) в базе данных master на распространителе.

    • Если значение distribution db installed в результирующем наборе равно 0, в базе данных master на распространителе выполните процедуру sp_adddistributiondb (Transact-SQL). Укажите имя базы данных распространителя в параметре @database. При необходимости можно указать максимальный срок хранения транзакции в @max_distretention и срок хранения журнала в @history_retention. Если создается новая база данных, укажите желаемые параметры свойств.

  2. На распространителе, который также является издателем, выполните хранимую процедуру sp_adddistpublisher (Transact-SQL), указав общий ресурс UNC, который будет использоваться как папка по умолчанию для моментальных снимков в параметре @working_directory.

  3. На подписчике выполните хранимую процедуру sp_replicationdboption (Transact-SQL). Укажите опубликованную базу данных в параметре @dbname, тип репликации в параметре @optname и значение true в параметре @value.

Настройка публикации с помощью удаленного распространителя

  1. Чтобы определить, настроен ли сервер в качестве распространителя, выполните процедуру, описанную в разделе sp_get_distributor (Transact-SQL).

    • Если значение installed в результирующем наборе равно 0, выполните процедуру sp_adddistributor (Transact-SQL) в базе данных master на распространителе. Укажите надежный пароль в параметре @password. Этот пароль для учетной записи distributor_admin используется издателем при соединении с распространителем.

    • Если значение distribution db installed в результирующем наборе равно 0, в базе данных master на распространителе выполните процедуру sp_adddistributiondb (Transact-SQL). Укажите имя базы данных распространителя в параметре @database. При необходимости можно указать максимальный срок хранения транзакции в @max_distretention и срок хранения журнала в @history_retention. Если создается новая база данных, укажите желаемые параметры свойств.

  2. На распространителе выполните хранимую процедуру sp_adddistpublisher (Transact-SQL), указав общий ресурс UNC, который будет использоваться как папка по умолчанию для моментальных снимков в параметре @working_directory. Если распространитель будет использовать проверку подлинности SQL Server при соединении с издателем, то нужно также указать значение 0 в параметре @security_mode и данные имени входа в Microsoft SQL Server для параметров @login и @password.

  3. На издателе в базе данных master выполните хранимую процедуру sp_adddistributor (Transact-SQL). Укажите надежный пароль из шага 1 в параметре @password. Этот пароль будет использоваться издателем при соединении с распространителем.

  4. На подписчике выполните хранимую процедуру sp_replicationdboption (Transact-SQL). Укажите опубликованную базу данных в параметре @dbname, тип репликации в параметре @optname и значение true в параметре @value.

Пример

В следующих разделах описывается программная настройка публикации и распространения. В этом примере имя сервера, настраиваемого в качестве издателя и локального распространителя, указывается с помощью переменных сценария.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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".

-- Install the Distributor and the distribution database.
DECLARE @distributor AS sysname;
DECLARE @distributionDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @directory AS nvarchar(500);
DECLARE @publicationDB AS sysname;
-- Specify the Distributor name.
SET @distributor = $(DistPubServer);
-- Specify the distribution database.
SET @distributionDB = N'distribution';
-- Specify the Publisher name.
SET @publisher = $(DistPubServer);
-- Specify the replication working directory.
SET @directory = N'\\' + $(DistPubServer) + '\repldata';
-- Specify the publication database.
SET @publicationDB = N'AdventureWorks2008R2'; 

-- Install the server MYDISTPUB as a Distributor using the defaults,
-- including autogenerating the distributor password.
USE master
EXEC sp_adddistributor @distributor = @distributor;

-- Create a new distribution database using the defaults, including
-- using Windows Authentication.
USE master
EXEC sp_adddistributiondb @database = @distributionDB, 
    @security_mode = 1;
GO

-- Create a Publisher and enable AdventureWorks2008R2 for replication.
-- Add MYDISTPUB as a publisher with MYDISTPUB as a local distributor
-- and use Windows Authentication.
DECLARE @distributionDB AS sysname;
DECLARE @publisher AS sysname;
-- Specify the distribution database.
SET @distributionDB = N'distribution';
-- Specify the Publisher name.
SET @publisher = $(DistPubServer);

USE [distribution]
EXEC sp_adddistpublisher @publisher=@publisher, 
    @distribution_db=@distributionDB, 
    @security_mode = 1;
GO