Поделиться через


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

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

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

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

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

Создание и запуск задания агента моментальных снимков для формирования исходного моментального снимка

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

  2. Выполните sp_addpublication_snapshot (Transact-SQL). Укажите параметр @publication и следующие параметры.

    • @job_login — указывает учетные данные для проверки подлинности Windows, под которыми запускается агент моментальных снимков на распространителе.

    • @job_password — является паролем для указанных учетных данных Windows.

    • (Необязательно) Значение 0 в параметре @publisher_security_mode, если агент при соединении с издателем будет использовать проверку подлинности SQL Server. В этом случае в параметрах @publisher_login и @publisher_password нужно также указать данные имени входа для проверки подлинности SQL Server.

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

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

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

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

  4. На издателе в базе данных публикации выполните хранимую процедуру sp_startpublication_snapshot (Transact-SQL), указав в параметре @publication значение из шага 1.

Запуск агента моментальных снимков для формирования исходного моментального снимка

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

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

  3. Из командной строки или из пакетного файла запустите Агент моментальных снимков репликации, вызвав программу snapshot.exe со следующими параметрами командной строки.

    • -Publication

    • -Publisher

    • -Distributor

    • -PublisherDB

    • -ReplicationType

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

    • -DistributorLogin

    • -DistributorPassword

    • -DistributorSecurityMode = 0

    • -PublisherLogin

    • -PublisherPassword

    • -PublisherSecurityMode = 0

Пример

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

-- 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'; --publication database
SET @publication = N'AdvWorksCustomerTran'; -- transactional publication name
SET @login = $(Login);
SET @password = $(Password);

USE [AdventureWorks2008R2]

-- Enable transactional and 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 security mode used when connecting to the Publisher.
  @publisher_security_mode = 1;

-- Create new transactional publication, using the defaults. 
USE [AdventureWorks2008R2]
EXEC sp_addpublication 
  @publication = @publication, 
  @description = N'transactional publication';

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

-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO

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

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

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.
USE master
EXEC sp_replicationdboption 
  @dbname = @publicationDB, 
  @optname=N'merge publish',
  @value = N'true';

-- Create new merge publication, using the defaults. 
USE [AdventureWorks2008R2]
EXEC sp_addmergepublication 
  @publication = @publication, 
  @description = N'Merge publication.';

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

-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO

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

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

Пример разбит на строки для удобства чтения. В пакетном файле команды необходимо вводить в одной строке.

REM -- Declare variables
SET Publisher=%InstanceName%
SET PublicationDB=AdventureWorks2008R2 
SET Publication=AdvWorksSalesOrdersMerge 

REM --Start the Snapshot Agent to generate the snapshot for AdvWorksSalesOrdersMerge.
"C:\Program Files\Microsoft SQL Server\100\COM\SNAPSHOT.EXE" -Publication %Publication% 
-Publisher %Publisher% -Distributor %Publisher% -PublisherDB %PublicationDB% 
-ReplicationType 2 -OutputVerboseLevel 1 -DistributorSecurityMode 1