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 ilk anlık görüntünün nasıl oluşturulacağı ve uygulanacağı açıklanır. Parametrelerli filtreler kullanan yayınları birleştirmek için iki bölümlü bir anlık görüntü gereklidir. Daha fazla bilgi için, Parametrizlenmiş Filtrelerle Birleştirme Yayını için Anlık Görüntü Oluştur bölümüne bakınız.
Snapshot Agent, bir yayın oluşturulduktan sonra anlık görüntüler oluşturur. Anlık görüntüler oluşturabilirsiniz:
- Hemen. Varsayılan olarak Yeni Yayım Sihirbazı, yayımı oluşturduktan hemen sonra bir birleştirme yayımı için anlık görüntü oluşturur.
- Belirlenmiş bir saatte. Yeni Yayın Büyücüsü'nün Snapshot Agent sayfasında veya saklanan prosedürler veya Replikasyon Yönetim Nesneleri (RMO) kullanılırken bir zaman çizelgesi belirtin.
- Manuel olarak. Snapshot Agent'ı komut isteğinden veya SQL Server Management Studio'dan çalıştırın. Çalıştıran ajanlar hakkında daha fazla bilgi için Replication Agent Executables Concepts ve Start and Stop a Replication Agent (SQL Server Management Studio) bölümlerine bakınız.
Merge replikasyonu için, Snapshot Agent her çalıştığında bir snapshot üretir. İşlemsel Çoğaltma için, anlık görüntü üretimi, yayın özelliğinin ayarına bağlıdır immediate_sync. Özellik TRUE olarak ayarlanmışsa (New Publication Wizard kullanılırken varsayılan bu), Snapshot Agent her çalıştığında bir snapshot oluşturur ve snapshot'u herhangi bir zaman bir aboneye uygulayabilir. Özellik SAHTE olarak ayarlanmışsa (sp_addpublication kullanılırken varsayılan olarak), Snapshot Agent yalnızca son Snapshot Agent çalıştırmadan sonra yeni bir abonelik eklendiğinde anlık görüntü oluşturur; Aboneler senkronize edilebilmek için Snapshot Agent tamamlanana kadar beklemelidir.
Varsayılan olarak, Snapshot Agent oluşturulan anlık görüntüleri Dağıtıcıda bulunan varsayılan snapshot klasörüne kaydeder. Ayrıca, snapshot dosyalarını çıkarılabilir diskler, CD-ROM'lar gibi çıkarılabilir medyada veya varsayılan snapshot klasörü dışındaki yerlerde kaydedebilirsiniz. Ayrıca dosyaları sıkıştırarak depolama ve aktarmayı kolaylaştırabilir ve Snapshot Agent snapshot'u Aboneye uygulamadan önce veya sonra scriptleri çalıştırabilirsiniz. Bu seçenekler hakkında daha fazla bilgi için Snapshot Seçenekleri'ne bakınız.
Eğer anlık görüntü, parametreli filtreler kullanan bir birleştirme yayını içinse, Snapshot Agent anlık görüntüyü iki bölümlü bir işlem kullanarak oluşturur. İlk olarak, çoğaltma betiklerini ve yayımlanan nesnelerin şemasını içeren ancak veriyi içermeyen bir şema anlık görüntüsü oluşturur. Her abonelik, şema anlık görüntüsünden kopyalanan betikleri ve şemaları ile abonelik bölümüne ait verileri içeren bir anlık görüntü ile başlatılır. Daha fazla bilgi için bkz. Parametreli Filtrelerle Birleştirme Yayınları için Anlık Görüntüler.
Snapshot Agent snapshot'u Publisher'da oluşturup varsayılan veya alternatif bir snapshot konumunda sakladıktan sonra, snapshot'u Aboneye aktarabilir ve uygulayabilirsiniz. Distribution Agent (anlık görüntü veya İşlemsel Çoğaltma için) ya da Merge Agent (birleştirme çoğaltması için), ilk eşitleme sırasında anlık görüntüyü aktarır ve şema ile veri dosyalarını Abonedeki abonelik veritabanına uygular. Varsayılan olarak, Yeni Abonelik Büyücüsü'nü kullanıyorsanız, ilk senkronizasyon abonelik oluşturduğunuzda hemen gerçekleşir. Sihirbazın Abonelikleri Başlatma sayfasındaki Initialize When seçeneği bu davranışı kontrol eder. Snapshot Agent, abonelik başlatıldıktan sonra snapshotlar oluşturduğunda, aboneliği yeniden başlatma için işaretlemediğiniz sürece bunları bir aboneye uygulamaz. Daha fazla bilgi için bkz. Abonelikleri Yeniden Başlatma.
Distribution Agent veya Merge Agent ilk anlık görüntüyü uyguladıktan sonra, ajan sonraki güncellemeleri ve diğer veri değişikliklerini yayar. Anlık görüntüler Abonelere dağıtılıp uygulandığında, yalnızca ilk veya yeni anlık görüntüleri bekleyen aboneler etkilenir. O yayına diğer aboneler (zaten ekleme, güncelleme, silme veya yayınlanan verilerde başka değişiklikler alanlar) etkilenmez.
Varsayılan anlık fotoğraf klasör konumunu görüntülemek veya değiştirmek için bakınız.
SQL Server Management Studio: Anlık görüntü seçeneklerini değiştir
Çoğaltma Programlama ve RMO programlama: Yayıncılık ve Dağıtımı Konfigüre Et
Varsayılan anlık görüntü konumu
Dağıtım Yapılandırma Büyücüsü'nün Snapshot Klasörü sayfasında varsayılan anlık fotoğraf konumunu belirtin. Bu sihirbazın kullanımı hakkında daha fazla bilgi için Yayıncılık ve Dağıtımı Yapılandır bölümüne bakınız. Eğer bir yayını Dağıtıcı olarak yapılandırılmamış bir sunucuda oluşturursanız, Yeni Yayın Büyücüsü'nün Snapshot Klasörü sayfasında varsayılan bir anlık fotoğraf konumu belirtin. Bu sihirbazı kullanma hakkında daha fazla bilgi için Yayın Oluştur sayfasına bakınız.
Dağıtıcı Özellikleri - <Dağıtıcı> iletişim kutusunun Yayıncılar sayfasında varsayılan anlık görüntü konumunu değiştirin. Daha fazla bilgi için Dağıtıcı ve Publisher Properties'i Gör ve Değiştir sayfasına bakabilirsiniz. Her yayın için anlık fotoğraf klasörünü Yayın Özellikleri - <Yayın> diyalog kutusunda ayarlayın. Daha fazla bilgi için bkz. Yayın Özelliklerini Görüntüleme ve Değiştirme.
Varsayılan anlık görüntü konumunu değiştirin
Dağıtımcı Özellikleri - <Dağıtıcı> iletişim kutusunun Publishers sayfasında, varsayılan anlık konumunu değiştirmek istediğiniz Publisher için özellikler butonunu (...) seçin.
Publisher Properties - <Publisher> iletişim kutusunda, Varsayılan Snapshot Klasör özelliği için bir değer girin.
Note
Snapshot Agent, belirttiğiniz dizin için yazma izinleri gerektirir, Distribution Agent veya Merge Agent ise okuma izinleri gerektirir. Pull abonelikleri kullanıyorsanız, evrensel adlandırma konvansiyonu (UNC) yolu olarak paylaşılan bir dizin belirtmeniz gerekir, örneğin \\computername\snapshot. Daha fazla bilgi için bkz. Anlık Görüntü Klasörünün Güvenliğini Sağlama.
Tamam'ı seçin.
Anlık görüntü oluştur
Varsayılan olarak, SQL Server Agent çalışıyorsa, Snapshot Agent yayın oluşturduğunuz anda hemen Yeni Yayın Sihirbazı kullanarak bir anlık görüntü oluşturur. Varsayılan olarak, Dağıtım Aracısı (anlık görüntü ve İşlemsel Çoğaltma için) veya Birleştirme Aracısı (birleştirme abonelikleri için) daha sonra anlık görüntüyü tüm aboneliklere uygular. SQL Server Management Studio ve Replication Monitor kullanarak da anlık görüntü oluşturabilirsiniz. Çoğaltma İzleyicisi'ni başlatma hakkında bilgi için bkz. Çoğaltma İzleyicisi'ni başlatma.
SQL Server Management Studio'yu kullanma
- Management Studio'da Publisher'a bağlanın ve sunucu düğümünü genişletin.
- Çoğaltma klasörünü genişletin ve ardından Yerel Yayınlar klasörünü genişletin.
- Snapshot oluşturmak istediğiniz yayına sağ tıklayın ve ardından View Snapshot Agent Status'u seçin.
-
View Snapshot Agent Status - <Publication> diyalog kutusunda Başlat'ı seçin.
Snapshot Agent anlık görüntüyü oluşturmayı bitirdiğinde, "[100%] 17 makale(s) anlık görüntüsü oluşturuldu" gibi bir mesaj gösterir.
Replikasyon Monitöründe
- Çoğaltma İzleyicisi'nde, sol bölmede bir Publisher grubunu genişletin ve sonra bir Publisher'ı genişletin.
- Anlık görüntü oluşturmak istediğiniz yayına sağ tıklayın ve ardından Anlık Görüntü Oluştur seçeneğini seçin.
- Snapshot Agent'ın durumunu görmek için Agents sekmesini seçin. Daha ayrıntılı bilgi için ızgarada Snapshot Agent'a sağ tıklayın ve ardından Detayları Gör seçeneğini seçin.
Transact-SQL Kullanımı
İlk anlık görüntüleri, programatik olarak, bir Snapshot Agent işi oluşturup çalıştırarak veya Snapshot Agent yürütülebilir dosyasını bir toplu iş dosyasından çalıştırarak oluşturabilirsiniz. İlk anlık görüntü oluşturulduktan sonra, abonelik ilk senkronize edildiğinde aboneye aktarılır ve orada uygulanır. Snapshot Agent'ı bir komut isteğinden veya toplu dosyadan çalıştırırsanız, mevcut snapshot geçersiz hale geldiğinde ajanı yeniden çalıştırmanız gerekir.
Important
Mümkün olduğunda, kullanıcılardan çalışma zamanında güvenlik kimlik bilgilerini girmelerini iste. Kimlik bilgilerini bir betik dosyasında depolamanız gerekiyorsa, yetkisiz erişimi önlemek için dosyanın güvenliğini sağlayın.
Anlık görüntü yayını, işlemsel yayın veya birleştirme yayını oluşturun. Daha fazla bilgi için bkz. Yayın Oluşturma.
sp_addpublication_snapshot (Transact-SQL) çalıştırın. @publication ve aşağıdaki parametreleri belirtin:
@job_login, Snapshot Agent'nin Dağıtıcıda çalıştığı Windows Doğrulama kimlik bilgilerini belirler.
@job_password, verilen Windows kimlik bilgilerinin şifresi.
(İsteğe bağlı) Ajan, Publisher’a bağlanırken SQL Server Kimlik Doğrulaması kullanıyorsa, @publisher_security_mode için 0 değeri. Bu durumda, @publisher_login ve @publisher_password için SQL Server Doğrulama giriş bilgilerini de belirtmeniz gerekir.
(İsteğe bağlı) Snapshot Agent işi için bir senkronizasyon takvimi. Daha fazla bilgi için bkz. Eşitleme Zamanlamalarını Belirtme.
Important
Bir Publisher uzak Dağıtıcı ile yapılandırdığınızda, job_login ve job_password dahil tüm parametreler için sağladığınız değerler Dağıtıcıya düz metin olarak gönderilir. Bu saklanan işlemi uygulamadan önce Publisher ile uzak Dağıtıcısı arasındaki bağlantıyı şifreleyin. 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.
Yayın veritabanındaki Publisher üzerinde, 1. adımdaki @publication değerini belirterek sp_startpublication_snapshot (Transact-SQL) komutunu çalıştırın.
Bir anlık görüntü uygula
SQL Server Management Studio'yu kullanma
Anlık görüntü oluşturulduktan sonra, aboneliği Distribution Agent veya Merge Agent ile senkronize ederek uygulayın:
Aracı sürekli çalışıyorsa (işlemsel çoğaltma için varsayılan davranış budur), anlık görüntüyü oluşturmasının ardından otomatik olarak uygular.
Ajan bir takvimde çalışıyorsa, bir sonraki çalışmada anlık görüntü uygulanır.
Ajan talep üzerine çalışıyorsa, bir sonraki çalıştırmanızda anlık görüntüyü uygular.
Abonelikleri eşitleme hakkında daha fazla bilgi için bkz. Anında İletme Aboneliğini Eşitleme ve Çekme Aboneliğini Eşitleme.
Transact-SQL kullanma
Anlık görüntü yayını, işlemsel yayın veya birleştirme yayını oluşturun. Daha fazla bilgi için bkz. Yayın Oluşturma.
Yayına makale ekleyin. Daha fazla bilgi için bkz. Makale Tanımlama.
Komut isteminden veya bir toplu iş dosyasında, snapshot.exe dosyasını çalıştırıp aşağıdaki komut satırı bağımsız değişkenlerini belirterek Replication Snapshot Agent'ı başlatın:
- -Yayın
- -Yayınevi
- -Dağıtıcı
- -PublisherDB
- -Replikasyon Tipi
SQL Server Authentication kullanıyorsanız, aşağıdaki argümanları da belirtin:
- -DistributorLogin
- -DağıtıcıŞifre
- -DistributorSecurityMode = 0
- -PublisherLogin
- -PublisherPassword
- -YayıncıGüvenlik Modu = 0
Örnekler (Transact-SQL)
Bu örnek, işlem amaçlı yayın nasıl oluşturulacağını ve yeni yayın için bir Snapshot Agent işi ekleneceğini (sqlcmd scripting değişkenleri kullanılarak) gösterir. Örnek aynı zamanda görevi başlatı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'AdventureWorks2022'; --publication database
SET @publication = N'AdvWorksCustomerTran'; -- transactional publication name
SET @login = $(Login);
SET @password = $(Password);
USE [AdventureWorks]
-- Enable transactional and 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 security mode used when connecting to the Publisher.
@publisher_security_mode = 1;
-- Create new transactional publication, using the defaults.
USE [AdventureWorks2022]
EXEC sp_addpublication
@publication = @publication,
@description = N'transactional publication';
-- Create a new snapshot job for the publication, using the defaults.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password;
-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO
Bu örnek, bir birleştirme yayını oluşturur ve bu yayına yönelik bir Anlık Görüntü Aracısı işi (sqlcmd değişkenleri kullanılarak) ekler. Bu örnek aynı zamanda görevi başlatı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".
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.
USE master
EXEC sp_replicationdboption
@dbname = @publicationDB,
@optname=N'merge publish',
@value = N'true';
-- Create new merge publication, using the defaults.
USE [AdventureWorks]
EXEC sp_addmergepublication
@publication = @publication,
@description = N'Merge publication.';
-- Create a new snapshot job for the publication, using the defaults.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password;
-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO
Aşağıdaki komut satırı argümanları, Snapshot Agent'ı birleştirme yayını için anlık görüntü oluşturmak üzere başlatır.
Note
Okunabilirliği artırmak için satır araları eklendi. Bir toplu dosyada, komutları tek bir satırda yapmanız gerekir.
REM -- Declare variables
SET Publisher=%InstanceName%
SET PublicationDB=AdventureWorks2022
SET Publication=AdvWorksSalesOrdersMerge
REM --Start the Snapshot Agent to generate the snapshot for AdvWorksSalesOrdersMerge.
"C:\Program Files\Microsoft SQL Server\120\COM\SNAPSHOT.EXE" -Publication %Publication%
-Publisher %Publisher% -Distributor %Publisher% -PublisherDB %PublicationDB%
-ReplicationType 2 -OutputVerboseLevel 1 -DistributorSecurityMode 1
Çoğaltma Yönetimi Nesnelerini (RMO) Kullanma
Snapshot Agent, bir yayın oluşturduktan sonra anlık görüntüler üretir. Bu anlık görüntüleri Replikasyon Yönetim Nesneleri (RMO) kullanarak ve replikasyon ajanı işlevlerine doğrudan yönetilen kod erişimi kullanarak programatik olarak oluşturabilirsiniz. Kullandığınız nesneler, çoğaltma türüne bağlıdır. SnapshotGenerationAgent nesnesini kullanarak Snapshot Agent'ı eşzamanlı olarak veya aracı görevini kullanarak eşzamansız olarak başlatabilirsiniz. İlk anlık görüntü oluşturulduktan sonra, Snapshot Agent bunu aboneye aktarır ve abonelik ilk senkronize edildiğinde uygular. Mevcut anlık görüntü artık geçerli ve güncel veriler içermediğinde ajanı yeniden çalıştırmanız gerekir. Daha fazla bilgi için Yayınları Sürdür bölümünü inceleyebilirsiniz.
Important
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.
Bir anlık görüntü veya işlemsel yayın için ilk anlık görüntüyü, Snapshot Agent görevini başlatarak oluşturmak (eşzamansız)
sınıfını kullanarak ServerConnection Publisher'a bir bağlantı oluşturun.
TransPublication sınıfının bir örneğini oluşturun. Yayın için Name ve DatabaseName özelliklerini ayarlayın ve ConnectionContext özelliğini 1. adımda oluşturulan bağlantıya ayarlayın.
Nesnenin kalan özelliklerini yüklemek için metodu LoadProperties çağırın. Eğer bu yöntem yanlış dönerse, ya 2. adımdaki yayın özellikleri yanlış tanımlanmıştır ya da yayın yoktur.
SnapshotAgentExists değerinin false olması durumunda, bu yayın için anlık görüntü aracısı işini oluşturmak üzere CreateSnapshotAgent öğesini çağırın.
Bu yayın için anlık görüntü oluşturan aracı görevini başlatmak üzere StartSnapshotGenerationAgentJob yöntemini çağırın.
(İsteğe bağlı) Değeri SnapshotAvailabledoğruysa, anlık görüntü Aboneler için erişilebilirdir.
Snapshot Agent’ı çalıştırarak (eşzamanlı), anlık görüntü veya işlemsel yayım için ilk anlık görüntüyü oluşturmak
Sınıfın SnapshotGenerationAgent bir örneğini oluşturun ve aşağıdaki gerekli özellikleri belirleyin:
Publisher- Publisher'ın adı
PublisherDatabase - yayın veritabanının adı
Publication - yayın adı
Distributor - Dağıtıcının adı
PublisherSecurityMode - Yayımcıya bağlanırken Windows Kimlik Doğrulaması kullanmak için Integrated değeri veya Yayımcıya bağlanırken SQL Server Kimlik Doğrulaması kullanmak için Standard değeri ile PublisherLogin ve PublisherPassword değerleri. Windows Kimlik Doğrulaması önerilir.
DistributorSecurityMode - Dağıtıcıya bağlanırken Windows Kimlik Doğrulaması kullanmak için Integrated değeri veya Dağıtıcıya bağlanırken SQL Server Kimlik Doğrulaması kullanmak için Standard değeri ile DistributorLogin ve DistributorPassword değerleri. Windows Kimlik Doğrulaması önerilir.
ReplicationType için Transactional veya Snapshot değerini ayarlayın.
yöntemini çağırın GenerateSnapshot .
Bir birleştirme yayını için ilk anlık görüntüyü, Snapshot Agent işini başlatarak (asenkron) oluşturmak
sınıfını kullanarak ServerConnection Publisher'a bir bağlantı oluşturun.
MergePublication sınıfının bir örneğini oluşturun. Yayın için Name ve DatabaseName özelliklerini ayarlayın ve ConnectionContext özelliğini 1. adımda oluşturulan bağlantıya ayarlayın.
Nesnenin kalan özelliklerini yüklemek için metodu LoadProperties çağırın. Eğer bu yöntem yanlış dönerse, ya 2. adımdaki yayın özellikleri yanlış tanımlanmıştır ya da yayın yoktur.
SnapshotAgentExists değerinin false olması durumunda, bu yayın için anlık görüntü aracısı işini oluşturmak üzere CreateSnapshotAgent öğesini çağırın.
Bu yayın için anlık görüntü oluşturan aracı görevini başlatmak üzere StartSnapshotGenerationAgentJob yöntemini çağırın.
(İsteğe bağlı) Değeri SnapshotAvailabledoğruysa, anlık görüntü Aboneler için erişilebilirdir.
Bir birleştirme yayını için ilk anlık görüntüyü Snapshot Agent'ı çalıştırarak (senkroniz) oluşturmak
Sınıfın SnapshotGenerationAgent bir örneğini oluşturun ve aşağıdaki gerekli özellikleri belirleyin:
Publisher- Publisher'ın adı
PublisherDatabase - yayın veritabanının adı
Publication - yayın adı
Distributor - Dağıtıcının adı
PublisherSecurityMode - Yayımcıya bağlanırken Windows Kimlik Doğrulaması kullanmak için Integrated değeri veya Yayımcıya bağlanırken SQL Server Kimlik Doğrulaması kullanmak için Standard değeri ile PublisherLogin ve PublisherPassword değerleri. Windows Kimlik Doğrulaması önerilir.
DistributorSecurityMode - Dağıtıcıya bağlanırken Windows Kimlik Doğrulaması kullanmak için Integrated değeri veya Dağıtıcıya bağlanırken SQL Server Kimlik Doğrulaması kullanmak için Standard değeri ile DistributorLogin ve DistributorPassword değerleri. Windows Kimlik Doğrulaması önerilir.
ReplicationType için Merge değeri belirleyin.
yöntemini çağırın GenerateSnapshot .
Örnekler (RMO)
Bu örnek, işlemsel yayın için ilk anlık görüntüyü oluşturmak amacıyla Snapshot Agent'ı senkronize çalıştırır.
// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";
string publisherName = publisherInstance;
string distributorName = publisherInstance;
SnapshotGenerationAgent agent;
try
{
// Set the required properties for Snapshot Agent.
agent = new SnapshotGenerationAgent();
agent.Distributor = distributorName;
agent.DistributorSecurityMode = SecurityMode.Integrated;
agent.Publisher = publisherName;
agent.PublisherSecurityMode = SecurityMode.Integrated;
agent.Publication = publicationName;
agent.PublisherDatabase = publicationDbName;
agent.ReplicationType = ReplicationType.Transactional;
// Start the agent synchronously.
agent.GenerateSnapshot();
}
catch (Exception ex)
{
// Implement custom application error handling here.
throw new ApplicationException(String.Format(
"A snapshot could not be generated for the {0} publication."
, publicationName), ex);
}
' Set the Publisher, publication database, and publication names.
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2022"
Dim publisherName As String = publisherInstance
Dim distributorName As String = publisherInstance
Dim agent As SnapshotGenerationAgent
Try
' Set the required properties for Snapshot Agent.
agent = New SnapshotGenerationAgent()
agent.Distributor = distributorName
agent.DistributorSecurityMode = SecurityMode.Integrated
agent.Publisher = publisherName
agent.PublisherSecurityMode = SecurityMode.Integrated
agent.Publication = publicationName
agent.PublisherDatabase = publicationDbName
agent.ReplicationType = ReplicationType.Transactional
' Start the agent synchronously.
agent.GenerateSnapshot()
Catch ex As Exception
' Implement custom application error handling here.
Throw New ApplicationException(String.Format( _
"A snapshot could not be generated for the {0} publication." _
, publicationName), ex)
End Try
Bu örnek, işlemsel yayın için ilk anlık görüntüyü oluşturmak üzere ajan işini asenkron olarak başlatır.
// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";
string publisherName = publisherInstance;
TransPublication publication;
// Create a connection to the Publisher using Windows Authentication.
ServerConnection conn;
conn = new ServerConnection(publisherName);
try
{
// Connect to the Publisher.
conn.Connect();
// Set the required properties for an existing publication.
publication = new TransPublication();
publication.ConnectionContext = conn;
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
if (publication.LoadProperties())
{
// Start the Snapshot Agent job for the publication.
publication.StartSnapshotGenerationAgentJob();
}
else
{
throw new ApplicationException(String.Format(
"The {0} publication does not exist.", publicationName));
}
}
catch (Exception ex)
{
// Implement custom application error handling here.
throw new ApplicationException(String.Format(
"A snapshot could not be generated for the {0} publication."
, 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 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()
' Set the required properties for an existing publication.
publication = New TransPublication()
publication.ConnectionContext = conn
publication.Name = publicationName
publication.DatabaseName = publicationDbName
If publication.LoadProperties() Then
' Start the Snapshot Agent job for the publication.
publication.StartSnapshotGenerationAgentJob()
Else
Throw New ApplicationException(String.Format( _
"The {0} publication does not exist.", publicationName))
End If
Catch ex As Exception
' Implement custom application error handling here.
Throw New ApplicationException(String.Format( _
"A snapshot could not be generated for the {0} publication." _
, publicationName), ex)
Finally
conn.Disconnect()
End Try
İlk anlık görüntü uygulanırken bloklama
Abonelerdeki tek bir veritabanına veri yayımlayan birden fazla yayınınız varsa, ilk anlık görüntüler uygulanırken aynı anda yalnızca bir yayının kendi anlık görüntüsünü uygulayabildiğini fark edersiniz.
SQL etkinliğini incelerken, aşağıdaki gibi bir bekleme kaynağı görebilirsiniz:
APP: 18:16384:[snapshot_delivery_in_progress_Tr]:(9bcdaf92)
APP: 5:16384:[snapshot_delivery_in_progress_Er]:(3c3b7db9)
Kilitleme davranışı için sorgulama, aşağıdaki gibi kaynakları gösterebilir:
APP 16384:[appname]:(fbe42d68) XAPP 16384:[snapshot_del]:(9bcdaf92) X
Bu davranış tasarım gereğidir. Bu, birden fazla replikasyon ajanının aynı abone veritabanına farklı yayınların anlık görüntülerini aynı anda uygulamasını engellemek için uygulama kilidinin kullanılmasıyla ortaya çıkar. Uygulama kilidi abone veritabanının adını içerdiğinden, aynı abone veritabanına yayımlanan yayınlar etkilenir. Sonuç olarak, abone veritabanına aynı anda yalnızca bir anlık görüntü eklenebilir.
Bu durumda, çoğaltma ajanlarının birbirleriyle çıkmaz hale gelme ihtimalini önlemek için özel kilitler kullanılır.
Bu sorunu aşmak için, her yayın için farklı bir abone veritabanı belirtin.
İlgili içerik
- Yayın oluşturma
- Bir Pull Aboneliği Oluştur
- Anında iletme aboneliği oluşturma
- Eşitleme Zamanlamalarını Belirtme
- Yeni bir yayın için bir anlık görüntüyle abonelik başlatın
- Çoğaltma Yönetimi Nesneleri Kavramları
- Çoğaltma Güvenliği en iyi yöntemleri
- Çoğaltma Sistemi Depolanmış Yordam Kavramları
- Komut dosyası değişkenleriyle sqlcmd komutunu kullanma