Настройка публикации и распространения
В этом разделе описывается настройка публикации и распространения в SQL Server 2014 с помощью SQL Server Management Studio, Transact-SQL или объектов RMO.
Перед началом
Безопасность
Дополнительные сведения см. в разделе Развертывание безопасной репликации.
Использование среды SQL Server Management Studio
Настройте распространение с помощью мастера создания публикаций или мастера настройки распространителя. После настройки распространителя просмотрите и измените свойства в диалоговом окне Свойства распространителя — <распространитель> . Используйте мастер настройки распространителя, если требуется настроить распространитель так, чтобы члены предопределенных ролей базы данных db_owner могли создавать публикации, или если требуется настроить удаленный распространитель, который не является издателем.
Настройка распространения
В среде Microsoft SQL Server Management Studio подключитесь к серверу, который будет выступать в роли распространителя (в большинстве случаев издатель и распространитель являются одним сервером), и разверните узел сервера.
Щелкните правой кнопкой мыши папку Репликация , затем щелкните Настройка распространения.
Выполняйте инструкции мастера настройки распространителя:
Выберите распространитель. Чтобы использовать локальный распространитель, выберите "<Имя_>сервера" будет выступать в качестве собственного распространителя; SQL Server создаст базу данных распространителя и журнал. Для использования удаленного распространителя выберите Использовать следующий сервер в качестве распространителя, а затем выберите сервер. Сервер должен быть сконфигурирован в качестве распространителя, а издатель должен быть включен для использования распространителя. Дополнительные сведения см. в разделе Включение удаленного издателя на распространитее (SQL Server Management Studio)).
Если выбран удаленный распространитель, необходимо ввести пароль на странице Административный пароль , который требуется для соединения издателя с распространителем. Пароль должен совпадать с паролем, указанным при включении издателя на удаленном распространителе.
Укажите корневую папку моментальных снимков (для локального распространителя). Папка моментальных снимков — это просто каталог, назначенный для совместного использования; агенты, считывающие и записывающие данные в эту папку, должны иметь достаточные разрешения для доступа к ней. Каждый издатель, использующий распространитель, создает папку в корневой папке, каждая публикация создает папки в папке «Издатель», в которой хранятся файлы моментальных снимков. Дополнительные сведения о надлежащей защите папок см. в разделе Организация безопасности папки моментальных снимков.
Укажите базу данных распространителя (для локального распространителя). В базе данных распространителя хранятся метаданные и данные журнала для всех типов репликации и транзакций, относящихся к репликации транзакций.
При необходимости укажите, что другие издатели могут использовать распространитель. Если другим издателям разрешено использовать распространитель, необходимо ввести пароль на странице Пароль распространителя , который используется для подключения этих издателей к распространителю.
При необходимости создайте скрипт настроек конфигурации. Дополнительные сведения см. в разделе Scripting Replication.
Использование Transact-SQL
Публикацию и распространение репликации можно настроить программно с помощью хранимых процедур репликации.
Настройка публикации с помощью локального распространителя
Выполните sp_get_distributor (Transact-SQL), чтобы определить, настроен ли сервер в качестве распространителя.
Если значение параметра installed в результирующем наборе равно 0, выполните sp_adddistributor (Transact-SQL) на распространитее в базе данных master.
Если значение базы данных распространителя, установленного в результирующем наборе, равно 0, выполните sp_adddistributiondb (Transact-SQL) на распространитетеле в базе данных master. Укажите имя базы данных распространителя в параметре @database. При необходимости можно указать максимальный срок хранения транзакции в @max_distretention и срок хранения журнала в @history_retention. Если создается новая база данных, укажите желаемые параметры свойств.
На распространителе, который также является издателем, выполните sp_adddistpublisher (Transact-SQL), указав общую папку UNC, которая будет использоваться в качестве папки snapshot по умолчанию для @working_directory.
На издателе выполните sp_replicationdboption (Transact-SQL). Укажите публикуемую базу данных для @dbname, тип репликации для @optname и значение
true
для @value.
Настройка публикации с помощью удаленного распространителя
Выполните sp_get_distributor (Transact-SQL), чтобы определить, настроен ли сервер в качестве распространителя.
Если значение параметра installed в результирующем наборе равно 0, выполните sp_adddistributor (Transact-SQL) на распространитее в базе данных master. Укажите надежный пароль в параметре @password. Этот пароль для учетной записи distributor_admin используется издателем при соединении с распространителем.
Если значение базы данных распространителя, установленного в результирующем наборе, равно 0, выполните sp_adddistributiondb (Transact-SQL) на распространитетеле в базе данных master. Укажите имя базы данных распространителя в параметре @database. При необходимости можно указать максимальный срок хранения транзакции в @max_distretention и срок хранения журнала в @history_retention. Если создается новая база данных, укажите желаемые параметры свойств.
На распространителе выполните sp_adddistpublisher (Transact-SQL), указав общую папку UNC, которая будет использоваться в качестве папки snapshot по умолчанию для @working_directory. Если распространитель будет использовать проверку подлинности SQL Server при подключении к издателю, необходимо также указать значение 0 для @security_mode и учетные данные Microsoft SQL Server для @login и @password.
На издателе в базе данных master выполните sp_adddistributor (Transact-SQL). Укажите надежный пароль из шага 1 в параметре @password. Этот пароль будет использоваться издателем при соединении с распространителем.
На издателе выполните sp_replicationdboption (Transact-SQL). Укажите опубликованную базу данных в параметре @dbname, тип репликации в параметре @optnameи значение true в параметре @value.
Пример (Transact-SQL)
В следующих разделах описывается программная настройка публикации и распространения. В этом примере имя сервера, настраиваемого в качестве издателя и локального распространителя, указывается с помощью переменных скрипта. Публикацию и распространение репликации можно настроить программно с помощью хранимых процедур репликации.
-- 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'AdventureWorks2012';
-- 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 AdventureWorks2012 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
При помощи объектов RMO
Настройка публикации и распространения на одиночном сервере
Создайте соединение с сервером с помощью класса ServerConnection .
Создайте экземпляр класса ReplicationServer. Передайте объект ServerConnection , созданный на шаге 1.
Создайте экземпляр класса DistributionDatabase.
Задайте для свойства Name имя базы данных, а для свойства ConnectionContext — значение ServerConnection из шага 1.
Установите распространитель, вызвав метод InstallDistributor . Передайте объект DistributionDatabase , созданный на шаге 3.
Создайте экземпляр класса DistributionPublisher.
Установите следующие свойства DistributionPublisher.
Name — имя издателя.
ConnectionContext — соединение ServerConnection , созданное на шаге 1.
DistributionDatabase — название базы данных, созданной на шаге 5.
WorkingDirectory — общая папка, используемая для доступа к файлам моментальных снимков.
PublisherSecurity — режим безопасности при соединении с издателем. РекомендуетсяWindowsAuthentication .
Вызовите метод Create .
Настройка публикации и распространения с использованием удаленного распространителя
Создайте соединение с удаленным распространителем с помощью класса ServerConnection .
Создайте экземпляр класса ReplicationServer. Передайте объект ServerConnection , созданный на шаге 1.
Создайте экземпляр класса DistributionDatabase.
Задайте для свойства Name имя базы данных, а для свойства ConnectionContext — значение ServerConnection из шага 1.
Установите распространитель, вызвав метод InstallDistributor . Укажите безопасный пароль (используемый издателем для соединения с удаленным распространителем) и объект DistributionDatabase из шага 3. Дополнительные сведения см. в разделе Организация безопасности распространителя.
Важно!
По возможности предлагайте пользователям вводить учетные данные системы безопасности во время выполнения приложения. Если необходимо хранить учетные данные, используйте службы шифрования , предоставляемые платформой Microsoft Windows .NET Framework.
Создайте экземпляр класса DistributionPublisher.
Установите следующие свойства DistributionPublisher.
Name — имя локального издателя.
ConnectionContext — соединение ServerConnection , созданное на шаге 1.
DistributionDatabase — название базы данных, созданной на шаге 5.
WorkingDirectory — общая папка, используемая для доступа к файлам моментальных снимков.
PublisherSecurity — режим безопасности при соединении с издателем. РекомендуетсяWindowsAuthentication .
Вызовите метод Create .
Создайте соединение с локальным издателем с помощью класса ServerConnection .
Создайте экземпляр класса ReplicationServer. Передайте объект ServerConnection , созданный на шаге 9.
Вызовите метод InstallDistributor . Передайте имя удаленного распространителя и пароль для удаленного распространителя, указанный в шаге 5.
Важно!
По возможности предлагайте пользователям вводить учетные данные системы безопасности во время выполнения приложения. Если необходимо хранить учетные данные, используйте службы шифрования , предоставляемые платформой Windows .NET Framework.
Пример (объекты RMO)
Публикацию и распространение репликации можно настраивать программно, с помощью объектов RMO.
// Set the server and database names
string distributionDbName = "distribution";
string publisherName = publisherInstance;
string publicationDbName = "AdventureWorks2012";
DistributionDatabase distributionDb;
ReplicationServer distributor;
DistributionPublisher publisher;
ReplicationDatabase publicationDb;
// Create a connection to the server using Windows Authentication.
ServerConnection conn = new ServerConnection(publisherName);
try
{
// Connect to the server acting as the Distributor
// and local Publisher.
conn.Connect();
// Define the distribution database at the Distributor,
// but do not create it now.
distributionDb = new DistributionDatabase(distributionDbName, conn);
distributionDb.MaxDistributionRetention = 96;
distributionDb.HistoryRetention = 120;
// Set the Distributor properties and install the Distributor.
// This also creates the specified distribution database.
distributor = new ReplicationServer(conn);
distributor.InstallDistributor((string)null, distributionDb);
// Set the Publisher properties and install the Publisher.
publisher = new DistributionPublisher(publisherName, conn);
publisher.DistributionDatabase = distributionDb.Name;
publisher.WorkingDirectory = @"\\" + publisherName + @"\repldata";
publisher.PublisherSecurity.WindowsAuthentication = true;
publisher.Create();
// Enable AdventureWorks2012 as a publication database.
publicationDb = new ReplicationDatabase(publicationDbName, conn);
publicationDb.EnabledTransPublishing = true;
publicationDb.EnabledMergePublishing = true;
}
catch (Exception ex)
{
// Implement appropriate error handling here.
throw new ApplicationException("An error occured when installing distribution and publishing.", ex);
}
finally
{
conn.Disconnect();
}
' Set the server and database names
Dim distributionDbName As String = "distribution"
Dim publisherName As String = publisherInstance
Dim publicationDbName As String = "AdventureWorks2012"
Dim distributionDb As DistributionDatabase
Dim distributor As ReplicationServer
Dim publisher As DistributionPublisher
Dim publicationDb As ReplicationDatabase
' Create a connection to the server using Windows Authentication.
Dim conn As ServerConnection = New ServerConnection(publisherName)
Try
' Connect to the server acting as the Distributor
' and local Publisher.
conn.Connect()
' Define the distribution database at the Distributor,
' but do not create it now.
distributionDb = New DistributionDatabase(distributionDbName, conn)
distributionDb.MaxDistributionRetention = 96
distributionDb.HistoryRetention = 120
' Set the Distributor properties and install the Distributor.
' This also creates the specified distribution database.
distributor = New ReplicationServer(conn)
distributor.InstallDistributor((CType(Nothing, String)), distributionDb)
' Set the Publisher properties and install the Publisher.
publisher = New DistributionPublisher(publisherName, conn)
publisher.DistributionDatabase = distributionDb.Name
publisher.WorkingDirectory = "\\" + publisherName + "\repldata"
publisher.PublisherSecurity.WindowsAuthentication = True
publisher.Create()
' Enable AdventureWorks2012 as a publication database.
publicationDb = New ReplicationDatabase(publicationDbName, conn)
publicationDb.EnabledTransPublishing = True
publicationDb.EnabledMergePublishing = True
Catch ex As Exception
' Implement appropriate error handling here.
Throw New ApplicationException("An error occured when installing distribution and publishing.", ex)
Finally
conn.Disconnect()
End Try
См. также:
Просмотр и изменение свойств издателя и распространителя
Replication System Stored Procedures Concepts
Настройка распространения
Основные понятия объектов RMO
Настройка репликации для групп доступности AlwaysOn (SQL Server)