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

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

Примечание по безопасностиПримечание по безопасности

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

Создание публикации транзакций или моментальных снимков

  1. Чтобы активировать публикацию текущей базы данных в репликации моментальных снимков или транзакций, в базе данных публикации на издателе выполните хранимую процедуру sp_replicationdboption (Transact-SQL).

  2. Для публикации транзакций необходимо выяснить наличие задания агента чтения журнала для базы данных публикации (этот шаг необязателен для публикаций моментальных снимков).

    • Если задание агента чтения журнала для указанной базы данных публикации уже существует, перейдите к шагу 3.

    • Если неизвестно, существует ли задание агента чтения журнала для публикуемой базы данных, выполните процедуру sp_helplogreader_agent (Transact-SQL) на издателе в базе данных публикации.

    • Если результирующий набор пуст, необходимо создать задание агента чтения журнала. На подписчике выполните хранимую процедуру sp_addlogreader_agent (Transact-SQL). Укажите в параметрах @job_name и @password учетные данные Microsoft Windows, с которыми работает агент. Если агент будет использовать проверку подлинности SQL Server для подключения к издателю, также необходимо указать значение 0 в параметре @publisher_security_mode и данные входа Microsoft SQL Server в параметрах @publisher_login и @publisher_password. Перейдите к шагу 3.

  3. На подписчике выполните хранимую процедуру sp_addpublication (Transact-SQL). Задайте имя публикации в параметре @publication, а в параметре @repl_freq задайте значение snapshot для публикации моментальных снимков или continuous для публикации транзакций. Укажите все остальные параметры публикации. Таким образом будет определена публикация.

    ПримечаниеПримечание

    Имена публикаций не могут содержать следующие символы:

    % * [ ] | : " ? \ / < >.

  4. На подписчике выполните хранимую процедуру sp_addpublication_snapshot (Transact-SQL). Укажите имя публикации, использовавшееся на шаге 3, в параметре @publication, а учетные данные Windows, с которыми работает агент моментальных снимков, — в параметрах @snapshot_job_name и @password. Если агент будет использовать проверку подлинности SQL Server для подключения к издателю, также необходимо указать значение 0 в параметре @publisher_security_mode и данные входа SQL Server в параметрах @publisher_login и @publisher_password. Будет создано задание агента моментальных снимков для публикации.

    Примечание по безопасностиПримечание по безопасности

    При настройке издателя с удаленным распространителем значения, задаваемые для всех аргументов, включая job_login и job_password, отправляются распространителю открытым текстом. Прежде чем выполнять эту хранимую процедуру, необходимо зашифровать соединение между издателем и его удаленным распространителем. Дополнительные сведения см. в разделе Шифрование соединений с SQL Server.

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

  6. Запустите задание агента моментальных снимков, чтобы создать исходный моментальный снимок для этой публикации. Дополнительные сведения см. в разделе Как создать исходный моментальный снимок (программирование репликации на языке Transact-SQL).

Создание публикации слиянием

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

  2. В базе данных публикации на издателе выполните процедуру изменения задержки и проверки соединений для репликации транзакций (sp_addmergepublication (Transact-SQL)). Укажите имя публикации в параметре @publication, а также все остальные параметры публикации. Таким образом будет определена публикация.

    ПримечаниеПримечание

    Имена публикаций не могут содержать следующие символы:

    % * [ ] | : " ? \ / < >.

  3. На подписчике выполните хранимую процедуру sp_addpublication_snapshot (Transact-SQL). Укажите имя публикации, использовавшееся на шаге 2, в параметре @publication, а учетные данные Windows, с которыми работает агент моментальных снимков, — в параметрах @snapshot_job_name и @password. Если агент будет использовать проверку подлинности SQL Server для подключения к издателю, также необходимо указать значение 0 в параметре @publisher_security_mode и данные входа SQL Server в параметрах @publisher_login и @publisher_password. Будет создано задание агента моментальных снимков для публикации.

    Примечание по безопасностиПримечание по безопасности

    При настройке издателя с удаленным распространителем значения, задаваемые для всех аргументов, включая job_login и job_password, отправляются распространителю открытым текстом. Прежде чем выполнять эту хранимую процедуру, необходимо зашифровать соединение между издателем и его удаленным распространителем. Дополнительные сведения см. в разделе Шифрование соединений с SQL Server.

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

  5. Запустите задание агента моментальных снимков, чтобы создать исходный моментальный снимок для этой публикации. Дополнительные сведения см. в разделе Как создать исходный моментальный снимок (программирование репликации на языке Transact-SQL).

Пример

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

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

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2008R2'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 

-- Enable transactional or snapshot 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 new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';

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

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

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. 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 merge publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2008R2'; 
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @login = $(Login);
SET @password = $(Password);

-- Enable merge replication on the publication database, using defaults.
USE master
EXEC sp_replicationdboption 
  @dbname=@publicationDB, 
  @optname=N'merge publish',
  @value = N'true' 

-- Create a new merge publication, explicitly setting the defaults. 
USE [AdventureWorks2008R2]
EXEC sp_addmergepublication 
-- These parameters are optional.
  @publication = @publication,
  -- optional parameters 
  @description = N'Merge publication of AdventureWorks2008R2.',
  @publication_compatibility_level  = N'90RTM';

-- Create a new snapshot job for the publication.
EXEC sp_addpublication_snapshot 
  @publication = @publication, 
  @job_login = @login, 
  @job_password = @password;
GO