Membuat dan Menerapkan Rekam Jepret Awal
Berlaku untuk: SQL Server Azure SQL Managed Instance
Topik ini menjelaskan cara membuat dan menerapkan rekam jepret awal di SQL Server dengan menggunakan SQL Server Management Studio, Transact-SQL, atau Replication Management Objects (RMO). Gabungkan publikasi yang menggunakan filter berparameter memerlukan rekam jepret dua bagian. Untuk informasi selengkapnya, lihat Membuat Rekam Jepret untuk Publikasi Gabungan dengan Filter Berparameter.
Rekam jepret dihasilkan oleh Agen Rekam Jepret setelah publikasi dibuat. Mereka dapat dihasilkan:
- Segera. Secara default, rekam jepret untuk publikasi gabungan dibuat segera setelah publikasi dibuat di Wizard Publikasi Baru.
- Pada waktu yang dijadwalkan. Tentukan jadwal pada halaman Agen Rekam Jepret wizard Publikasi Baru atau saat menggunakan prosedur tersimpan atau Objek Manajemen Replikasi (RMO).
- Secara manual. Jalankan Agen Rekam Jepret dari prompt perintah atau dari SQL Server Management Studio. Untuk informasi selengkapnya tentang menjalankan agen, lihat Konsep Agen Replikasi yang Dapat Dieksekusi dan Memulai dan Menghentikan Agen Replikasi (SQL Server Management Studio).
Untuk replikasi penggabungan, rekam jepret dihasilkan setiap kali Agen Rekam Jepret berjalan. Untuk replikasi transaksional, pembuatan rekam jepret tergantung pada pengaturan properti publikasi immediate_sync. Jika properti diatur ke TRUE (default saat menggunakan Wizard Publikasi Baru), rekam jepret dihasilkan setiap kali Agen Rekam Jepret berjalan, dan dapat diterapkan ke Pelanggan kapan saja. Jika properti diatur ke FALSE (default saat menggunakan sp_addpublication), rekam jepret dihasilkan hanya jika langganan baru telah ditambahkan sejak Agen Rekam Jepret terakhir dijalankan; Pelanggan harus menunggu Agen Rekam Jepret selesai sebelum dapat disinkronkan.
Secara default, saat rekam jepret dihasilkan, rekam jepret disimpan di folder rekam jepret default yang terletak di Distributor. Anda juga dapat menyimpan file rekam jepret pada media yang dapat dilepas seperti disk yang dapat dilepas, CD-ROM, atau di lokasi selain di folder rekam jepret default. Selain itu, Anda dapat mengompres file sehingga lebih mudah disimpan dan ditransfer, dan menjalankan skrip sebelum atau sesudah rekam jepret diterapkan di Pelanggan. Untuk informasi selengkapnya tentang opsi ini, lihat Opsi Rekam Jepret.
Jika rekam jepret adalah untuk publikasi gabungan yang menggunakan filter berparameter, rekam jepret dibuat menggunakan proses dua bagian. Pertama, rekam jepret skema dibuat yang berisi skrip replikasi dan skema objek yang diterbitkan, tetapi bukan data. Setiap langganan kemudian diinisialisasi dengan rekam jepret yang menyertakan skrip dan skema yang disalin dari rekam jepret skema dan data milik partisi langganan. Untuk informasi selengkapnya, lihat Rekam Jepret untuk Gabungkan Publikasi dengan Filter Berparameter.
Setelah rekam jepret dibuat di Publisher dan disimpan di lokasi rekam jepret default atau alternatif, rekam jepret dapat ditransfer ke Pelanggan dan diterapkan. Agen Distribusi (untuk rekam jepret atau replikasi transaksional) atau Agen Penggabungan (untuk replikasi penggabungan) mentransfer rekam jepret dan menerapkan skema dan file data ke database langganan pada Pelanggan selama sinkronisasi awal. Secara default, sinkronisasi awal terjadi segera setelah langganan dibuat jika Anda menggunakan Panduan Langganan Baru. Perilaku ini dikontrol oleh opsi Inisialisasi Saat pada halaman Inisialisasi Langganan wizard. Saat rekam jepret dihasilkan setelah langganan diinisialisasi, rekam jepret tidak diterapkan ke Pelanggan kecuali langganan ditandai untuk reinisialisasi. Untuk informasi selengkapnya, lihat Menginisialisasi ulang Langganan.
Setelah Agen Distribusi atau Agen Penggabungan menerapkan rekam jepret awal, agen menyebarluaskan pembaruan berikutnya dan modifikasi data lainnya. Ketika rekam jepret didistribusikan dan diterapkan ke Pelanggan, hanya Pelanggan yang menunggu rekam jepret awal atau baru yang terpengaruh. Pelanggan lain untuk publikasi tersebut (yang sudah menerima sisipan, pembaruan, penghapusan, atau modifikasi lain pada data yang diterbitkan) tidak terpengaruh.
Untuk melihat atau mengubah lokasi folder rekam jepret default, lihat
SQL Server Management Studio: Mengubah opsi rekam jepret
Pemrograman Replikasi dan pemrograman RMO: Mengonfigurasi Penerbitan dan Distribusi
Lokasi rekam jepret default
Tentukan lokasi rekam jepret default pada halaman Folder Rekam Jepret dari Wizard Konfigurasi Distribusi. Untuk informasi selengkapnya tentang menggunakan wizard ini, lihat Mengonfigurasi Penerbitan dan Distribusi. Jika Anda membuat publikasi di server yang tidak dikonfigurasi sebagai Distributor, tentukan lokasi rekam jepret default di halaman Folder Rekam Jepret wizard Publikasi Baru. Untuk informasi selengkapnya tentang menggunakan panduan ini, lihat Membuat Publikasi.
Ubah lokasi rekam jepret default di halaman Penerbit dari kotak dialog Properti Distributor - <Distributor>. Untuk informasi selengkapnya, lihat Menampilkan dan Memodifikasi Properti Distributor dan Penerbit. Atur folder rekam jepret untuk setiap publikasi dalam kotak dialog Properti Publikasi - <Publikasi> . Untuk informasi selengkapnya, lihat Menampilkan dan Mengubah Properti Publikasi.
Mengubah lokasi rekam jepret default
Pada halaman Penerbit dari kotak dialog Properti Distributor - <Distributor>, klik tombol properti (...) untuk Publisher tempat Anda ingin mengubah lokasi rekam jepret default.
Dalam kotak dialog Properti Penerbit - <Penerbit> , masukkan nilai untuk properti Folder Rekam Jepret Default.
Catatan
Agen Rekam Jepret harus memiliki izin tulis untuk direktori yang Anda tentukan, dan Agen Distribusi atau Agen Penggabungan harus memiliki izin baca. Jika langganan pull digunakan, Anda harus menentukan direktori bersama sebagai jalur konvensi penamaan universal (UNC), seperti \\computername\snapshot. Untuk informasi selengkapnya, lihat Mengamankan Folder Rekam Jepret.
Pilih OK.
Membuat Cuplikan
Secara default, jika SQL Server Agent berjalan, rekam jepret dihasilkan oleh Agen Rekam Jepret segera setelah publikasi dibuat dengan Wizard Publikasi Baru. Secara default, kemudian diterapkan oleh Agen Distribusi (untuk rekam jepret dan replikasi transaksional) atau Agen Penggabungan (untuk langganan gabungan) untuk semua langganan. Rekam jepret juga dapat dihasilkan menggunakan SQL Server Management Studio dan Replication Monitor. Untuk informasi tentang memulai Monitor Replikasi, lihat Memulai Monitor Replikasi.
Menggunakan SQL Server Management Studio
- Sambungkan ke Publisher di Management Studio, lalu perluas simpul server.
- Perluas folder Replikasi, lalu perluas folder Publikasi Lokal.
- Klik kanan publikasi yang ingin Anda buat rekam jepretnya, lalu klik Tampilkan Status Agen Rekam Jepret.
- Dalam kotak dialog Tampilkan Status Agen Rekam Jepret - <Publikasi> , klik Mulai.
Ketika Agen Rekam Jepret selesai menghasilkan rekam jepret, pesan akan ditampilkan, seperti "[100%] Rekam jepret dari 17 artikel dihasilkan."
Di Monitor Replikasi
- Di Monitor Replikasi, perluas grup Publisher di panel kiri, lalu perluas Publisher.
- Klik kanan publikasi yang ingin Anda buat rekam jepretnya, lalu klik Hasilkan Rekam Jepret.
- Untuk melihat status Agen Rekam Jepret, klik tab Agen . Untuk informasi selengkapnya, klik kanan Agen Rekam Jepret di kisi, lalu klik Tampilkan Detail.
Menggunakan T-SQL
Rekam jepret awal dapat dibuat secara terprogram baik dengan membuat dan menjalankan pekerjaan Agen Rekam Jepret atau dengan menjalankan file yang dapat dieksekusi Agen Rekam Jepret dari file batch. Setelah rekam jepret awal dibuat, rekam jepret ditransfer ke dan diterapkan di Pelanggan saat langganan pertama kali disinkronkan. Jika Anda menjalankan Agen Rekam Jepret dari prompt perintah atau file batch, Anda harus menjalankan ulang agen setiap kali rekam jepret yang ada menjadi tidak valid.
Penting
Jika memungkinkan, minta pengguna untuk memasukkan kredensial keamanan saat runtime. Jika Anda harus menyimpan kredensial dalam file skrip, Anda harus mengamankan file untuk mencegah akses yang tidak sah.
Buat rekam jepret, transaksi, atau gabungkan publikasi. Untuk informasi selengkapnya, lihat Membuat Publikasi.
Jalankan sp_addpublication_snapshot (Transact-SQL). Tentukan @publication dan parameter berikut:
@job_login, yang menentukan kredensial Autentikasi Windows tempat Agen Rekam Jepret berjalan di Distributor.
@job_password, yang merupakan kata sandi untuk kredensial Windows yang disediakan.
(Opsional) Nilai 0 untuk @publisher_security_mode jika agen akan menggunakan Autentikasi SQL Server saat menyambungkan ke Penerbit. Dalam hal ini, Anda juga harus menentukan informasi login Autentikasi SQL Server untuk @publisher_login dan @publisher_password.
(Opsional) Jadwal sinkronisasi untuk pekerjaan Agen Rekam Jepret. Untuk informasi selengkapnya, lihat Menentukan Jadwal Sinkronisasi.
Penting
Saat mengonfigurasi Penerbit dengan Distributor jarak jauh, nilai yang disediakan untuk semua parameter, termasuk job_login dan job_password, dikirim ke Distributor sebagai teks biasa. Anda harus mengenkripsi koneksi antara Publisher dan Distributor jarak jauhnya sebelum menjalankan prosedur tersimpan ini. Untuk informasi selengkapnya, lihat Mengaktifkan Koneksi Terenkripsi ke Mesin Database (Pengelola Konfigurasi SQL Server).
Tambahkan artikel ke publikasi. Untuk informasi selengkapnya, lihat Menentukan Artikel.
Di Penerbit pada database publikasi, jalankan sp_startpublication_snapshot (Transact-SQL), menentukan nilai @publication dari langkah 1.
Menerapkan rekam jepret
Menggunakan SQL Server Management Studio
Setelah rekam jepret dibuat, rekam jepret diterapkan dengan menyinkronkan langganan dengan Agen Distribusi atau Agen Penggabungan:
- Jika agen diatur untuk berjalan terus menerus (default untuk replikasi transaksional), rekam jepret secara otomatis diterapkan setelah dibuat.
- Jika agen diatur untuk berjalan sesuai jadwal, rekam jepret diterapkan lain kali agen dijadwalkan untuk dijalankan.
- Jika agen diatur untuk berjalan sesuai permintaan, agen akan diterapkan lain kali Anda menjalankan agen.
Untuk informasi selengkapnya tentang menyinkronkan langganan, lihat Menyinkronkan Langganan Push dan Menyinkronkan Langganan Pull.
Menggunakan Transact-SQL
Buat rekam jepret, transaksi, atau gabungkan publikasi. Untuk informasi selengkapnya, lihat Membuat Publikasi.
Tambahkan artikel ke publikasi. Untuk informasi selengkapnya, lihat Menentukan Artikel.
Dari prompt perintah atau dalam file batch, mulai Agen Replikasi Rekam Jepret dengan menjalankan snapshot.exe, menentukan argumen baris perintah berikut:
- -Publikasi
- -Penerbit
- -Distributor
- -PublisherDB
- -ReplicationType
Jika Anda menggunakan Autentikasi SQL Server, Anda juga harus menentukan argumen berikut:
- -DistributorLogin
- -DistributorPassword
- -DistributorSecurityMode = 0
- -PublisherLogin
- -PublisherPassword
- -PublisherSecurityMode = 0
Contoh (Transact-SQL)
Contoh ini menunjukkan cara membuat publikasi transaksi dan menambahkan pekerjaan Agen Rekam Jepret untuk publikasi baru (menggunakan variabel pembuatan skrip sqlcmd ). Contohnya juga memulai pekerjaan.
-- 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
Contoh ini membuat publikasi gabungan dan menambahkan pekerjaan Agen Rekam Jepret (menggunakan variabel sqlcmd ) untuk publikasi. Contoh ini juga memulai pekerjaan.
-- 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
Argumen baris perintah berikut memulai Agen Rekam Jepret untuk menghasilkan rekam jepret untuk publikasi gabungan.
Catatan
Hentian baris ditambahkan untuk meningkatkan keterbacaan. Dalam file batch, perintah harus dibuat dalam satu baris.
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
Menggunakan Objek Manajemen Replikasi (RMO)
Agen Rekam Jepret menghasilkan rekam jepret setelah publikasi dibuat. Anda dapat membuat rekam jepret ini secara terprogram dengan menggunakan Objek Manajemen Replikasi (RMO) dan akses kode terkelola langsung ke fungsionalitas agen replikasi. Objek yang Anda gunakan bergantung pada jenis replikasi. Agen Rekam Jepret dapat dimulai secara sinkron menggunakan SnapshotGenerationAgent objek atau secara asinkron menggunakan pekerjaan agen. Setelah rekam jepret awal dibuat, rekam jepret ditransfer ke dan diterapkan pada Pelanggan saat langganan pertama kali disinkronkan. Anda harus menjalankan ulang agen setiap kali rekam jepret yang ada tidak lagi berisi data yang valid dan terbaru. Untuk informasi selengkapnya, lihat Mempertahankan Publikasi.
Penting
Jika memungkinkan, minta pengguna untuk memasukkan kredensial keamanan saat runtime. Jika Anda harus menyimpan kredensial, gunakan layanan kriptografi yang disediakan oleh Microsoft Windows .NET Framework.
Untuk menghasilkan rekam jepret awal untuk rekam jepret atau publikasi transaksional dengan memulai pekerjaan Agen Rekam Jepret (asinkron)
Buat koneksi ke Publisher dengan menggunakan ServerConnection kelas .
Membuat instans kelas TransPublication. Atur Name properti dan DatabaseName untuk publikasi, dan atur ConnectionContext properti ke koneksi yang dibuat di langkah 1.
LoadProperties Panggil metode untuk memuat properti objek yang tersisa. Jika metode ini mengembalikan false, properti publikasi di langkah 2 didefinisikan dengan tidak benar atau publikasi tidak ada.
Jika nilai SnapshotAgentExists salah, panggil CreateSnapshotAgent untuk membuat pekerjaan agen rekam jepret untuk publikasi ini.
StartSnapshotGenerationAgentJob Panggil metode untuk memulai pekerjaan agen yang menghasilkan rekam jepret untuk publikasi ini.
(Opsional) Ketika nilai SnapshotAvailable benar, rekam jepret tersedia untuk Pelanggan.
Untuk menghasilkan rekam jepret awal untuk rekam jepret atau publikasi transaksional dengan menjalankan Agen Rekam Jepret (sinkron)
Buat instans SnapshotGenerationAgent kelas, dan atur properti yang diperlukan berikut:
Publisher - nama Penerbit
PublisherDatabase - nama database publikasi
Publication - nama publikasi
Distributor - nama Distributor
PublisherSecurityMode - nilai Integrated untuk menggunakan Autentikasi Windows saat menyambungkan ke Penerbit atau nilai Standard dan nilai untuk PublisherLogin dan PublisherPassword menggunakan Autentikasi SQL Server saat menyambungkan ke Penerbit. Autentikasi Windows disarankan.
DistributorSecurityMode - nilai Integrated untuk menggunakan Autentikasi Windows saat menyambungkan ke Distributor atau nilai Standard dan untuk DistributorLogin dan DistributorPassword menggunakan Autentikasi SQL Server saat menyambungkan ke Distributor. Autentikasi Windows disarankan.
Tetapkan nilai Transactional atau Snapshot untuk ReplicationType.
Panggil GenerateSnapshot metode.
Untuk menghasilkan rekam jepret awal untuk publikasi gabungan dengan memulai pekerjaan Agen Rekam Jepret (asinkron)
Buat koneksi ke Publisher dengan menggunakan ServerConnection kelas .
Membuat instans kelas MergePublication. Atur Name properti dan DatabaseName untuk publikasi, dan atur ConnectionContext properti ke koneksi yang dibuat di langkah 1.
LoadProperties Panggil metode untuk memuat properti objek yang tersisa. Jika metode ini mengembalikan false, properti publikasi di langkah 2 didefinisikan dengan tidak benar atau publikasi tidak ada.
Jika nilai SnapshotAgentExists salah, panggil CreateSnapshotAgent untuk membuat pekerjaan agen rekam jepret untuk publikasi ini.
StartSnapshotGenerationAgentJob Panggil metode untuk memulai pekerjaan agen yang menghasilkan rekam jepret untuk publikasi ini.
(Opsional) Ketika nilai SnapshotAvailable benar, rekam jepret tersedia untuk Pelanggan.
Untuk menghasilkan rekam jepret awal untuk publikasi gabungan dengan menjalankan Agen Rekam Jepret (sinkron)
Buat instans SnapshotGenerationAgent kelas, dan atur properti yang diperlukan berikut:
Publisher - nama Penerbit
PublisherDatabase - nama database publikasi
Publication - nama publikasi
Distributor - nama Distributor
PublisherSecurityMode - nilai Integrated untuk menggunakan Autentikasi Windows saat menyambungkan ke Penerbit atau nilai Standard dan nilai untuk PublisherLogin dan PublisherPassword menggunakan Autentikasi SQL Server saat menyambungkan ke Penerbit. Autentikasi Windows disarankan.
DistributorSecurityMode - nilai Integrated untuk menggunakan Autentikasi Windows saat menyambungkan ke Distributor atau nilai Standard dan untuk DistributorLogin dan DistributorPassword menggunakan Autentikasi SQL Server saat menyambungkan ke Distributor. Autentikasi Windows disarankan.
Tetapkan nilai Merge untuk ReplicationType.
Panggil GenerateSnapshot metode.
Contoh (RMO)
Contoh ini secara sinkron menjalankan Agen Rekam Jepret untuk menghasilkan rekam jepret awal untuk publikasi transaksional.
// 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
Contoh ini secara asinkron memulai pekerjaan agen untuk menghasilkan rekam jepret awal untuk publikasi transaksional.
// 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
Memblokir saat menerapkan rekam jepret awal
Jika Anda memiliki beberapa publikasi, yang menerbitkan data ke dalam satu database di pelanggan, saat menerapkan rekam jepret awal, Anda melihat bahwa hanya satu publikasi yang dapat menerapkan rekam jepretnya pada satu waktu.
Anda mungkin melihat sumber daya tunggu yang mirip dengan yang berikut ini saat meninjau aktivitas SQL:
APLIKASI: 18:16384:[snapshot_delivery_in_progress_Tr]:(9bcdaf92)
APLIKASI: 5:16384:[snapshot_delivery_in_progress_Er]:(3c3b7db9)
Kueri untuk perilaku penguncian dapat menampilkan sumber daya yang mirip dengan yang berikut ini:
APP 16384:[appname]:(fbe42d68) XAPP 16384:[snapshot_del]:(9bcdaf92) X
Perilaku ini secara desain. Ini terjadi karena kunci aplikasi digunakan untuk mencegah beberapa agen replikasi menerapkan rekam jepret secara bersamaan dari publikasi yang berbeda ke database pelanggan yang sama. Karena kunci aplikasi berisi nama database pelanggan, publikasi apa pun yang diterbitkan ke database pelanggan yang sama akan terpengaruh. Hasilnya adalah bahwa hanya satu rekam jepret yang dapat dimasukkan ke dalam database pelanggan pada waktu tertentu.
Kunci eksklusif digunakan dalam situasi ini untuk membantu menghindari kemungkinan agen replikasi menjadi kebuntuan satu sama lain.
Untuk mengatasi masalah ini, tentukan database pelanggan yang berbeda untuk setiap publikasi.
Konten terkait
- Membuat Publikasi
- Membuat Langganan Pull
- Membuat Langganan Pendorongan
- Tentukan Jadwal Sinkronisasi
- Menginisialisasi Langganan dengan Rekam Jepret
- Konsep Objek Manajemen Replikasi
- Praktik Terbaik Keamanan Replikasi
- Konsep Prosedur Tersimpan Sistem Replikasi
- Menggunakan sqlcmd dengan Variabel Pembuatan Skrip