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


Настройка публикации и распространения

В этом разделе описывается настройка публикации и распространения в SQL Server 2014 с помощью SQL Server Management Studio, Transact-SQL или объектов RMO.

Перед началом

Безопасность

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

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

Настройте распространение с помощью мастера создания публикаций или мастера настройки распространителя. После настройки распространителя просмотрите и измените свойства в диалоговом окне Свойства распространителя — <распространитель> . Используйте мастер настройки распространителя, если требуется настроить распространитель так, чтобы члены предопределенных ролей базы данных db_owner могли создавать публикации, или если требуется настроить удаленный распространитель, который не является издателем.

Настройка распространения

  1. В среде Microsoft SQL Server Management Studio подключитесь к серверу, который будет выступать в роли распространителя (в большинстве случаев издатель и распространитель являются одним сервером), и разверните узел сервера.

  2. Щелкните правой кнопкой мыши папку Репликация , затем щелкните Настройка распространения.

  3. Выполняйте инструкции мастера настройки распространителя:

    • Выберите распространитель. Чтобы использовать локальный распространитель, выберите "<Имя_>сервера" будет выступать в качестве собственного распространителя; SQL Server создаст базу данных распространителя и журнал. Для использования удаленного распространителя выберите Использовать следующий сервер в качестве распространителя, а затем выберите сервер. Сервер должен быть сконфигурирован в качестве распространителя, а издатель должен быть включен для использования распространителя. Дополнительные сведения см. в разделе Включение удаленного издателя на распространитее (SQL Server Management Studio)).

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

    • Укажите корневую папку моментальных снимков (для локального распространителя). Папка моментальных снимков — это просто каталог, назначенный для совместного использования; агенты, считывающие и записывающие данные в эту папку, должны иметь достаточные разрешения для доступа к ней. Каждый издатель, использующий распространитель, создает папку в корневой папке, каждая публикация создает папки в папке «Издатель», в которой хранятся файлы моментальных снимков. Дополнительные сведения о надлежащей защите папок см. в разделе Организация безопасности папки моментальных снимков.

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

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

    • При необходимости создайте скрипт настроек конфигурации. Дополнительные сведения см. в разделе Scripting Replication.

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

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

Настройка публикации с помощью локального распространителя

  1. Выполните sp_get_distributor (Transact-SQL), чтобы определить, настроен ли сервер в качестве распространителя.

    • Если значение параметра installed в результирующем наборе равно 0, выполните sp_adddistributor (Transact-SQL) на распространитее в базе данных master.

    • Если значение базы данных распространителя, установленного в результирующем наборе, равно 0, выполните sp_adddistributiondb (Transact-SQL) на распространитетеле в базе данных master. Укажите имя базы данных распространителя в параметре @database. При необходимости можно указать максимальный срок хранения транзакции в @max_distretention и срок хранения журнала в @history_retention. Если создается новая база данных, укажите желаемые параметры свойств.

  2. На распространителе, который также является издателем, выполните sp_adddistpublisher (Transact-SQL), указав общую папку UNC, которая будет использоваться в качестве папки snapshot по умолчанию для @working_directory.

  3. На издателе выполните sp_replicationdboption (Transact-SQL). Укажите публикуемую базу данных для @dbname, тип репликации для @optname и значение trueдля @value.

Настройка публикации с помощью удаленного распространителя

  1. Выполните 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. Если создается новая база данных, укажите желаемые параметры свойств.

  2. На распространителе выполните sp_adddistpublisher (Transact-SQL), указав общую папку UNC, которая будет использоваться в качестве папки snapshot по умолчанию для @working_directory. Если распространитель будет использовать проверку подлинности SQL Server при подключении к издателю, необходимо также указать значение 0 для @security_mode и учетные данные Microsoft SQL Server для @login и @password.

  3. На издателе в базе данных master выполните sp_adddistributor (Transact-SQL). Укажите надежный пароль из шага 1 в параметре @password. Этот пароль будет использоваться издателем при соединении с распространителем.

  4. На издателе выполните 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

Настройка публикации и распространения на одиночном сервере

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

  2. Создайте экземпляр класса ReplicationServer. Передайте объект ServerConnection , созданный на шаге 1.

  3. Создайте экземпляр класса DistributionDatabase.

  4. Задайте для свойства Name имя базы данных, а для свойства ConnectionContext — значение ServerConnection из шага 1.

  5. Установите распространитель, вызвав метод InstallDistributor . Передайте объект DistributionDatabase , созданный на шаге 3.

  6. Создайте экземпляр класса DistributionPublisher.

  7. Установите следующие свойства DistributionPublisher.

  8. Вызовите метод Create .

Настройка публикации и распространения с использованием удаленного распространителя

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

  2. Создайте экземпляр класса ReplicationServer. Передайте объект ServerConnection , созданный на шаге 1.

  3. Создайте экземпляр класса DistributionDatabase.

  4. Задайте для свойства Name имя базы данных, а для свойства ConnectionContext — значение ServerConnection из шага 1.

  5. Установите распространитель, вызвав метод InstallDistributor . Укажите безопасный пароль (используемый издателем для соединения с удаленным распространителем) и объект DistributionDatabase из шага 3. Дополнительные сведения см. в разделе Организация безопасности распространителя.

    Важно!

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

  6. Создайте экземпляр класса DistributionPublisher.

  7. Установите следующие свойства DistributionPublisher.

    • Name — имя локального издателя.

    • ConnectionContext — соединение ServerConnection , созданное на шаге 1.

    • DistributionDatabase — название базы данных, созданной на шаге 5.

    • WorkingDirectory — общая папка, используемая для доступа к файлам моментальных снимков.

    • PublisherSecurity — режим безопасности при соединении с издателем. РекомендуетсяWindowsAuthentication .

  8. Вызовите метод Create .

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

  10. Создайте экземпляр класса ReplicationServer. Передайте объект ServerConnection , созданный на шаге 9.

  11. Вызовите метод 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)