Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описывается создание публикации в SQL Server 2014 с помощью SQL Server Management Studio, Transact-SQL или объектов управления репликацией (RMO).
В этом разделе
Перед началом:
Чтобы создать публикацию и определить статьи, используйте следующее:
Перед началом работы
Ограничения и условия
- Имена публикаций и статей не могут содержать следующие символы: %, * , [ , ] , | , : , " , ? , ' , \ , / , < , >. Если объекты в базе данных включают любой из этих символов и хотите реплицировать их, необходимо указать имя статьи, отличное от имени объекта в диалоговом окне "Свойства статьи " Статья - <статья> ", которое доступно на странице статей в мастере.
Безопасность
По возможности предлагайте пользователям вводить учетные данные системы безопасности во время выполнения приложения. Если необходимо сохранить учетные данные, используйте криптографические службы, предоставляемые microsoft Windows платформа .NET Framework.
Использование среды SQL Server Management Studio
Создайте публикации и определите статьи с помощью мастера создания публикаций. После создания публикации просмотрите и измените свойства публикации в диалоговом окне "Свойства публикации — <публикация> ". Сведения о создании публикации из базы данных Oracle см. в статье "Создание публикации из базы данных Oracle".
Создание публикации и определение статей
Подключитесь к издателю в Microsoft SQL Server Management Studio, а затем разверните узел сервера.
Разверните папку репликации и щелкните правой кнопкой мыши папку "Локальные публикации ".
Нажмите кнопку "Создать публикацию".
Следуйте страницам Мастера создания новых публикаций, чтобы:
Укажите распространителя, если распределение не настроено на сервере. Дополнительные сведения о настройке распространения см. в разделе "Настройка публикации и распространения".
Если на странице Распространитель указано, что сервер издателя будет выступать в качестве собственного распространителя (локального распространителя), и сервер не настроен как распространитель, мастер создания публикаций настроит сервер. Вы укажете папку моментальных снимков по умолчанию для распространителя на странице Папка моментальных снимков. Папка моментального снимка — это просто каталог, который вы назначили общим ресурсом; программы, использующие эту папку, должны иметь достаточные разрешения на доступ к ней для считывания и записи. Дополнительные сведения о безопасности папки см. в разделе "Защита папки моментального снимка".
Если указать, что другой сервер должен выступать в качестве распространителя, необходимо ввести пароль на странице "Административный пароль" для подключений издателя к распространителю. Этот пароль должен совпадать с паролем, указанным при включении издателя на удаленном распределителе.
Дополнительные сведения см. в разделе "Настройка распространения".
Выберите базу данных для публикаций.
Выберите тип публикации. Дополнительные сведения см. в разделе "Типы репликации".
Укажите данные и объекты базы данных для публикации; при необходимости отфильтруйте столбцы из статей таблиц и задайте параметры статьи.
При необходимости фильтруйте строки из статей таблицы. Дополнительные сведения см. в разделе "Фильтр опубликованных данных".
Задайте расписание агента моментальных снимков.
Укажите учетные данные, в которых выполняются следующие агенты репликации и выполняются подключения:
— Агент моментальных снимков для всех публикаций.
— Агент чтения журналов для всех транзакционных публикаций.
— Агент чтения очередей для транзакционных публикаций, которые позволяют обновлять подписки.
Дополнительные сведения см. в разделе " Модель безопасности агента репликации " и рекомендации по обеспечению безопасности репликации.
При желании написать скрипт для публикации. Дополнительные сведения см. в разделе Scripting Replication.
Укажите имя публикации.
Использование Transact-SQL
Публикации можно создавать программным способом с помощью хранимых процедур репликации. Хранимые процедуры, используемые, будут зависеть от типа создаваемой публикации.
Создание моментального снимка или публикации транзакций
На сервере Издатель в базе данных публикации выполните sp_replicationdboption (Transact-SQL), чтобы включить публикацию текущей базы данных через репликацию с помощью моментального снимка или транзакционной репликации.
Для транзакционной публикации определите, существует ли задание агента по чтению журналов для базы данных публикации. (Этот шаг не требуется для публикаций моментальных снимков.)
Если задание агента чтения журнала существует для базы данных для публикации, перейдите к шагу 3.
Если вы не уверены, существует ли задание агента чтения журналов для опубликованной базы данных, выполните sp_helplogreader_agent (Transact-SQL) на сервере-издателе в базе данных публикации.
Если результирующий набор пуст, создайте задание для агента чтения журналов. На издателе выполните sp_addlogreader_agent (Transact-SQL). Укажите учетные данные Microsoft Windows, в которых агент выполняется для @job_name и @password. Если агент будет использовать проверку подлинности SQL Server при подключении к издателю, необходимо также указать значение 0 для @publisher_security_mode и сведения о входе Microsoft SQL Server для @publisher_login и @publisher_password. Перейдите к шагу 3.
На сервере публикации выполните sp_addpublication (Transact-SQL). Укажите имя публикации для @publication, а для параметра @repl_freq укажите значение
snapshotпубликации моментального снимка или значениеcontinuousпубликации транзакций. Укажите другие параметры публикации. Это определяет публикацию.Замечание
Имена публикаций не могут содержать следующие символы:
% * [ ] | : " ? \ / <>
На издателе выполните sp_addpublication_snapshot (Transact-SQL). Укажите имя публикации, используемое на шаге 3 для @publication и учетных данных Windows, в которых агент моментальных снимков выполняется для @snapshot_job_name и @password. Если агент будет использовать проверку подлинности SQL Server при подключении к издателю, необходимо также указать значение 0 для @publisher_security_mode и сведения о входе SQL Server для @publisher_login и @publisher_password. При этом создается задание агента моментальных снимков для публикации.
Это важно
При настройке издателя с удаленным распространителем значения, предоставленные для всех параметров, включая job_login и job_password, отправляются распространителю в виде обычного текста. Перед выполнением этой хранимой процедуры необходимо зашифровать подключение между издателем и его удаленным распространителем. Дополнительные сведения см. в статье Включение шифрования соединений в компоненте Database Engine (диспетчер конфигурации SQL Server).
Добавьте статьи в публикацию. Дополнительные сведения см. в статье определить статью.
Запустите задачу агента создания снимков, чтобы сформировать начальный снимок для этой публикации. Дополнительные сведения см. в разделе Create and Apply the Initial Snapshot.
Создание публикации слиянием
На издателе выполните sp_replicationdboption (Transact-SQL), чтобы включить публикацию текущей базы данных с помощью репликации слиянием.
На издателе в базе данных публикации выполните sp_addmergepublication (Transact-SQL). Укажите имя публикации для @publication и других параметров публикации. Это определяет публикацию.
Замечание
Имена публикаций не могут содержать следующие символы:
% * [ ] | : " ? \ / <>
На издателе выполните sp_addpublication_snapshot (Transact-SQL). Укажите имя публикации, используемое на шаге 2 для @publication и учетных данных Windows, под которыми агент моментальных снимков выполняется для @snapshot_job_name и @password. Если агент будет использовать проверку подлинности SQL Server при подключении к издателю, необходимо также указать значение 0 для @publisher_security_mode и сведения о входе SQL Server для @publisher_login и @publisher_password. При этом создается задание агента моментальных снимков для публикации.
Это важно
При настройке издателя с удаленным распространителем значения, предоставленные для всех параметров, включая job_login и job_password, отправляются распространителю в виде обычного текста. Перед выполнением этой хранимой процедуры необходимо зашифровать подключение между издателем и его удаленным распространителем. Дополнительные сведения см. в статье Включение шифрования соединений в компоненте Database Engine (диспетчер конфигурации SQL Server).
Добавьте статьи в публикацию. Дополнительные сведения см. в статье определить статью.
Запустите задание агента моментальных снимков, чтобы создать начальный моментальный снимок для этой публикации. Дополнительные сведения см. в разделе Create and Apply the Initial Snapshot.
Пример (Transact-SQL)
В этом примере создается транзакционная публикация. Скриптовые переменные используются для передачи данных учетной записи Windows, необходимых для создания заданий Агента снимков и Агента чтения журналов.
-- 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'AdventureWorks';
SET @publication = N'AdvWorksProductTran';
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login);
-- This should be passed at runtime.
SET @password = $(Password);
-- Enable transactional or 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 use of Windows Integrated Authentication (default)
-- when connecting to the Publisher.
@publisher_security_mode = 1;
-- Create a new transactional publication with the required properties.
EXEC sp_addpublication
@publication = @publication,
@status = N'active',
@allow_push = N'true',
@allow_pull = N'true',
@independent_agent = N'true';
-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password,
-- Explicitly specify the use of Windows Integrated Authentication (default)
-- when connecting to the Publisher.
@publisher_security_mode = 1;
GO
В этом примере создается публикация объединения. Переменные скриптов используются для передачи учетных данных Windows, необходимых для создания задания для Агент моментальных снимков.
-- 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".
--Declarations for adding a merge publication
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, using defaults.
USE master
EXEC sp_replicationdboption
@dbname=@publicationDB,
@optname=N'merge publish',
@value = N'true'
-- Create a new merge publication, explicitly setting the defaults.
USE [AdventureWorks2012]
EXEC sp_addmergepublication
-- These parameters are optional.
@publication = @publication,
-- optional parameters
@description = N'Merge publication of AdventureWorks2012.',
@publication_compatibility_level = N'120RTM';
-- Create a new snapshot job for the publication.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password;
GO
Использование объектов управления репликацией (RMO)
Публикации можно создавать программным способом с помощью объектов управления репликацией (RMO). Классы RMO, используемые для создания публикации, зависят от типа создаваемой публикации.
Создание моментального снимка или публикации транзакций
Создайте соединение с издателем с помощью класса ServerConnection .
Создайте экземпляр класса ReplicationDatabase для базы данных публикаций, установите свойство ConnectionContext экземпляру ServerConnection из шага 1 и вызовите метод LoadProperties. Если LoadProperties возвращается
false, убедитесь, что база данных существует.EnabledTransPublishing Если свойство имеет значение
false, задайте для него значениеtrue.Для публикации LogReaderAgentExists транзакций проверьте значение свойства. Если это свойство равно
true, для этой базы данных уже создаётся задание агента чтения журналов. Если это свойство имеет значениеfalse, сделайте следующее:Установите поля Login и Password или SecurePassword* объекта LogReaderAgentProcessSecurity, чтобы предоставить учетные данные для учетной записи Microsoft Windows, под которой выполняется агент чтения журналов.
Замечание
Параметр LogReaderAgentProcessSecurity не требуется при создании публикации членом
sysadminпредопределенных ролей сервера. В этом случае агент будет выполнять работу от имени учетной записи агента SQL Server. Дополнительные сведения см. в статье Replication Agent Security Model.(Необязательно) Установите поля SqlStandardLogin и SqlStandardPassword или SecureSqlStandardPasswordLogReaderAgentPublisherSecurity при использовании проверки подлинности SQL Server для подключения к Издателю.
Вызовите метод CreateLogReaderAgent, чтобы создать задание агента чтения журналов для базы данных.
Создайте экземпляр TransPublication класса и задайте следующие свойства для этого объекта:
Шаг 1: ServerConnection для ConnectionContext.
Имя опубликованной базы данных для DatabaseName.
Имя публикации для Name.
PublicationType, либо Transactional, либо Snapshot.
Password Поля Login для предоставления SnapshotGenerationAgentProcessSecurity учетных данных для учетной записи Windows, в которой выполняется агент моментальных снимков. Эта учетная запись также используется при подключении агента моментальных снимков к локальному распространителю и для любых удаленных подключений при использовании проверки подлинности Windows.
Замечание
Параметр SnapshotGenerationAgentProcessSecurity не требуется, если публикация создается членом фиксированной серверной роли
sysadmin. В этом случае агент будет выполнять работу от имени учетной записи агента SQL Server. Дополнительные сведения см. в статье Replication Agent Security Model.(Необязательно) Поля SqlStandardLogin и SqlStandardPassword или SecureSqlStandardPassword поля SnapshotGenerationAgentPublisherSecurity при использовании проверки подлинности SQL Server для подключения к публикатору.
(Необязательно) Используйте инклюзивный логический оператор OR (
|в Visual C# иOrVisual Basic) и эксклюзивный логический ОПЕРАТОР OR (^в Visual C# иXorVisual Basic), чтобы задать PublicationAttributes значения для Attributes свойства.(Необязательно) Имя издателя для PublisherName, если издатель не является издателем SQL Server.
Вызовите метод Create для создания публикации.
Это важно
При настройке издателя с удаленным распространителем значения, предоставленные для всех свойств, включая SnapshotGenerationAgentProcessSecurity, отправляются распространителю в виде обычного текста. Перед вызовом метода необходимо зашифровать подключение между издателем и его удаленным Create распространителем. Дополнительные сведения см. в статье Включение шифрования соединений в компоненте Database Engine (диспетчер конфигурации SQL Server).
CreateSnapshotAgent Вызовите метод, чтобы создать задание агента моментальных снимков для публикации.
Чтобы создать объединенную публикацию
Создайте соединение с издателем с помощью класса ServerConnection .
Создайте экземпляр ReplicationDatabase класса для базы данных публикации, задайте ConnectionContext для свойства экземпляр ServerConnection из шага 1 и вызовите LoadProperties метод. Убедитесь, что база данных существует, если LoadProperties возвращает
false.Если EnabledMergePublishing свойство имеет значение
false, задайте для него значениеtrueи вызовите CommitPropertyChanges.Создайте экземпляр MergePublication класса и задайте следующие свойства для этого объекта:
Шаг ServerConnection 1 для ConnectionContext.
Имя опубликованной базы данных для DatabaseName.
Название публикации для Name.
Поля Login и Password в SnapshotGenerationAgentProcessSecurity используются для предоставления учетных данных для учетной записи Windows, под которой выполняется Агент моментальных снимков. Эта учетная запись также используется при подключении агента моментальных снимков к локальному распространителю и для любых удаленных подключений при использовании проверки подлинности Windows.
Замечание
Параметр SnapshotGenerationAgentProcessSecurity не требуется при создании публикации членом
sysadminфиксированной роли сервера. Дополнительные сведения см. в статье Replication Agent Security Model.(Необязательно) Используйте инклюзивный логический оператор OR (
|в Visual C# иOrVisual Basic) и эксклюзивный логический ОПЕРАТОР OR (^в Visual C# иXorVisual Basic), чтобы задать PublicationAttributes значения для Attributes свойства.
Вызовите метод Create для создания публикации.
Это важно
При настройке издателя с удаленным распространителем значения, предоставленные для всех свойств, включая SnapshotGenerationAgentProcessSecurity, отправляются распространителю в виде обычного текста. Перед вызовом метода необходимо зашифровать подключение между издателем и его удаленным Create распространителем. Дополнительные сведения см. в статье Включение шифрования соединений в компоненте Database Engine (диспетчер конфигурации SQL Server).
Вызовите метод CreateSnapshotAgent, чтобы создать задание агента моментальных снимков для публикации.
Примеры (RMO)
Этот пример включает базу данных AdventureWorks для публикации транзакций, определяет задание агента чтения журналов и создает публикацию AdvWorksProductTran. Для этой публикации должна быть определена статья. Учетные данные учетной записи Windows, необходимые для создания задания агента чтения журналов, и задание агента моментальных снимков передаются во время выполнения. Сведения об использовании RMO для определения моментальных снимков и статей транзакций см. в статье "Определение статьи".
// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";
string publisherName = publisherInstance;
ReplicationDatabase publicationDb;
TransPublication publication;
// Create a connection to the Publisher using Windows Authentication.
ServerConnection conn;
conn = new ServerConnection(publisherName);
try
{
// Connect to the Publisher.
conn.Connect();
// Enable the AdventureWorks2012 database for transactional publishing.
publicationDb = new ReplicationDatabase(publicationDbName, conn);
// If the database exists and is not already enabled,
// enable it for transactional publishing.
if (publicationDb.LoadProperties())
{
if (!publicationDb.EnabledTransPublishing)
{
publicationDb.EnabledTransPublishing = true;
}
// If the Log Reader Agent does not exist, create it.
if (!publicationDb.LogReaderAgentExists)
{
// Specify the Windows account under which the agent job runs.
// This account will be used for the local connection to the
// Distributor and all agent connections that use Windows Authentication.
publicationDb.LogReaderAgentProcessSecurity.Login = winLogin;
publicationDb.LogReaderAgentProcessSecurity.Password = winPassword;
// Explicitly set authentication mode for the Publisher connection
// to the default value of Windows Authentication.
publicationDb.LogReaderAgentPublisherSecurity.WindowsAuthentication = true;
// Create the Log Reader Agent job.
publicationDb.CreateLogReaderAgent();
}
}
else
{
throw new ApplicationException(String.Format(
"The {0} database does not exist at {1}.",
publicationDb, publisherName));
}
// Set the required properties for the transactional publication.
publication = new TransPublication();
publication.ConnectionContext = conn;
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
// Specify a transactional publication (the default).
publication.Type = PublicationType.Transactional;
// Activate the publication so that we can add subscriptions.
publication.Status = State.Active;
// Enable push and pull subscriptions and independent Distribition Agents.
publication.Attributes |= PublicationAttributes.AllowPull;
publication.Attributes |= PublicationAttributes.AllowPush;
publication.Attributes |= PublicationAttributes.IndependentAgent;
// Specify the Windows account under which the Snapshot Agent job runs.
// This account will be used for the local connection to the
// Distributor and all agent connections that use Windows Authentication.
publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin;
publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword;
// Explicitly set the security mode for the Publisher connection
// Windows Authentication (the default).
publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = true;
if (!publication.IsExistingObject)
{
// Create the transactional publication.
publication.Create();
// Create a Snapshot Agent job for the publication.
publication.CreateSnapshotAgent();
}
else
{
throw new ApplicationException(String.Format(
"The {0} publication already exists.", publicationName));
}
}
catch (Exception ex)
{
// Implement custom application error handling here.
throw new ApplicationException(String.Format(
"The publication {0} could not be created.", 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 publicationDb As ReplicationDatabase
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()
' Enable the AdventureWorks2012 database for transactional publishing.
publicationDb = New ReplicationDatabase(publicationDbName, conn)
' If the database exists and is not already enabled,
' enable it for transactional publishing.
If publicationDb.LoadProperties() Then
If Not publicationDb.EnabledTransPublishing Then
publicationDb.EnabledTransPublishing = True
End If
' If the Log Reader Agent does not exist, create it.
If Not publicationDb.LogReaderAgentExists Then
' Specify the Windows account under which the agent job runs.
' This account will be used for the local connection to the
' Distributor and all agent connections that use Windows Authentication.
publicationDb.LogReaderAgentProcessSecurity.Login = winLogin
publicationDb.LogReaderAgentProcessSecurity.Password = winPassword
' Explicitly set authentication mode for the Publisher connection
' to the default value of Windows Authentication.
publicationDb.LogReaderAgentPublisherSecurity.WindowsAuthentication = True
' Create the Log Reader Agent job.
publicationDb.CreateLogReaderAgent()
End If
Else
Throw New ApplicationException(String.Format( _
"The {0} database does not exist at {1}.", _
publicationDb, publisherName))
End If
' Set the required properties for the transactional publication.
publication = New TransPublication()
publication.ConnectionContext = conn
publication.Name = publicationName
publication.DatabaseName = publicationDbName
' Specify a transactional publication (the default).
publication.Type = PublicationType.Transactional
'Enable push and pull subscriptions and independent Distribition Agents.
publication.Attributes = _
publication.Attributes Or PublicationAttributes.AllowPull
publication.Attributes = _
publication.Attributes Or PublicationAttributes.AllowPush
publication.Attributes = _
publication.Attributes Or PublicationAttributes.IndependentAgent
' Activate the publication so that we can add subscriptions.
publication.Status = State.Active
' Specify the Windows account under which the Snapshot Agent job runs.
' This account will be used for the local connection to the
' Distributor and all agent connections that use Windows Authentication.
publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin
publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword
' Explicitly set the security mode for the Publisher connection
' Windows Authentication (the default).
publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = True
If Not publication.IsExistingObject Then
' Create the transactional publication.
publication.Create()
' Create a Snapshot Agent job for the publication.
publication.CreateSnapshotAgent()
Else
Throw New ApplicationException(String.Format( _
"The {0} publication already exists.", publicationName))
End If
Catch ex As Exception
' Implement custom application error handling here.
Throw New ApplicationException(String.Format( _
"The publication {0} could not be created.", publicationName), ex)
Finally
conn.Disconnect()
End Try
Этот пример включает базу данных AdventureWorks для публикации слиянием и создает публикацию AdvWorksSalesOrdersMerge. Статьи по-прежнему должны быть определены для этой публикации. Учетные данные учетной записи Windows, необходимые для создания задания агента моментальных снимков, передаются во время выполнения. Чтобы узнать, как использовать RMO для определения статей для слияния, см. в статье Определение статьи.
// Set the Publisher, publication database, and publication names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2012";
ReplicationDatabase publicationDb;
MergePublication publication;
// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
try
{
// Connect to the Publisher.
conn.Connect();
// Enable the database for merge publication.
publicationDb = new ReplicationDatabase(publicationDbName, conn);
if (publicationDb.LoadProperties())
{
if (!publicationDb.EnabledMergePublishing)
{
publicationDb.EnabledMergePublishing = true;
}
}
else
{
// Do something here if the database does not exist.
throw new ApplicationException(String.Format(
"The {0} database does not exist on {1}.",
publicationDb, publisherName));
}
// Set the required properties for the merge publication.
publication = new MergePublication();
publication.ConnectionContext = conn;
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
// Enable precomputed partitions.
publication.PartitionGroupsOption = PartitionGroupsOption.True;
// Specify the Windows account under which the Snapshot Agent job runs.
// This account will be used for the local connection to the
// Distributor and all agent connections that use Windows Authentication.
publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin;
publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword;
// Explicitly set the security mode for the Publisher connection
// Windows Authentication (the default).
publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = true;
// Enable Subscribers to request snapshot generation and filtering.
publication.Attributes |= PublicationAttributes.AllowSubscriberInitiatedSnapshot;
publication.Attributes |= PublicationAttributes.DynamicFilters;
// Enable pull and push subscriptions.
publication.Attributes |= PublicationAttributes.AllowPull;
publication.Attributes |= PublicationAttributes.AllowPush;
if (!publication.IsExistingObject)
{
// Create the merge publication.
publication.Create();
// Create a Snapshot Agent job for the publication.
publication.CreateSnapshotAgent();
}
else
{
throw new ApplicationException(String.Format(
"The {0} publication already exists.", publicationName));
}
}
catch (Exception ex)
{
// Implement custom application error handling here.
throw new ApplicationException(String.Format(
"The publication {0} could not be created.", publicationName), ex);
}
finally
{
conn.Disconnect();
}
' Set the Publisher, publication database, and publication names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2012"
Dim publicationDb As ReplicationDatabase
Dim publication As MergePublication
' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
Try
' Connect to the Publisher.
conn.Connect()
' Enable the database for merge publication.
publicationDb = New ReplicationDatabase(publicationDbName, conn)
If publicationDb.LoadProperties() Then
If Not publicationDb.EnabledMergePublishing Then
publicationDb.EnabledMergePublishing = True
End If
Else
' Do something here if the database does not exist.
Throw New ApplicationException(String.Format( _
"The {0} database does not exist on {1}.", _
publicationDb, publisherName))
End If
' Set the required properties for the merge publication.
publication = New MergePublication()
publication.ConnectionContext = conn
publication.Name = publicationName
publication.DatabaseName = publicationDbName
' Enable precomputed partitions.
publication.PartitionGroupsOption = PartitionGroupsOption.True
' Specify the Windows account under which the Snapshot Agent job runs.
' This account will be used for the local connection to the
' Distributor and all agent connections that use Windows Authentication.
publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin
publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword
' Explicitly set the security mode for the Publisher connection
' Windows Authentication (the default).
publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = True
' Enable Subscribers to request snapshot generation and filtering.
publication.Attributes = publication.Attributes Or _
PublicationAttributes.AllowSubscriberInitiatedSnapshot
publication.Attributes = publication.Attributes Or _
PublicationAttributes.DynamicFilters
' Enable pull and push subscriptions
publication.Attributes = publication.Attributes Or _
PublicationAttributes.AllowPull
publication.Attributes = publication.Attributes Or _
PublicationAttributes.AllowPush
If Not publication.IsExistingObject Then
' Create the merge publication.
publication.Create()
' Create a Snapshot Agent job for the publication.
publication.CreateSnapshotAgent()
Else
Throw New ApplicationException(String.Format( _
"The {0} publication already exists.", publicationName))
End If
Catch ex As Exception
' Implement custom application error handling here.
Throw New ApplicationException(String.Format( _
"The publication {0} could not be created.", publicationName), ex)
Finally
conn.Disconnect()
End Try
См. также
Использование sqlcmd с переменными скриптов
Публикация объектов данных и баз данных
Концепции объектов управления репликацией
Определение статьи
Просмотр и изменение свойств публикации
Настройка распространения
Защита распространителя
Защита издателя