Создание и применение исходного моментального снимка

В данном разделе описывается процесс создания и применения исходного моментального снимка в SQL Server 2012 при помощи среды Среда SQL Server Management Studio, Transact-SQL или объектов RMO. Публикации слиянием, использующие параметризованные фильтры, требуют моментальных снимков, состоящих из двух частей. Дополнительные сведения см. в разделе Создание моментального снимка для публикации слиянием с параметризованными фильтрами.

В этом разделе

  • Для создания и применения исходного моментального снимка используется:

    Среда SQL Server Management Studio

    Transact-SQL

    объекты RMO;

Использование среды SQL Server Management Studio

По умолчанию, если выполняется агент SQL Server, агент моментальных снимков создает моментальный снимок сразу после того, как создана публикация с помощью мастера создания публикаций. Затем по умолчанию агент распространителя (для репликации моментальных снимков и репликации транзакций) или агент слияния (для подписок на публикацию слиянием) применяет моментальный снимок ко всем подпискам. Моментальный снимок также можно создать с помощью среды Среда SQL Server Management Studio и монитора репликации. Сведения о запуске монитора репликации см. в разделе Запуск монитора репликации.

Создание моментального снимка в среде Management Studio

  1. Подключитесь к издателю в Среда Management Studio, а затем разверните узел сервера.

  2. Раскройте папку Репликация, а затем папку Локальные публикации.

  3. Щелкните правой кнопкой мыши публикацию, для которой нужно создать моментальный снимок, а затем выберите Просмотреть состояние агента моментальных снимков.

  4. В диалоговом окне Просмотр состояния агента моментальных снимков — <публикация> нажмите кнопку Пуск.

Когда агент моментальных снимков закончит создание моментального снимка, на экране появится сообщение: «[100%] Сформирован моментальный снимок 17 статей».

Создание моментального снимка в мониторе репликации

  1. В мониторе репликации раскройте группу издателей на левой панели, а затем раскройте нужного издателя.

  2. Щелкните правой кнопкой мыши публикацию, для которой нужно создать моментальный снимок, и выберите Создать моментальный снимок.

  3. Чтобы просмотреть состояние агента моментальных снимков, перейдите на вкладку Агенты. Для получения дополнительных сведений щелкните правой кнопкой мыши агент моментальных снимков в сетке и выберите Просмотреть сведения.

Применение моментального снимка

  • После создания моментальный снимок применяется при синхронизации подписки с помощью агента распространителя или агента слияния:

    • Если агент настроен для постоянной работы (выбор по умолчанию для репликации транзакций), моментальный снимок применяется автоматически после того, как он был создан.

    • Если агент настроен для работы по расписанию, моментальный снимок применяется при следующем запланированном запуске агента.

    • Если агент настроен для работы по запросу, моментальный снимок применяется при следующем запуске агента.

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

Значок стрелки, используемый со ссылкой «В начало»[Top]

Использование Transact-SQL

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

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

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

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

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

  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.

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

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

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

  3. Добавьте статьи к публикации. Дополнительные сведения см. в разделе Определение статьи.

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

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

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

  2. Добавьте статьи к публикации. Дополнительные сведения см. в разделе Определение статьи.

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

    • -Publication

    • -Publisher

    • -Distributor

    • -PublisherDB

    • -ReplicationType

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

    • -DistributorLogin

    • -DistributorPassword

    • -DistributorSecurityMode = 0

    • -PublisherLogin

    • -PublisherPassword

    • -PublisherSecurityMode = 0

Примеры (Transact-SQL)

