В этом разделе описывается настройка публикации и распространения в SQL Server с помощью SQL Server Management Studio, Transact-SQL или объектов управления репликацией (RMO).
Настройте распространение с помощью мастера создания публикаций или мастера настройки распространителя. После настройки распространителя просмотрите и измените свойства в диалоговом окне "Свойства распространителя - <распространитель> ". Используйте мастер настройки распространителя, если необходимо настроить распространитель так, чтобы члены предопределенных ролей базы данных db_owner могли создавать публикации, или если необходимо настроить удаленный распространитель, который не является издателем.
Настройка распространения
В Microsoft SQL Server Management Studio подключитесь к серверу, который будет распространителем (во многих случаях издатель и распространитель являются одинаковым сервером), а затем разверните узел сервера.
Щелкните правой кнопкой мыши папку Репликация , затем щелкните Настройка распространения.
Выполняйте инструкции мастера настройки распространителя:
Выберите распространитель. Чтобы использовать локальный распространитель, выберите имя ServerName, которое будет выступать в качестве своего собственного распространителя. При этом SQL Server создаст базу данных распространения и журнал. Для использования удаленного распространителя выберите Использовать следующий сервер в качестве распространителя, а затем выберите сервер. Сервер должен быть сконфигурирован в качестве распространителя, а издатель должен быть включен для использования распространителя. Дополнительные сведения см. в разделе "Включение удаленного издателя" на распространителе (SQL Server Management Studio).
Если выбран удаленный распространитель, необходимо ввести пароль на странице Административный пароль , который требуется для соединения издателя с распространителем. Пароль должен совпадать с паролем, указанным при включении издателя на удаленном распространителе.
Укажите корневую папку моментальных снимков (для локального распространителя). Папка моментальных снимков — это просто каталог, назначенный для совместного использования; агенты, считывающие и записывающие данные в эту папку, должны иметь достаточные разрешения для доступа к ней. Каждый издатель, использующий распространитель, создает папку в корневой папке, каждая публикация создает папки в папке «Издатель», в которой хранятся файлы моментальных снимков. Дополнительные сведения о надлежащей защите папок см. в разделе Организация безопасности папки моментальных снимков.
Укажите базу данных распространителя (для локального распространителя). В базе данных распространителя хранятся метаданные и данные журнала для всех типов репликации и транзакций, относящихся к репликации транзакций.
При необходимости укажите, что другие издатели могут использовать распространитель. Если другим издателям разрешено использовать распространитель, необходимо ввести пароль на странице Пароль распространителя , который используется для подключения этих издателей к распространителю.
При необходимости создайте скрипт настроек конфигурации. Дополнительные сведения см. в разделе Scripting Replication.
Использование Transact-SQL
Публикацию и распространение репликации можно настроить программно с помощью хранимых процедур репликации.
Настройка публикации с помощью локального распространителя
Если значение installed в результирующем наборе равно 0, выполните sp_adddistributor (Transact-SQL) на распространителю в базе данных master.
Если значение distribution db installed в результирующем наборе равно 0, выполните sp_adddistributiondb (Transact-SQL) на распространителю в базе данных master. Укажите имя базы данных распространителя в параметре @database. При необходимости можно указать максимальный срок хранения транзакции в параметре @max_distretention и срок хранения журнала в параметре @history_retention. Если создается новая база данных, укажите желаемые параметры свойств.
На распространителе, который также является издателем, выполните sp_adddistpublisher (Transact-SQL), указав общую папку UNC, которая будет использоваться в качестве папки моментальных снимков по умолчанию для @working_directory.
Для распространителя в Управляемом экземпляре SQL укажите учетную запись хранения Azure в параметре @working_directory и ключ доступа к хранилищу в параметре @storage_connection_string.
На издателе выполните sp_replicationdboption (Transact-SQL). Укажите опубликованную базу данных в параметре @dbname, тип репликации в параметре @optname и значение true в параметре @value.
Настройка публикации с помощью удаленного распространителя
Если значение installed в результирующем наборе равно 0, выполните sp_adddistributor (Transact-SQL) на распространителю в базе данных master. Укажите надежный пароль в параметре @password. Этот пароль для учетной записи distributor_admin будет использоваться издателем при подключении к распространителю.
Если значение distribution db installed в результирующем наборе равно 0, выполните sp_adddistributiondb (Transact-SQL) на распространителю в базе данных master. Укажите имя базы данных распространителя в параметре @database. При необходимости можно указать максимальный срок хранения транзакции в параметре @max_distretention и срок хранения журнала в параметре @history_retention. Если создается новая база данных, укажите желаемые параметры свойств.
На распространителе выполните sp_adddistpublisher (Transact-SQL), указав общую папку UNC, которая будет использоваться в качестве папки моментальных снимков по умолчанию для @working_directory. Если распространитель будет использовать проверку подлинности SQL Server при подключении к издателю, необходимо также указать значение 0 для @security_mode и сведения о @login@passwordвходе в Microsoft SQL Server.
Для распространителя в Управляемом экземпляре SQL укажите учетную запись хранения Azure в параметре @working_directory и ключ доступа к хранилищу в параметре @storage_connection_string.
На издателе в базе данных 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'AdventureWorks2022';
-- 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 AdventureWorks2022 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 .
По возможности предлагайте пользователям вводить учетные данные системы безопасности во время выполнения приложения. Если необходимо сохранить учетные данные, используйте криптографические службы, предоставляемые microsoft Windows платформа .NET Framework.
Вызовите метод InstallDistributor . Передайте имя удаленного распространителя и пароль для удаленного распространителя, указанный в шаге 5.
Важно!
По возможности предлагайте пользователям вводить учетные данные системы безопасности во время выполнения приложения. Если необходимо хранить учетные данные, используйте службы шифрования , предоставляемые платформой Windows .NET Framework.
Пример (объекты RMO)
Публикацию и распространение репликации можно настраивать программно, с помощью объектов RMO.
// Set the server and database names
string distributionDbName = "distribution";
string publisherName = publisherInstance;
string publicationDbName = "AdventureWorks2022";
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 AdventureWorks2022 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 occurred 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 = "AdventureWorks2022"
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 AdventureWorks2022 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 occurred when installing distribution and publishing.", ex)
Finally
conn.Disconnect()
End Try
Администрирование инфраструктуры базы данных SQL Server для облачных, локальных и гибридных реляционных баз данных с помощью предложений реляционной базы данных Microsoft PaaS.