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 konu, SQL Server Management Studio, Transact-SQL veya Replication Management Objects (RMO) kullanarak SQL Server'da pull aboneliği oluşturmanın nasıl mümkün olduğunu açıklar.
P2P replikasyonu için pull aboneliği kurmak script ile mümkündür, ancak sihirbaz aracılığıyla mümkün değildir.
SQL Server Management Studio'yu kullanma
Yeni Abonelik Sihirbazı'nı kullanarak Yayımcıda veya Abonede bir çekme aboneliği oluşturun. Sihirbazdaki sayfaları takip ederek:
Publisher'ı ve yayını belirtin.
Çoğaltma aracılarının nerede çalışacağını seçin. Bir çekme aboneliği için, yayın türüne bağlı olarak Dağıtım Aracısı Konumu sayfasında veya Birleştirme Aracısı Konumu sayfasında Her aracıyı Abonesinde çalıştır (çekme abonelikleri) seçeneğini belirleyin.
Aboneleri ve abonelik veritabanlarını belirtin.
Çoğaltma aracıları tarafından yapılan bağlantılar için kullanılan oturum açma bilgilerini ve parolaları belirtin:
Anlık görüntü ve işlem yayınları abonelikleri için Dağıtım Aracısı Güvenliği sayfasında kimlik bilgilerini belirtin.
Birleştirme yayını abonelikleri için, Birleştirme Aracısı Güvenliği sayfasında kimlik bilgilerini belirtin.
Her ajanın gerektirdiği izinler hakkında bilgi için Replikasyon Ajanı Güvenlik Modeli'ne bakınız.
Bir eşitleme takvimi ve abonenin başlatılması gerektiği zamanı belirtin.
Yayınları birleştirmek için ek seçenekler belirtin: abonelik türü; parametrizlenmiş filtreleme için değerler; ve yayın Web senkronizasyonu için etkinleştirilmişse HTTPS üzerinden senkronizasyon için bilgiler.
Güncelleştirilebilir aboneliklere izin veren işlemsel yayınlar için ek seçenekleri belirtin: Abonelerin değişiklikleri hemen Yayıncıya işlemesi mi yoksa bunları bir kuyruğa yazması mı gerektiği; Aboneden Yayıncıya bağlanmak için kullanılan kimlik bilgileri.
Aboneliği isteğe bağlı olarak komut dosyasıyla oluşturun.
Publisher'dan bir pull aboneliği oluşturmak için
Microsoft SQL Server Management Studio'da Publisher'a bağlanın ve ardından sunucu düğümünü genişletin.
Çoğaltma klasörünü genişletin ve ardından Yerel Yayınlar klasörünü genişletin.
Bir veya daha fazla abonelik oluşturmak istediğiniz yayına sağ tıklayın ve ardından Yeni Abonelikler'e tıklayın.
Yeni Abonelik Sihirbazı'ndaki sayfaları tamamlayın.
Aboneden bir çekme aboneliği oluşturmak için
SQL Server Management Studio'da Aboneye bağlanın ve ardından sunucu düğümünü genişletin.
Çoğaltma klasörünü genişletin.
Yerel Abonelikler klasörüne sağ tıklayın ve ardından Yeni Abonelikler'e tıklayın.
Yeni Abonelik Sihirbazı'nın Yayın sayfasında, <Publisher açılır menüden Find SQL Server Publisher> veya <Find Oracle Publisher'i> seçin.
Sunucuya Bağlan iletişim kutusunda Publisher'a bağlanın.
Yayın sayfasında bir yayın seçin.
Yeni Abonelik Sihirbazı'ndaki sayfaları tamamlayın.
Transact-SQL Kullanımı
Pull abonelikleri, replikasyon depolanan prosedürler kullanılarak programatik olarak oluşturulabilir. Aboneliğin bağlı olduğu yayın türüne göre kullanılan saklı yordamlar değişiklik gösterebilir.
Bir anlık görüntü veya işlem yayınına pull aboneliği oluşturmak için
Yayımcıda, yayının çekme aboneliklerini desteklediğini sp_helppublication (Transact-SQL) komutunu çalıştırarak doğrulayın.
Sonuç kümesinde allow_pull değeri 1 ise, yayın pull abonelikleri destekler.
Eğer allow_pull'nin değeri 0 ise, sp_changepublication (Transact-SQL) uygulan; @propertyiçin allow_pull, @valueiçin doğru belirtin.
Abone Noktasında sp_addpullsubscription (Transact-SQL) uygulan. @publisher ve @publication belirtin. Aboneliklerin güncellenmesiyle ilgili bilgi için bkz. Bir İşlemsel Yayına Güncellenebilir Abonelik Oluştur.
Abone Noktasında sp_addpullsubscription_agent (Transact-SQL) çalıştırın. Aşağıdakileri belirtin:
@publisher, @publisher_db ve @publication parametreleri.
Abonede çalışan Dağıtım Aracısı için @job_login ve @job_password kapsamında kullanılan Microsoft Windows kimlik bilgileri.
Note
Entegre Kimlik Doğrulama Windows ile yapılan bağlantılar her zaman @job_login ve @job_password tarafından belirtilen Windows kimlik bilgilerini kullanır. Dağıtım Aracısı her zaman Windows Tümleşik Kimlik Doğrulaması kullanarak aboneye yerel bağlantı kurar. Varsayılan olarak, ajan Windows Entegre Kimlik Doğrulaması kullanarak Dağıtıcıya bağlanır.
(İsteğe bağlı) Dağıtıcıya bağlanırken SQL Server Kimlik Doğrulaması kullanmanız gerekiyorsa, 0 değeri @distributor_security_mode için ve SQL Server oturum açma bilgileri @distributor_login ile @distributor_password için.
Bu abonelik için Dağıtım Aracısı işi zamanlaması. Daha fazla bilgi için bkz. Eşitleme Zamanlamalarını Belirtme.
Yayımcıda, çekme aboneliğini kaydetmek için sp_addsubscription (Transact-SQL) komutunu çalıştırın. @publication, @subscriber ve @destination_db belirtin. @subscription_type için pull değeri belirtin.
Bir birleştirme yayınına pull aboneliği oluşturmak için
Publisher'da, sp_helpmergepublication (Transact-SQL) komutunu çalıştırarak yayının çekme aboneliklerini desteklediğini doğrulayın.
Sonuç kümesinde allow_pull değeri 1 ise, yayın pull abonelikleri destekler.
allow_pull değeri 0 ise, sp_changemergepublication (Transact-SQL) komutunu yürütün; @property için allow_pull ve @value için true belirtin.
Abone Noktasında sp_addmergepullsubscription (Transact-SQL) uygulan. @publisher, @publisher_db, @publication ve aşağıdaki parametreleri belirtin:
@subscriber_type - istemci aboneliği için yerel , sunucu aboneliği için global belirt.
@subscription_priority - Abonelik için öncelik belirtin (0.00 ile 99.99). Bu sadece sunucu aboneliği için gereklidir.
Daha fazla bilgi için bkz. Gelişmiş Birleştirme Çoğaltma Çakışması Algılama ve Çözümleme.
Abone Noktasında sp_addmergepullsubscription_agent (Transact-SQL) uygula. Aşağıdaki parametreleri belirtin:
@publisher, @publisher_db ve @publication.
Abonede Merge Agent’ın çalıştığı Windows kimlik bilgileri; @job_login ve @job_password için kullanılır.
Note
Entegre Kimlik Doğrulama Windows ile yapılan bağlantılar her zaman @job_login ve @job_password tarafından belirtilen Windows kimlik bilgilerini kullanır. Merge Agent, Windows Entegre Kimlik Doğrulaması kullanarak her zaman Aboneye yerel bağlantı sağlar. Varsayılan olarak, ajan Windows Entegre Kimlik Doğrulaması kullanarak Dağıtımcı ve Publisher'a bağlanır.
(İsteğe bağlı) Dağıtıcıya bağlanırken SQL Server Kimlik Doğrulaması kullanmanız gerekiyorsa, @distributor_security_mode için 0 değeri ve @distributor_login ile @distributor_password için SQL Server oturum açma bilgileri.
(İsteğe bağlı) Yayımcı’ya bağlanırken SQL Server Kimlik Doğrulaması kullanmanız gerekiyorsa, @publisher_security_mode için 0 değeri ve @publisher_login ile @publisher_password için SQL Server oturum açma bilgileri.
Bu abonelik için Birleştirme Aracısı görevi için bir zamanlama. Daha fazla bilgi için, İşlemsel Bir Yayına Güncellenebilir Abonelik Oluşturma bölümüne bakın.
Yayımcıda sp_addmergesubscription (Transact-SQL) yürütün. @publication, @subscriber, @subscriber_db ve @subscription_type için pull değerini belirtin. Bu, pull aboneliğini kaydeder.
Örnekler (Transact-SQL)
Aşağıdaki örnek, işlemsel bir yayına pull aboneliği oluşturur. İlk parti Abone tarafında, ikinci parti ise Publisher'da yürütülür. Oturum açma ve parola değerleri sqlcmd betik değişkenleri kullanılarak çalışma zamanında sağlanır.
-- 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".
-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks';
-- At the subscription database, create a pull subscription
-- to a transactional publication.
USE [AdventureWorksReplica]
EXEC sp_addpullsubscription
@publisher = @publisher,
@publication = @publication,
@publisher_db = @publicationDB;
-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent
@publisher = @publisher,
@publisher_db = @publicationDB,
@publication = @publication,
@distributor = @publisher,
@job_login = $(Login),
@job_password = $(Password);
GO
-- 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".
-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';
-- At the Publisher, register the subscription, using the defaults.
EXEC sp_addsubscription
@publication = @publication,
@subscriber = @subscriber,
@destination_db = @subscriptionDB,
@subscription_type = N'pull',
@status = N'subscribed';
GO
Aşağıdaki örnek, bir birleştirme yayınına pull aboneliği oluşturur. İlk parti Abone tarafında, ikinci parti ise Publisher'da yürütülür. Giriş ve şifre değerleri, sqlcmd script değişkenleri kullanılarak çalışma zamanında sağlanır.
-- 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".
-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks';
SET @hostname = N'adventure-works\david8';
-- At the subscription database, create a pull subscription
-- to a merge publication.
USE [AdventureWorksReplica]
EXEC sp_addmergepullsubscription
@publisher = @publisher,
@publication = @publication,
@publisher_db = @publicationDB;
-- Add an agent job to synchronize the pull subscription.
EXEC sp_addmergepullsubscription_agent
@publisher = @publisher,
@publisher_db = @publicationDB,
@publication = @publication,
@distributor = @publisher,
@job_login = $(Login),
@job_password = $(Password),
@hostname = @hostname;
GO
-- Execute this batch at the Publisher.
DECLARE @myMergePub AS sysname;
DECLARE @mySub AS sysname;
DECLARE @mySubDB AS sysname;
SET @myMergePub = N'AdvWorksSalesOrdersMerge';
SET @mySub = N'MYSUBSERVER';
SET @mySubDB = N'AdventureWorksReplica';
-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks]
EXEC sp_addmergesubscription @publication = @myMergePub,
@subscriber = @mySub, @subscriber_db = @mySubDB,
@subscription_type = N'pull';
GO
Çoğaltma Yönetimi Nesnelerini (RMO) Kullanma
Pull abonelik oluşturmak için kullanılan RMO sınıfları, aboneliğin ait olduğu yayın türüne bağlıdır.
Bir anlık görüntü veya işlem yayınına pull aboneliği oluşturmak için
Sınıfını kullanarak hem Aboneye hem de Yayımcıya ServerConnection bağlantılar oluşturun.
1. adımdaki TransPublication Publisher bağlantısını kullanarak sınıfının bir örneğini oluşturun. Name, DatabaseName ve ConnectionContext belirtin.
yöntemini çağırın LoadProperties . Bu yöntem false döndürürse, 2. adımda belirtilen özellikler yanlıştır veya yayın sunucuda mevcut değildir.
özelliği ile arasında bir bit düzeyinde mantıksal VE (Visual C#’ta Attributes ve Visual Basic’te Ve) işlemi gerçekleştirin AllowPull. Sonuç None ise, Attributes'i, | ve arasında Visual C# dilinde Attributes ve Visual Basic dilinde AllowPull olan bit düzeyinde mantıksal OR sonucuna ayarlayın. Ardından, çekme aboneliklerini etkinleştirmek için CommitPropertyChanges öğesini çağırın.
Abonelik veritabanı yoksa sınıfını Database kullanarak oluşturun. Daha fazla bilgi için Veritabanları Oluşturma, Değiştirme ve Kaldırma bölümlerine bakınız.
TransPullSubscription sınıfının bir örneğini oluşturun.
Aşağıdaki abonelik özelliklerini ayarlayın:
ConnectionContext için 1. adımda oluşturulan Aboneye ait ServerConnection
için DatabaseNameabonelik veritabanının adı.
PublisherName için yayımcının adı.
için PublicationDBNameyayın veritabanının adı.
için PublicationNameyayının adı.
Abonede Distribution Agent'ın çalıştığı Microsoft Windows hesabının kimlik bilgilerini sağlamak üzere SynchronizationAgentProcessSecurity öğesinin Login ve Password alanları. Bu hesap, aboneye yerel bağlantılar kurmak ve Windows Kimlik Doğrulaması kullanarak uzaktan bağlantılar kurmak için kullanılır.
Note
Abonelik, sysadmin sabit sunucu rolünün bir üyesi tarafından oluşturulduğunda SynchronizationAgentProcessSecurity ayarının yapılması gerekli değildir, ancak önerilir. 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ı) Aboneliği eşitlemek için kullanılan bir ajan işi oluşturmak üzere CreateSyncAgentByDefault için true değeri. false değerini belirtirseniz (varsayılan değer budur), abonelik yalnızca program aracılığıyla eşitlenebilir ve bu nesneye SynchronizationAgent özelliğinden eriştiğinizde TransSynchronizationAgent için ek özellikler belirtmeniz gerekir. Daha fazla bilgi için bkz. Çek Aboneliğini Senkronize Etme.
Note
SQL Server Agent, SQL Server'ın her sürümünde mevcut değildir. Express Aboneleri için true değeri belirlediğinizde, ajan işi oluşturulmaz. Ancak, önemli abonelikle ilgili meta veriler Abonede saklanır. SQL Server'daki sürümler tarafından desteklenen özelliklerin listesi için bkz. SQL Server 2025'in Sürümleri ve desteklenen özellikleri.
(İsteğe bağlı) Dağıtıcıya bağlanmak için SQL Server Kimlik Doğrulaması kullanırken DistributorSecurity öğesinin SqlStandardLogin ve SqlStandardPassword veya SecureSqlStandardPassword alanlarını ayarlayın.
yöntemini çağırın Create .
2. adımdaki TransPublication sınıfının örneğini kullanarak, çekme aboneliğini Yayıncıya kaydetmek için MakePullSubscriptionWellKnown metodunu çağırın. Eğer bu kayıt zaten varsa, bir istisna vardır.
Bir birleştirme yayınına pull aboneliği oluşturmak için
Sınıfı kullanarak ServerConnection hem Abone hem de Publisher ile bağlantılar oluşturun.
1. adımdaki MergePublication Publisher bağlantısını kullanarak sınıfının bir örneğini oluşturun. Name, DatabaseName ve ConnectionContext belirtin.
yöntemini çağırın LoadProperties . Bu yöntem false döndürürse, 2. adımda belirtilen özellikler yanlıştır veya yayın sunucuda mevcut değildir.
özelliği ile arasında bir bit düzeyinde mantıksal VE (Visual C#’ta Attributes ve Visual Basic’te Ve) işlemi gerçekleştirin AllowPull. Sonuç None ise, Attributes'i, | ve arasında Visual C# dilinde Attributes ve Visual Basic dilinde AllowPull olan bit düzeyinde mantıksal OR sonucuna ayarlayın. Ardından, çekme aboneliklerini etkinleştirmek için CommitPropertyChanges öğesini çağırın.
Abonelik veritabanı yoksa sınıfını Database kullanarak oluşturun. Daha fazla bilgi için Veritabanları Oluşturma, Değiştirme ve Kaldırma bölümlerine bakınız.
MergePullSubscription sınıfının bir örneğini oluşturun.
Aşağıdaki abonelik özelliklerini ayarlayın:
ConnectionContext için 1. adımda oluşturulan Aboneye ServerConnection.
için DatabaseNameabonelik veritabanının adı.
PublisherName için yayıncının adı.
için PublicationDBNameyayın veritabanının adı.
için PublicationNameyayının adı.
Abone'de Birleştirme Aracısı'nın çalıştığı Microsoft Windows hesabının kimlik bilgilerini sağlamak için SynchronizationAgentProcessSecurity öğesinin Login ve Password alanları kullanılır. Bu hesap, aboneye yerel bağlantılar kurmak ve Windows Kimlik Doğrulaması kullanarak uzaktan bağlantılar kurmak için kullanılır.
Note
SynchronizationAgentProcessSecurity ayarı, abonelik sysadmin sabit sunucu rolünün bir üyesi tarafından oluşturulduğunda gerekli değildir; ancak yine de önerilir. 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ı) Aboneliği eşitlemek için kullanılan bir aracı işi oluşturmak üzere CreateSyncAgentByDefault için true değeri. false değerini belirtirseniz (varsayılan), abonelik yalnızca program aracılığıyla eşitlenebilir ve bu nesneye SynchronizationAgent özelliğinden eriştiğinizde MergeSynchronizationAgent için ek özellikler belirtmeniz gerekir. Daha fazla bilgi için bkz. Çek Aboneliğini Senkronize Etme.
(İsteğe bağlı) Dağıtıcıya bağlanmak için SQL Server Kimlik Doğrulaması kullanırken DistributorSecurity öğesinin SqlStandardLogin ve SqlStandardPassword veya SecureSqlStandardPassword alanlarını ayarlayın.
(İsteğe Bağlı) Publisher'a bağlanmak için SQL Server Kimlik Doğrulaması kullanırken, PublisherSecurity öğesinin SqlStandardLogin ve SqlStandardPassword veya SecureSqlStandardPassword alanlarını ayarlayın.
yöntemini çağırın Create .
2. adımdaki MergePublication sınıfı örneğini kullanarak, çekme aboneliğini Publisher'a kaydetmek için MakePullSubscriptionWellKnown metodunu çağırın. Eğer bu kayıt zaten varsa, bir istisna vardır.
Örnek (RMO)
Bu örnek, işlemsel bir yayına pull aboneliği oluşturur. Distribution Agent görevinin oluşturulmasında kullanılan Microsoft Windows hesabı kimlik bilgileri çalışma sırasında iletilir.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksProductTran";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
TransPublication publication;
TransPullSubscription subscription;
try
{
// Connect to the Publisher and Subscriber.
subscriberConn.Connect();
publisherConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions.
publication = new TransPublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.IsExistingObject)
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
// Define the pull subscription.
subscription = new TransPullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
// Specify the Windows login credentials for the Distribution Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = true;
// By default, subscriptions to transactional publications are synchronized
// continuously, but in this case we only want to synchronize on demand.
subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (TransSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName)
{
registered = true;
}
}
if (!registered)
{
// Register the subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
TransSubscriberType.ReadOnly);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksProductTran"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As TransPublication
Dim subscription As TransPullSubscription
Try
' Connect to the Publisher and Subscriber.
subscriberConn.Connect()
publisherConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions.
publication = New TransPublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.IsExistingObject Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
' Define the pull subscription.
subscription = New TransPullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
subscription.Description = "Pull subscription to " + publicationDbName _
+ " on " + subscriberName + "."
' Specify the Windows login credentials for the Distribution Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = True
' By default, subscriptions to transactional publications are synchronized
' continuously, but in this case we only want to synchronize on demand.
subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As TransSubscription In publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName And _
existing.SubscriptionDBName = subscriptionDbName Then
registered = True
End If
Next existing
If Not registered Then
' Register the subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
TransSubscriberType.ReadOnly)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
Bu örnek, bir birleşme yayınına pull aboneliği oluşturur. Merge Agent görevini oluşturmak için kullanılan Windows hesabı kimlik bilgileri çalışma zamanında iletilir.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";
string hostname = @"adventure-works\garrett1";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.LoadProperties())
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
subscription.HostName = hostname;
// Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = true;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (MergeSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName
&& existing.SubscriptionType == SubscriptionOption.Pull)
{
registered = true;
}
}
if (!registered)
{
// Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
MergeSubscriberType.Local, 0);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"
Dim hostname As String = "adventure-works\garrett1"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.LoadProperties() Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
subscription.HostName = hostname
' Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Make sure that the agent job for the subscription is created.
subscription.CreateSyncAgentByDefault = True
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As MergeSubscription In _
publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName Then
registered = True
End If
Next
If Not registered Then
' Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
MergeSubscriberType.Local, 0)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
Bu örnek, MSsubscription_properties'ta ilişkili bir ajan işi ve abonelik meta verisi oluşturmadan bir birleştirme yayınına pull aboneliği oluşturur. Merge Agent görevinin oluşturulmasında kullanılan Windows hesap kimlik bilgileri çalışma zamanında aktarılır.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.LoadProperties())
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
// Specify that an agent job not be created for this subscription. The
// subscription can only be synchronized by running the Merge Agent directly.
// Subscription metadata stored in MSsubscription_properties will not
// be available and must be specified at run time.
subscription.CreateSyncAgentByDefault = false;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (MergeSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName
&& existing.SubscriptionType == SubscriptionOption.Pull)
{
registered = true;
}
}
if (!registered)
{
// Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
MergeSubscriberType.Local, 0);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.LoadProperties() Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
' Specify that an agent job not be created for this subscription. The
' subscription can only be synchronized by running the Merge Agent directly.
' Subscription metadata stored in MSsubscription_properties will not
' be available and must be specified at run time.
subscription.CreateSyncAgentByDefault = False
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As MergeSubscription In _
publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName Then
registered = True
End If
Next
If Not registered Then
' Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
MergeSubscriberType.Local, 0)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
Bu örnek, bir birleştirme yayınına çekme aboneliği oluşturur ve bu abonelik Web senkronizasyonu kullanılarak internet üzerinden senkronize edilir. Merge Agent görevi oluşturmak için kullanılan Windows hesap kimlik bilgileri çalışma zamanında iletilir. Daha fazla bilgi için bkz. Web Senkronizasyonunu Yapılandır.
// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";
string hostname = @"adventure-works\garrett1";
string webSyncUrl = "https://" + publisherInstance + "/WebSync/replisapi.dll";
//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
// Create the objects that we need.
MergePublication publication;
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
subscriberConn.Connect();
// Ensure that the publication exists and that
// it supports pull subscriptions and Web synchronization.
publication = new MergePublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.LoadProperties())
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
if ((publication.Attributes & PublicationAttributes.AllowWebSynchronization) == 0)
{
publication.Attributes |= PublicationAttributes.AllowWebSynchronization;
}
// Define the pull subscription.
subscription = new MergePullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
subscription.HostName = hostname;
// Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
subscription.SynchronizationAgentProcessSecurity.Password = winPassword;
// Enable Web synchronization.
subscription.UseWebSynchronization = true;
subscription.InternetUrl = webSyncUrl;
// Specify the same Windows credentials to use when connecting to the
// Web server using HTTPS Basic Authentication.
subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication;
subscription.InternetLogin = winLogin;
subscription.InternetPassword = winPassword;
// Ensure that we create a job for this subscription.
subscription.CreateSyncAgentByDefault = true;
// Create the pull subscription at the Subscriber.
subscription.Create();
Boolean registered = false;
// Verify that the subscription is not already registered.
foreach (MergeSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName
&& existing.SubscriptionType == SubscriptionOption.Pull)
{
registered = true;
}
}
if (!registered)
{
// Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
MergeSubscriberType.Local, 0);
}
}
else
{
// Do something here if the publication does not exist.
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Implement the appropriate error handling here.
throw new ApplicationException(String.Format(
"The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim publicationDbName As String = "AdventureWorks"
Dim hostname As String = "adventure-works\garrett1"
Dim webSyncUrl As String = "https://" + publisherInstance + "/WebSync/replisapi.dll"
'Create connections to the Publisher and Subscriber.
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)
' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
subscriberConn.Connect()
' Ensure that the publication exists and that
' it supports pull subscriptions and Web synchronization.
publication = New MergePublication()
publication.Name = publicationName
publication.DatabaseName = publicationDbName
publication.ConnectionContext = publisherConn
If publication.LoadProperties() Then
If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowPull
End If
If (publication.Attributes And PublicationAttributes.AllowWebSynchronization) = 0 Then
publication.Attributes = publication.Attributes _
Or PublicationAttributes.AllowWebSynchronization
End If
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = subscriberConn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
subscription.HostName = hostname
subscription.CreateSyncAgentByDefault = True
' Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login = winLogin
subscription.SynchronizationAgentProcessSecurity.Password = winPassword
' Enable Web synchronization.
subscription.UseWebSynchronization = True
subscription.InternetUrl = webSyncUrl
' Specify the same Windows credentials to use when connecting to the
' Web server using HTTPS Basic Authentication.
subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication
subscription.InternetLogin = winLogin
subscription.InternetPassword = winPassword
' Create the pull subscription at the Subscriber.
subscription.Create()
Dim registered As Boolean = False
' Verify that the subscription is not already registered.
For Each existing As MergeSubscription In _
publication.EnumSubscriptions()
If existing.SubscriberName = subscriberName Then
registered = True
End If
Next
If Not registered Then
' Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown( _
subscriberName, subscriptionDbName, _
SubscriptionSyncType.Automatic, _
MergeSubscriberType.Local, 0)
End If
Else
' Do something here if the publication does not exist.
Throw New ApplicationException(String.Format( _
"The publication '{0}' does not exist on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Implement the appropriate error handling here.
Throw New ApplicationException(String.Format( _
"The subscription to {0} could not be created.", publicationName), ex)
Finally
subscriberConn.Disconnect()
publisherConn.Disconnect()
End Try
İlgili içerik
- Çoğaltma Yönetimi Nesneleri Kavramları
- Pull Aboneliği Özelliklerini Görüntüle ve Değiştir
- Web Eşitlemesini Yapılandırma
- Yayınlara Abone Ol
- Çoğaltma Güvenliği en iyi yöntemleri