В этом примере показано, как создавать публикации транзакций и добавлять задания агента моментальных снимков к новым публикациям (с помощью переменных скрипта 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'AdventureWorks2012'; --publication database
SET @publication = N'AdvWorksCustomerTran'; -- transactional publication name
SET @login = $(Login);
SET @password = $(Password);

USE [AdventureWorks]

-- 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 [AdventureWorks2012]
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'AdventureWorks2012'; 
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 [AdventureWorks]
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=AdventureWorks2012 
SET Publication=AdvWorksSalesOrdersMerge 

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

Значок стрелки, используемый со ссылкой «В начало»[Top]

При помощи объектов RMO

После создания публикации агент моментальных снимков создает моментальный снимок. Создание моментального снимка и прямой доступ из управляемого кода к функциям агента репликации могут производиться программным путем с помощью объектов RMO. Какие именно объекты при этом применяются, зависит от типа репликации. Агент моментальных снимков может быть запущен как синхронно с помощью объекта SnapshotGenerationAgent, так и в асинхронном режиме из задания агента. После создания исходного моментального снимка он передается на сервер подписчика и применяется при первом сеансе синхронизации подписки. Когда данные в существующем моментальном снимке устарели, соответствующий ему агент должен быть запущен повторно. Дополнительные сведения см. в разделе Обслуживание публикаций.

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

По возможности предлагайте пользователям вводить учетные данные безопасности во время выполнения приложения. Если необходимо хранить учетные данные, используйте службы шифрования, предоставляемые платформой Microsoft Windows .NET Framework.

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

  1. Создайте соединение с издателем с помощью класса ServerConnection.

  2. Создайте экземпляр класса TransPublication. Задайте для публикации свойства Name и DatabaseName, а также установите созданное на шаге 1 соединение ServerConnection в качестве значения для свойства.

  3. Вызовите метод LoadProperties, чтобы загрузить оставшиеся свойства объекта. Если этот метод возвращает false, то либо на шаге 2 были неверно определены свойства публикации, либо публикация не существует.

  4. Если значение SnapshotAgentExists равно false, то для создания задания агента моментальных снимков для этой публикации вызовите метод CreateSnapshotAgent.

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

  6. Если параметр SnapshotAvailable имеет значение true, моментальный снимок доступен для подписчиков (необязательно).

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

  1. Создайте экземпляр класса SnapshotGenerationAgent и укажите следующие необходимые свойства.

    • Publisher — имя издателя.

    • PublisherDatabase — имя базы данных публикации.

    • Publication — имя публикации.

    • Distributor — имя распространителя.

    • PublisherSecurityMode — значение параметра Integrated, чтобы использовать проверку подлинности Windows для соединения с издателем, или значение Standard и значения параметров PublisherLogin и PublisherPassword, чтобы использовать проверку подлинности SQL Server для соединения с издателем. Рекомендуется использовать проверку подлинности Windows.

    • DistributorSecurityMode — значение параметра Integrated, чтобы использовать проверку подлинности Windows для соединения с распространителем, или значение Standard и значения параметров DistributorLogin и DistributorPassword, чтобы использовать проверку подлинности SQL Server для соединения с распространителем. Рекомендуется использовать проверку подлинности Windows.

  2. Укажите значение Transactional или Snapshot в параметре ReplicationType.

  3. Вызовите метод GenerateSnapshot.

Создание исходного моментального снимка для публикации слиянием из задания агента моментальных снимков (в асинхронном режиме)

  1. Создайте соединение с издателем с помощью класса ServerConnection.

  2. Создайте экземпляр класса MergePublication. Задайте для публикации свойства Name и DatabaseName, а также установите созданное на шаге 1 соединение ServerConnection в качестве значения для свойства.

  3. Вызовите метод LoadProperties, чтобы загрузить оставшиеся свойства объекта. Если этот метод возвращает false, то либо на шаге 2 были неверно определены свойства публикации, либо публикация не существует.

  4. Если значение SnapshotAgentExists равно false, то для создания задания агента моментальных снимков для этой публикации вызовите метод CreateSnapshotAgent.

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

  6. Если параметр SnapshotAvailable имеет значение true, моментальный снимок доступен для подписчиков (необязательно).

Создание исходного моментального снимка для публикации слиянием запуском агента моментальных снимков (в синхронном режиме)

  1. Создайте экземпляр класса SnapshotGenerationAgent и укажите следующие необходимые свойства.

    • Publisher — имя издателя.

    • PublisherDatabase — имя базы данных публикации.

    • Publication — имя публикации.

    • Distributor — имя распространителя.

    • PublisherSecurityMode — значение параметра Integrated, чтобы использовать проверку подлинности Windows для соединения с издателем, или значение Standard и значения параметров PublisherLogin и PublisherPassword, чтобы использовать проверку подлинности SQL Server для соединения с издателем. Рекомендуется использовать проверку подлинности Windows.

    • DistributorSecurityMode — значение параметра Integrated, чтобы использовать проверку подлинности Windows для соединения с распространителем, или значение Standard и значения параметров DistributorLogin и DistributorPassword, чтобы использовать проверку подлинности SQL Server для соединения с распространителем. Рекомендуется использовать проверку подлинности Windows.

  2. Укажите значение Merge в параметре ReplicationType.

  3. Вызовите метод GenerateSnapshot.

Примеры (объекты RMO)

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

            // Set the Publisher, publication database, and publication names.
            string publicationName = "AdvWorksProductTran";
            string publicationDbName = "AdventureWorks2012";
            string publisherName = publisherInstance;
            string distributorName = publisherInstance;

            SnapshotGenerationAgent agent;

            try
            {
                // Set the required properties for Snapshot Agent.
                agent = new SnapshotGenerationAgent();
                agent.Distributor = distributorName;
                agent.DistributorSecurityMode = SecurityMode.Integrated;
                agent.Publisher = publisherName;
                agent.PublisherSecurityMode = SecurityMode.Integrated;
                agent.Publication = publicationName;
                agent.PublisherDatabase = publicationDbName;
                agent.ReplicationType = ReplicationType.Transactional;

                // Start the agent synchronously.
                agent.GenerateSnapshot();

            }
            catch (Exception ex)
            {
                // Implement custom application error handling here.
                throw new ApplicationException(String.Format(
                    "A snapshot could not be generated for the {0} publication."
                    , publicationName), ex);
            }
' Set the Publisher, publication database, and publication names.
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2012"
Dim publisherName As String = publisherInstance
Dim distributorName As String = publisherInstance

Dim agent As SnapshotGenerationAgent

Try
    ' Set the required properties for Snapshot Agent.
    agent = New SnapshotGenerationAgent()
    agent.Distributor = distributorName
    agent.DistributorSecurityMode = SecurityMode.Integrated
    agent.Publisher = publisherName
    agent.PublisherSecurityMode = SecurityMode.Integrated
    agent.Publication = publicationName
    agent.PublisherDatabase = publicationDbName
    agent.ReplicationType = ReplicationType.Transactional

    ' Start the agent synchronously.
    agent.GenerateSnapshot()

Catch ex As Exception
    ' Implement custom application error handling here.
    Throw New ApplicationException(String.Format( _
     "A snapshot could not be generated for the {0} publication." _
     , publicationName), ex)
End Try

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

            // Set the Publisher, publication database, and publication names.
            string publicationName = "AdvWorksProductTran";
            string publicationDbName = "AdventureWorks2012";
            string publisherName = publisherInstance;

            TransPublication publication;

            // Create a connection to the Publisher using Windows Authentication.
            ServerConnection conn;
            conn = new ServerConnection(publisherName);

            try
            {
                // Connect to the Publisher.
                conn.Connect();

                // Set the required properties for an existing publication.
                publication = new TransPublication();
                publication.ConnectionContext = conn;
                publication.Name = publicationName;
                publication.DatabaseName = publicationDbName;

                if (publication.LoadProperties())
                {
                    // Start the Snapshot Agent job for the publication.
                    publication.StartSnapshotGenerationAgentJob();
                }
                else
                {
                    throw new ApplicationException(String.Format(
                        "The {0} publication does not exist.", publicationName));
                }
            }
            catch (Exception ex)
            {
                // Implement custom application error handling here.
                throw new ApplicationException(String.Format(
                    "A snapshot could not be generated for the {0} publication."
                    , publicationName), ex);
            }
            finally
            {
                conn.Disconnect();
            }
' Set the Publisher, publication database, and publication names.
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2012"
Dim publisherName As String = publisherInstance

Dim publication As TransPublication

' Create a connection to the Publisher using Windows Authentication.
Dim conn As ServerConnection
conn = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Set the required properties for an existing publication.
    publication = New TransPublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    If publication.LoadProperties() Then
        ' Start the Snapshot Agent job for the publication.
        publication.StartSnapshotGenerationAgentJob()
    Else
        Throw New ApplicationException(String.Format( _
         "The {0} publication does not exist.", publicationName))
    End If
Catch ex As Exception
    ' Implement custom application error handling here.
    Throw New ApplicationException(String.Format( _
     "A snapshot could not be generated for the {0} publication." _
     , publicationName), ex)
Finally
    conn.Disconnect()
End Try

Значок стрелки, используемый со ссылкой «В начало»[Top]

См. также

Основные понятия

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

Создание подписки по запросу

Создание принудительной подписки

Указание расписаний синхронизации

Создание и применение моментального снимка

Инициализация подписки с помощью моментального снимка

Основные понятия объектов RMO

Рекомендации по защите репликации

Основные понятия системных хранимых процедур репликации

Использование программы sqlcmd с переменными скрипта