Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описывается создание и применение начального моментального снимка в SQL Server 2014 с помощью SQL Server Management Studio, Transact-SQL или объектов управления репликацией (RMO). Публикации, объединяющие параметризованные фильтры, требуют создания моментального снимка из двух частей. Для получения дополнительной информации см. статью "Создание моментального снимка для публикации слиянием с параметризованными фильтрами".
В этом разделе
Чтобы создать и применить начальный моментальный снимок, используйте:
Использование среды SQL Server Management Studio
По умолчанию, если агент SQL Server запущен, моментальный снимок создается агентом моментальных снимков сразу после создания публикации с помощью мастера создания новой публикации. По умолчанию он применяется агентом распределения (для снимков и репликации транзакций) или Агентом слияния (для подписок со слиянием) для всех подписок. Моментальный снимок также можно создать с помощью SQL Server Management Studio и монитора репликации. Сведения о запуске монитора репликации см. в разделе "Запуск монитора репликации".
Создайте снимок в Management Studio
Подключитесь к издателю в Management Studio и разверните узел сервера.
Раскройте папку Репликация , а затем папку Локальные публикации .
Щелкните правой кнопкой мыши публикацию, для которой требуется создать моментальный снимок, и выберите пункт "Просмотреть состояние агента моментальных снимков".
В диалоговом окне "Состояние агента моментальных снимков - Публикация>", нажмите кнопку Пуск.
После завершения создания моментального снимка агент моментальных снимков отобразит сообщение, например: "[100%] Был создан снимок из 17 статей".
Чтобы создать моментальный снимок в мониторе репликации
В мониторе репликации разверните группу издателя в левой панели, а затем разверните издателя.
Щелкните правой кнопкой мыши публикацию, для которой требуется создать моментальный снимок, и нажмите кнопку "Создать моментальный снимок".
Чтобы просмотреть состояние агента моментальных снимков, перейдите на вкладку "Агенты ". Для получения дополнительных сведений щелкните правой кнопкой мыши агент моментальных снимков в сетке и выберите пункт "Просмотреть сведения".
Применение моментального снимка
После создания моментального снимка он применяется путем синхронизации подписки с агентом распространителя или агентом слияния:
Если агент настроен на выполнение непрерывно (что является настройкой по умолчанию для транзакционной репликации), моментальный снимок автоматически применяется после его создания.
Если агент настроен на выполнение по расписанию, снимок применяется при следующем запланированном запуске агента.
Если агент настроен на выполнение по запросу, он будет применён при следующем запуске агента.
Дополнительные сведения о синхронизации подписок см. в разделе "Синхронизация принудительной подписки " и "Синхронизация подписки по запросу".
Использование Transact-SQL
Начальные моментальные снимки можно создать программным способом, создав и запустив задание агента моментальных снимков или запустив исполняемый файл агента моментальных снимков из пакетного файла. После создания начального моментального снимка он передается и применяется на подписчике при первой синхронизации подписки. Если вы запускаете агент моментальных снимков из командной строки или пакетного файла, необходимо повторно запустить агент всякий раз, когда существующий моментальный снимок становится недействительным.
Это важно
По возможности предлагайте пользователям вводить учетные данные системы безопасности во время выполнения приложения. В случае необходимости хранения учетных данных в файле скрипта этот файл следует защищать во избежание несанкционированного доступа.
Создание и запуск задания агента моментальных снимков для создания начального моментального снимка
Создайте публикацию моментального снимка, транзакционную публикацию или публикацию слияния. Дополнительные сведения см. в разделе Create a Publication.
Выполните sp_addpublication_snapshot (Transact-SQL). Укажите @publication и следующие параметры:
Значение @job_login, указывающее учетные данные проверки подлинности Windows, под которыми агент моментальных снимков выполняется на распространителе.
**Пароль @job_password**для предоставленных учетных данных Windows.
(Необязательно) Значение 0 для @publisher_security_mode , если агент будет использовать проверку подлинности SQL Server при подключении к издателю. В этом случае необходимо также указать данные для входа с аутентификацией SQL Server: @publisher_login и @publisher_password.
(Необязательно) Расписание синхронизации для задачи агента моментальных снимков. Дополнительные сведения см. в разделе "Указание расписаний синхронизации".
Это важно
При настройке издателя с удаленным распространителем значения, предоставленные для всех параметров, включая job_login и job_password, отправляются распространителю в виде обычного текста. Перед выполнением этой хранимой процедуры необходимо зашифровать подключение между издателем и его удаленным распространителем. Дополнительные сведения см. в статье Включение шифрования соединений в компоненте Database Engine (диспетчер конфигурации SQL Server).
Добавьте статьи в публикацию. Дополнительные сведения см. в статье определить статью.
На издателе в базе данных публикации выполните sp_startpublication_snapshot (Transact-SQL), указав значение @publication из шага 1.
Для запуска агента моментальных снимков с целью создания начального снимка.
Создайте публикацию моментального снимка, транзакционную публикацию или публикацию слияния. Дополнительные сведения см. в разделе Create a Publication.
Добавьте статьи в публикацию. Дополнительные сведения см. в статье определить статью.
В командной строке или пакетном файле запустите агент моментальных снимков репликации , выполнив snapshot.exe, указав следующие аргументы командной строки:
-Публикация
-Издатель
-Распределитель
-PublisherDB
-ReplicationType
При использовании проверки подлинности SQL Server необходимо также указать следующие аргументы:
-DistributorLogin
-Пароль дистрибьютора
-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
Следующие аргументы командной строки запускают агент моментальных снимков для генерации моментального снимка для объединенной публикации.
Замечание
Разрывы строк были добавлены для улучшения удобочитаемости. В пакетном файле команды должны выполняться в одной строке.
@ECHO OFF
SET InstanceName=%computername%
REM<snippetstartmergesnapshot_10>
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\120\COM\SNAPSHOT.EXE" -Publication %Publication%
-Publisher %Publisher% -Distributor %Publisher% -PublisherDB %PublicationDB%
-ReplicationType 2 -OutputVerboseLevel 1 -DistributorSecurityMode 1
REM</snippetstartmergesnapshot_10>
PAUSE
Использование объектов управления репликацией (RMO)
Агент моментальных снимков создаёт моментальные снимки после создания публикации. Эти моментальные снимки можно создавать программным способом с помощью объектов управления репликацией (RMO) и прямого доступа к функциям агента репликации. Используемые объекты зависят от типа репликации. Агент моментальных снимков можно запустить синхронно с помощью SnapshotGenerationAgent объекта или асинхронно с помощью задания агента. После создания начального снимка состояния он передается подписчику и применяется при первой синхронизации подписки. Необходимо повторно запустить агент всякий раз, когда существующий моментальный снимок больше не содержит допустимых данных, таких как up-to-date. Дополнительные сведения см. в разделе "Обслуживание публикаций".
Это важно
По возможности предлагайте пользователям вводить учетные данные системы безопасности во время выполнения приложения. Если необходимо сохранить учетные данные, используйте криптографические службы, предоставляемые microsoft Windows платформа .NET Framework.
Создание начального моментального снимка для публикации моментального снимка или публикации транзакций путем запуска задания агента моментальных снимков (асинхронного)
Создайте соединение с издателем с помощью класса ServerConnection .
Создайте экземпляр класса TransPublication. Задайте свойства Name и DatabaseName для публикации, а свойству ConnectionContext присвойте соединение, созданное на шаге 1.
LoadProperties Вызовите метод для загрузки оставшихся свойств объекта. Если этот метод возвращает
false, свойства публикации на шаге 2 были определены неправильно или публикация не существует.Если значение SnapshotAgentExists равно
false, вызовите CreateSnapshotAgent, чтобы создать задание агента моментальных снимков для этой публикации.Вызовите метод StartSnapshotGenerationAgentJob, чтобы запустить агентскую задачу, которая создает моментальный снимок для этой публикации.
(Необязательно) Если значение SnapshotAvailable равно
true, моментальный снимок доступен подписчикам.
Сформировать начальный моментальный снимок для публикации моментального снимка или транзакционной публикации путем запуска агента моментальных снимков (синхронно)
Создайте экземпляр SnapshotGenerationAgent класса и задайте следующие обязательные свойства:
Publisher — имя издателя
PublisherDatabase — имя базы данных публикации
Publication — имя публикации
Distributor — имя распространителя
PublisherSecurityMode — значение Integrated для использования проверки подлинности Windows при подключении к издателю или значению Standard и значению PublisherLoginPublisherPassword и использованию проверки подлинности SQL Server при подключении к издателю. Рекомендуется использовать проверку подлинности Windows.
DistributorSecurityMode — значение Integrated для использования проверки подлинности Windows при подключении к распространителю или значение Standard вместе с значениями DistributorLogin и DistributorPassword для использования проверки подлинности SQL Server при подключении к распространителю. Рекомендуется использовать проверку подлинности Windows.
Задайте значение Transactional или Snapshot для ReplicationType.
Вызовите метод GenerateSnapshot .
Создание начального моментального снимка публикации для слияния путем запуска асинхронного задания агента моментальных снимков
Создайте соединение с издателем с помощью класса ServerConnection .
Создайте экземпляр класса MergePublication. Задайте свойства Name и DatabaseName для публикации, а свойство ConnectionContext установите как соединение, созданное на шаге 1.
LoadProperties Вызовите метод для загрузки оставшихся свойств объекта. Если этот метод возвращает
false, свойства публикации на шаге 2 были определены неправильно или публикация не существует.Если значение SnapshotAgentExists равно
false, вызовите CreateSnapshotAgent для создания задачи агента моментальных снимков для этой публикации.Вызовите метод StartSnapshotGenerationAgentJob, чтобы запустить задание агента, создающее моментальный снимок для этой публикации.
(Необязательно) Если значение SnapshotAvailable равно
true, моментальный снимок доступен подписчикам.
Чтобы создать начальный моментальный снимок для публикации объединения, запустив агента моментальных снимков (синхронного)
Создайте экземпляр SnapshotGenerationAgent класса и задайте следующие обязательные свойства:
Publisher — имя издателя
PublisherDatabase — имя базы данных публикации
Publication — имя публикации
Distributor — имя распространителя
PublisherSecurityMode — значение Integrated для использования проверки подлинности Windows при подключении к издателю, или значение Standard вместе со значениями PublisherLogin и PublisherPassword для использования проверки подлинности SQL Server при подключении к издателю. Рекомендуется использовать проверку подлинности Windows.
DistributorSecurityMode — значение Integrated для использования проверки подлинности Windows при подключении к распространителю или значение Standard и значения для DistributorLogin и DistributorPassword для использования проверки подлинности SQL Server при подключении к распространителю. Рекомендуется использовать проверку подлинности Windows.
Задайте значение Merge для ReplicationType.
Вызовите метод 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
См. также
Создание публикации
Создать выборочную подписку
Создание Push-подписки
Указание расписаний синхронизации
Создание и применение моментального снимка
Инициализация подписки с помощью моментального снимка
Концепции объектов управления репликацией
Рекомендации по обеспечению безопасности репликации
Основные понятия хранимых процедур системы репликации
Использование sqlcmd с переменными скриптов