Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server Azure SQL Yönetilen Örneği
Bu makale, SQL Server Management Studio, Transact-SQL veya Replication Management Objects (RMO) kullanılarak SQL Server'da yayın oluşturulmasının nasıl yapılacağını açıklar.
Sınırlamalar ve kısıtlamalar
- Yayın ve makale adlarında aşağıdaki karakterlerin hiçbiri yer alamaz:
%,*,[,:"?|]\/'<veya .>Veritabanındaki nesnelerde bu karakterlerden herhangi biri varsa ve onları çoğaltmak istiyorsanız, sihirbazdaki Makaleler sayfasından erişilebilir olan Makale Özellikleri - <Makale> iletişim kutusundaki nesne adından farklı bir makale adı belirtmeniz gerekir.
Security
Mümkün olduğunda, kullanıcılardan çalışma zamanında güvenlik kimlik bilgilerini girmelerini iste. Kimlik bilgilerini depolamanız gerekiyorsa, Microsoft Windows .NET Framework tarafından sağlanan şifreleme hizmetlerini kullanın.
SQL Server Management Studio'yu kullanma
Yeni Yayın Sihirbazı ile yayınlar oluşturun ve makaleleri tanımlayın. Bir yayın oluşturulduktan sonra, Yayın Özellikleri - <Yayın> iletişim kutusunda yayın özelliklerini görüntüleyin ve değiştirin. Oracle veritabanından yayın oluşturma hakkında bilgi için bkz. Bir Oracle Veritabanından Yayın Oluşturma.
Yayın oluşturma ve makaleleri tanımlama
Microsoft SQL Server Management Studio'da Publisher'a bağlanın ve ardından sunucu düğümünü genişletin.
Replikasyon klasörünü genişletin ve ardından Yerel Yayınlar klasörünü sağ tıklayın.
Yeni Yayını seçin.
Yeni Yayın Sihirbazı'ndaki sayfaları takip edin:
Sunucuda dağıtım yapılandırılmadıysa bir Dağıtıcı belirtin. Dağıtımın yapılandırılması hakkında daha fazla bilgi için Yayınlama ve Dağıtımı Konfigüre Et.
Eğer Dağıtım sayfasında Publisher sunucusunun kendi Dağıtıcısı (yerel bir Distributor) olarak hareket edeceğini belirtirseniz ve sunucu Distributor olarak yapılandırılmamışsa, Yeni Yayın Büyücüsü sunucuyu yapılandıracaktır. Dağıtıcı için Snapshot Klasörü sayfasında varsayılan bir snapshot klasörü belirteceksiniz. Snapshot klasörü, sadece paylaşma olarak belirlediğiniz bir dizindir; Bu klasörden okuyan ve yazan ajanların ona erişmek için yeterli izinlere sahip olması gerekir. Klasörü uygun şekilde güvence altına almak hakkında daha fazla bilgi için Anlık Fotoğraf Klasörünü Güvence Altına Alın bkz.
Başka bir sunucunun Dağıtıcı olarak görev yapması gerektiğini belirtirseniz, Publisher'dan Distributor'a yapılan bağlantılar için Yönetici Şifre sayfasına bir şifre girmeniz gerekir. Bu şifre, Publisher uzak Dağıtıcıda etkinleştirildiğinde belirtilen şifreyle eşleşmelidir.
Daha fazla bilgi için bkz. Dağıtımı Yapılandırma.
Bir yayın veritabanı seçin.
Bir yayın türü seçin. Daha fazla bilgi için Çoğaltma Türleri bölümünü inceleyebilirsiniz.
Yayınlanacak veri ve veritabanı nesnelerini belirtin; isteğe bağlı olarak tablo makalelerinden sütunları filtreleyebilir ve makale özelliklerini ayarlayabilir.
Isteğe bağlı olarak tablo makalelerinden satır filtreleyebilirsiniz. Daha fazla bilgi için bkz . Yayımlanan Verileri Filtreleme.
Snapshot Agent zamanlamasını ayarlayın.
Aşağıdaki replikasyon ajanlarının çalıştığı ve bağlantı kurduğu kimlik bilgilerini belirtin:
Tüm yayınlar için Snapshot Agent.
Tüm işlem yayınları için Log Reader Agent.
Aboneliklerin güncellenmesine izin veren işlem amaçlı yayınlar için Queue Reader Agent.
Daha fazla bilgi için Replikasyon Ajanı Güvenlik Modeli ve Replikasyon Güvenliği En İyi Uygulamaları'na bakınız.
İsteğe bağlı olarak yayını komut dosyasıyla oluşturabilirsiniz. Daha fazla bilgi için Scripting Replication bölümüne bakınız.
Yayın için bir isim belirtin.
Transact-SQL kullanma
Yayınlar, çoğaltma depolanan prosedürler kullanılarak programatik olarak oluşturulabilir. Kullanılan saklanan prosedürler, oluşturulan yayın türüne bağlıdır.
Bir anlık görüntü veya işlemsel yayın oluşturun
Publisher'da, yayın veritabanı üzerinde, geçerli veritabanının anlık görüntü veya işlemsel çoğaltma kullanılarak yayımlanmasını etkinleştirmek için sp_replicationdboption (Transact-SQL) komutunu çalıştırın.
İşlemsel bir yayın için, yayın veritabanı için bir Log Reader Agent işi olup olmadığını belirleyin. (Bu adım anlık yayınlar için zorunlu değildir.)
Yayın veritabanı için bir Log Reader Agent işi varsa, 3. adıma geçin.
Yayınlanmış bir veritabanı için Log Reader Agent işi olup olmadığından emin değilseniz, yayın veritabanındaki Publisher sp_helplogreader_agent (Transact-SQL) çalıştırın.
Sonuç kümesi boşsa, bir Log Reader Agent işi oluşturun. Publisher'da sp_addlogreader_agent (Transact-SQL) çalıştırın.
@job_nameve@passwordiçin ajanın çalıştığı Microsoft Windows kimlik bilgilerini belirtin. Ajan, Yayımlayıcı'ya bağlanırken SQL Server Kimlik Doğrulaması'nı kullanacaksa,0için de@publisher_security_modedeğerini ve@publisher_loginile@publisher_passwordiçin SQL Server oturum açma bilgilerini belirtmeniz gerekir. 3\. adıma geçin.
Yayımcıda sp_addpublication (Transact-SQL) çalıştırın.
@publicationiçin bir yayın adı belirtin ve@repl_freqparametresi için, anlık görüntü yayınına yönelik olaraksnapshotdeğerini veya işlemsel yayına yönelik olarakcontinuousdeğerini belirtin. Diğer yayın seçeneklerini belirtin. Bu, yayını tanımlar.Note
Yayın adları aşağıdaki karakterleri içeremez:
%,*,],|,:,",?,<,\,/,>veya[.Publisher sırasında sp_addpublication_snapshot (Transact-SQL) uygula. 3. adımda
@publicationiçin kullanılan yayın adını ve Snapshot Agent’ın@snapshot_job_nameve@passwordiçin çalıştığı Windows kimlik bilgilerini belirtin. Eğer aracı, Publisher'a bağlanırken SQL Server Kimlik Doğrulaması'nı kullanacaksa, ayrıca0için@publisher_security_modedeğerini ve@publisher_loginilepublisher_passwordiçin SQL Server oturum açma bilgilerini de belirtmeniz gerekir. Bu, yayın için bir Snapshot Agent görevi oluşturur.Important
Publisher'ı uzak bir Dağıtımcı ile yapılandırırken, job_login ve job_password dahil olmak üzere tüm parametreler için sağlanan değerler Dağıtımcıya düz metin olarak gönderilir. Bu saklı yordamı yürütmeden önce Yayımcı ile uzak Dağıtımcı arasındaki bağlantıyı şifrelemeniz gerekir. Daha fazla bilgi için bkz. Veritabanı Altyapısına Şifreli Bağlantıları Etkinleştirme (SQL Server Yapılandırma Yöneticisi).
Yayına makale ekleyin. Daha fazla bilgi için bkz. Makale Tanımlama.
Bu yayının ilk anlık görüntüsünü oluşturmak için Snapshot Agent işini başlatın. Daha fazla bilgi için bkz. İlk Anlık Görüntünün Oluşturulması ve Uygulanması.
Bir birleştirme yayını oluşturun
Publisher’da, geçerli veritabanının birleştirme çoğaltması kullanılarak yayımlanmasını etkinleştirmek için sp_replicationdboption (Transact-SQL) komutunu çalıştırın.
Publisher üzerinde, yayın veritabanında sp_addmergepublication (Transact-SQL) komutunu çalıştırın.
@publicationiçin yayına bir ad ve diğer yayın seçeneklerini belirtin. Bu, yayını tanımlar.Note
Yayın adları aşağıdaki karakterleri içeremez:
%,*,],|,:,",?,<,\,/,>veya[.Publisher sırasında sp_addpublication_snapshot (Transact-SQL) uygula. Adım 2'de
@publicationiçin kullanılan yayın adını ve@snapshot_job_nameile@passwordiçin Snapshot Agent'ın altında çalıştığı Windows kimlik bilgilerini belirtin. Eğer aracı, Publisher'a bağlanırken SQL Server Kimlik Doğrulaması'nı kullanacaksa, ayrıca0için@publisher_security_modedeğerini ve@publisher_loginile@publisher_passwordiçin SQL Server oturum açma bilgilerini de belirtmeniz gerekir. Bu, yayın için bir Snapshot Agent görevi oluşturur.Important
Publisher'ı uzak bir Dağıtımcı ile yapılandırırken, job_login ve job_password dahil olmak üzere tüm parametreler için sağlanan değerler Dağıtımcıya düz metin olarak gönderilir. Bu saklı yordamı yürütmeden önce Yayımcı ile uzak Dağıtımcı arasındaki bağlantıyı şifrelemeniz gerekir. Daha fazla bilgi için bkz. Veritabanı Altyapısına Şifreli Bağlantıları Etkinleştirme (SQL Server Yapılandırma Yöneticisi).
Yayına makale ekleyin. Daha fazla bilgi için bkz. Makale Tanımlama.
Bu yayının ilk anlık görüntüsünü oluşturmak için Snapshot Agent işini başlatın. Daha fazla bilgi için bkz. İlk Anlık Görüntünün Oluşturulması ve Uygulanması.
Örnek (Transact-SQL)
Bu örnek işlemsel bir yayın oluşturur. Scripting değişkenleri, Snapshot Agent ve Log Reader Agent için iş oluşturmak için gereken Windows kimlik bilgilerini geçirmek için kullanılır.
-- 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
Bu örnek bir birleşme yayını oluşturur. Scripting değişkenleri, Snapshot Agent için işi oluşturmak için gereken Windows kimlik bilgilerini aktarmak için kullanılır.
-- 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'AdventureWorks2022';
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 [AdventureWorks2022]
EXEC sp_addmergepublication
-- These parameters are optional.
@publication = @publication,
-- optional parameters
@description = N'Merge publication of AdventureWorks2022.',
@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
Replikasyon Yönetim Nesneleri (RMO) Kullanın
Replikasyon Yönetim Nesneleri (RMO) kullanarak programatik olarak yayınlar oluşturabilirsiniz. Bir yayın oluşturmak için kullandığınız RMO sınıfları, oluşturduğunuz yayın türüne bağlıdır.
Bir anlık görüntü veya işlemsel yayın oluşturun
sınıfını kullanarak ServerConnection Publisher'a bir bağlantı oluşturun.
Yayın veritabanı için ReplicationDatabase sınıfının bir örneğini oluşturun, ConnectionContext özelliğini 1. adımdaki ServerConnection örneğine ayarlayın ve LoadProperties metodunu çağırın. Eğer LoadProperties dönerse
false, veritabanının var olup olmadığını doğrulayın.Eğer EnabledTransPublishing özelliği
falseise, onutrueolarak ayarlayın.İşlemsel bir yayın için, LogReaderAgentExists özelliğinin değerini kontrol edin. Bu özellik
trueise, bu veritabanı için zaten bir Log Read Agent görevi vardır. Eğer bu özellik isefalse, aşağıdakileri yapın:Login öğesinin Password ve LogReaderAgentProcessSecurity alanlarını, Log Reader Agent’ın çalıştığı Microsoft Windows hesabının kimlik bilgilerini belirtmek için ayarlayın.
Note
Yayın, LogReaderAgentProcessSecurity sabit sunucu rolünün bir üyesi tarafından oluşturulduğunda ayarının yapılması gerekmez. Bu durumda, aracı SQL Server Agent hesabının kimliğine bürünecektir. Daha fazla bilgi için bkz . Çoğaltma Aracısı Güvenlik Modeli.
(İsteğe Bağlı) Publisher'a bağlanmak için SQL Server Kimlik Doğrulaması kullanırken, LogReaderAgentPublisherSecurity öğesinin SqlStandardLogin ve SqlStandardPassword veya SecureSqlStandardPassword alanlarını ayarlayın.
Veritabanı için Log Reader Agent işini oluşturmak için metodu CreateLogReaderAgent çağırın.
Sınıfın TransPublication bir örneğini oluşturun ve bu nesne için aşağıdaki özellikleri belirleyin:
1. adımdaki ServerConnection, ConnectionContext için.
DatabaseName için yayımlanan veritabanının adı.
Name yayını için bir ad.
A
Type(ki bu tür PublicationType) ya Transactional da Snapshot'den biridir.SnapshotGenerationAgentProcessSecurity öğesinin Login ve Password alanları, Snapshot Agent’ın çalıştığı Windows hesabının kimlik bilgilerini sağlamak için kullanılır. Bu hesap, Snapshot Agent yerel Dağıtıcıya bağlantı kurduğunda ve Windows Kimlik Doğrulaması kullanıldığında herhangi bir uzak bağlantıda da kullanılır.
Note
Yayın, SnapshotGenerationAgentProcessSecurity sabit sunucu rolünün bir üyesi tarafından oluşturulduğunda ayarının yapılması gerekmez. Bu durumda, aracı SQL Server Agent hesabının kimliğine bürünecektir. Daha fazla bilgi için bkz . Çoğaltma Aracısı Güvenlik Modeli.
(İsteğe bağlı) Publisher'a bağlanmak için SQL Server Authentication kullanıldığında SnapshotGenerationAgentPublisherSecurity öğesinin SqlStandardLogin ve SqlStandardPassword veya SecureSqlStandardPassword alanları.
(İsteğe bağlı) Özellik için değerleri ayarlamak için kapsayıcı mantıksal OR operatörünü (
|Visual C# veOrVisual Basic'te) ve münhasır mantıksal OR operatörünü (^Visual C# veXorVisual Basic'te PublicationAttributesAttributes) kullanın.(İsteğe bağlı) Yayımcı, SQL Server dışı bir yayımcı olduğunda PublisherName için yayımcının adı.
Yayını oluşturmak için Create yöntemini çağırın.
Important
Bir Yayımcı uzak bir Dağıtıcı ile yapılandırılırken, SnapshotGenerationAgentProcessSecurity dahil olmak üzere tüm özellikler için sağlanan değerler Dağıtıcıya düz metin olarak gönderilir. Yöntemini çağırmadan Create önce Publisher ile uzak Dağıtımcı arasındaki bağlantıyı şifrelemeniz gerekir. Daha fazla bilgi için bkz. Veritabanı Altyapısına Şifreli Bağlantıları Etkinleştirme (SQL Server Yapılandırma Yöneticisi).
Yayın için Snapshot Agent işini oluşturmak üzere CreateSnapshotAgent yöntemini çağırın.
Bir birleştirme yayını oluşturun
sınıfını kullanarak ServerConnection Publisher'a bir bağlantı oluşturun.
Yayın veritabanı için ReplicationDatabase sınıfının bir örneğini oluşturun, ConnectionContext özelliğini 1. adımdaki ServerConnection örneğine ayarlayın ve LoadProperties metodunu çağırın. Eğer LoadProperties dönerse
false, veritabanının var olup olmadığını doğrulayın.Eğer EnabledMergePublishing Özelliği
falseise, onutrueolarak ayarlayın ve CommitPropertyChanges'ü çağırın.Sınıfın MergePublication bir örneğini oluşturun ve bu nesne için aşağıdaki özellikleri belirleyin:
ConnectionContext için 1. adımdaki ServerConnection.
DatabaseName için yayımlanan veritabanının adı.
Name için yayın adı.
SnapshotGenerationAgentProcessSecurity içindeki Login ve Password alanları, Snapshot Agent'ın çalıştığı Windows hesabının kimlik bilgilerini sağlamak için kullanılır. Bu hesap, Snapshot Agent yerel Dağıtıcıya bağlantı kurduğunda ve Windows Kimlik Doğrulaması kullanıldığında herhangi bir uzak bağlantıda da kullanılır.
Note
ayarının yapılması, yayın SnapshotGenerationAgentProcessSecurity sabit sunucu rolünün bir üyesi tarafından oluşturulduğunda gerekli değildir. Daha fazla bilgi için bkz . Çoğaltma Aracısı Güvenlik Modeli.
(İsteğe bağlı) Özellik için değerleri ayarlamak için kapsayıcı mantıksal OR operatörünü (
|Visual C# veOrVisual Basic'te) ve münhasır mantıksal OR operatörünü (^Visual C# veXorVisual Basic'te PublicationAttributesAttributes) kullanın.
Yayını oluşturmak için Create metodunu çağırın.
Important
Bir Yayımcı uzak bir Dağıtıcı ile yapılandırılırken, SnapshotGenerationAgentProcessSecurity dahil tüm özellikler için sağlanan değerler Dağıtıcıya düz metin olarak gönderilir. Yöntemini çağırmadan Create önce Publisher ile uzak Dağıtımcı arasındaki bağlantıyı şifrelemeniz gerekir. Daha fazla bilgi için bkz. Veritabanı Altyapısına Şifreli Bağlantıları Etkinleştirme (SQL Server Yapılandırma Yöneticisi).
Yayın için Snapshot Agent işini oluşturmak üzere CreateSnapshotAgent yöntemini çağırın.
Örnekler (RMO)
Bu örnek, AdventureWorks veritabanını işlemsel yayımlama için etkinleştirir, bir Log Reader Agent işi tanımlar ve AdvWorksProductTran yayımını oluşturur. Bu yayın için bir makale tanımlanmalıdır. Log Reader Agent işi ile Snapshot Agent işini oluşturmak için gerekli olan Windows hesabı kimlik bilgileri çalışma zamanında iletilir. RMO'yu anlık ve işlemsel makaleleri tanımlamak için nasıl kullanılacağını öğrenmek için Bir Makale Tanımla'ya bakınız.
// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";
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 AdventureWorks2022 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 = "AdventureWorks2022"
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 AdventureWorks2022 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
Bu örnek, AdventureWorks veritabanını birleştirme yayımlaması için etkinleştirir ve AdvWorksSalesOrdersMerge yayımını oluşturur. Bu yayın için makaleler yine de tanımlanmalıdır. Snapshot Agent işini oluşturmak için gereken Windows hesabına ait kimlik bilgileri çalışma zamanında iletilir. Birleştirme makalelerini tanımlamak için RMO’nun nasıl kullanılacağını öğrenmek için Bir Makale Tanımlama bölümüne bakın.
// Set the Publisher, publication database, and publication names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2022";
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 = "AdventureWorks2022"
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