Menggunakan replikasi transaksional SQL 2008 R2 dengan pelanggan tarik, ketika kita menambahkan artikel, saya ingin menghindari harus membuat seluruh snapshot (db ~ 80 GB, jadi ini membutuhkan waktu berjam-jam).
Dari artikel ini , saya telah melihat bagaimana melakukan ini dengan snapshot parsial dengan menonaktifkan direct_sync, tetapi itu tidak berhasil bagi kami.
Idealnya saya ingin menjalankan ini sebagai bagian dari skrip db kami untuk membuat tabel, jadi jika kita ingin itu direplikasi, kita lakukan:
Create Table ...
sp_addArticle ...
sp_PushThisToOurSubscribersNow
sumber
sumber
Saya memiliki pertanyaan yang sama, dan meskipun saya telah menjadi DBA untuk sementara waktu, saya belum benar-benar berurusan dengan replikasi yang cukup mendalam sehingga benar-benar nyaman dengan itu, jadi saya pikir sumber daya dan panduan berikut sangat membantu:
Blog ini , yang memberikan garis besar proses yang bagus. Ini juga mengingatkan kita bahwa, jika Anda memiliki publikasi besar yang sudah ada, dan opsi itu diatur ke "direct_sync", itu akan menyebabkan snapshot yang sama sekali baru disiapkan setiap kali Anda menambah atau mengubah artikel. Jadi dia punya tip praktis untuk mengubah opsi itu, menggunakan
sp_changePublication @publication='MyPub', @property='immediate_sync', @value='false';
Posting blog MSDN di "repltalk" (terdengar seperti sumber yang bagus secara umum!) - bukan "langsung secara langsung" terkait tetapi masih membantu
Pertanyaan ini, di mana @ Brandon-Williams menunjukkan bahwa, jika ini merupakan langganan Tarik , Anda juga harus menyegarkannya, menggunakan
sp_refreshSubscriptions @publication = 'MyPub'
Monitor Replikasi SSMS - cara mudah untuk menghentikan & memulai agen (snapshot, log-reader) saat mengikuti panduan ini.
Berikut adalah langkah-langkah aktual yang saya ikuti, yang bekerja dengan baik & mendapat persetujuan dari DBA pembimbing saya:
sp_changePublication
-sinkronkan , menggunakan - ya, seperti yang ditunjukkan oleh @cody_konior, ini kurang terdokumentasi, tetapi itu berfungsi dengan baik dalam kasus saya. YMMVsp_addArticle
sp_articleColumn
(publikasi & artikel yang ditentukan, JANGAN tentukan kolom -> menyiratkan SEMUA kolom)sp_refreshSubscriptions
untuk publikasi itu untuk menyegarkan pull-erDan sementara ya, Anda bisa melakukan sebagian besar perubahan dengan GUI SSMS, saya merasa sangat membantu untuk skrip semuanya sehingga bisa A) di bawah kontrol sumber (perubahan-kontrol), dan B) digunakan berulang kali atau ke beberapa contoh . Sayangnya saya tidak menghabiskan waktu untuk menuliskan / menghentikan Agen, tapi itu tidak terlalu sulit mengingat bahwa mereka hanya SQL Agent Jobs. Anda hanya perlu melakukan keseluruhan "temukan JobID menggunakan trik Nama-Pekerjaan" (permintaan
sysjobs
- sungguh, MS?) ...Harapan yang membantu pembaca masa depan!
sumber
Sebagaimana tercantum dalam Menambahkan Artikel ke dan Menjatuhkan Artikel dari Publikasi yang Ada , Anda harus * membuat snapshot baru untuk publikasi.
Untuk menghindari pembuatan snapshot untuk semua artikel saat menambahkan artikel baru, properti publikasi
immediate_sync
harus diatur ke 0. Hubungisp_addarticle
, lalusp_addsubscription
. Jika langganan ditarik, Anda juga harus meneleponsp_refreshsubscriptions
. Kemudian buat snapshot dan hanya snapshot untuk artikel yang baru ditambahkan yang akan dibuat.* Ini adalah pendekatan yang direkomendasikan dalam SQL Server Books Online. Masalah dengan pendekatan Anda adalah bahwa ia rentan terhadap kesalahan.
sumber
Sunting utama Ini adalah penulisan ulang lengkap dari jawaban ini (menerima kritik yang valid bahwa versi sebelumnya rawan kesalahan dan akan menyebabkan masalah)
Juga memposting demo tentang cara menerapkan ini ke: Youtube - Replikasi SQL Server: Cara menambahkan artikel tanpa mengambil snapshot .
PENTING: Ini BUKAN pendekatan yang direkomendasikan dari Microsoft, jadi Anda akan melakukannya sendiri untuk membuatnya berfungsi, JANGAN mendaftar langsung ke lingkungan produksi Anda tanpa pengujian terisolasi yang signifikan dan buat diri Anda nyaman dengan langkah-langkahnya!
Langkah-langkah untuk diikuti:
Untuk memverifikasi:
CONTOH Proses
A) Buat sendiri tabel di penerbit Anda:
B) Buat sendiri pekerjaan / proc / script untuk melakukan beberapa menyisipkan / memperbarui / menghapus pada [TableNotUsingSnap] (Anda kemudian dapat menggunakan ini untuk memvalidasi bagaimana pelanggan disinkronkan dengan benar menggunakan metode ini.
Pra-langkah:
1. Buat tabel Anda di pelanggan
2. Buat prosedur replikasi tersimpan Anda (perbarui / masukkan / hapus) - pada Pelanggan
Anda dapat membuat procs repl:
Perubahan yang perlu Anda terapkan:
IF NOT EXISTS (SELECT 'row already exists' FROM [Schema].[TableName] dest WITH (NOLOCK) WHERE dest.Id = @c1)
untuk tidak memasukkan jika sudah adaIF @@rowcount = 0 ... exec sp_MSreplraiserror ...
untuk mengabaikan pembaruan yang tidak diterapkan (karena catatan mungkin telah dihapus pada penerbit sebelum Anda menyinkronkan data)IF @@rowcount = 0 ... exec sp_MSreplraiserror ...
untuk mengabaikan penghapusan yang tidak diterapkan (karena catatan mungkin telah dihapus pada penerbit sebelum Anda menyinkronkan data)sp_MSins_dboTableNotUsingSnap:
sp_MSupd_dboTableNotUsingSnap:
sp_MSdel_dboTableNotUsingSnap:
LANGKAH-LANGKAH PENYIMPANAN
3. Hentikan agen distribusi - Pada Distributor (Dorong) atau Pelanggan (Tarik)
4. Sekarang tambahkan artikel ke publikasi - Di Penerbit
Parameter kunci:
sp_addarticle
-@pre_creation_cmd = N'none'
Digunakan untuk memberitahu agen distribusi agar tidak menjatuhkan dan membuat objek sendirisp_addsubscription
-@sync_type = N'none'
Digunakan untuk memberi tahu Distributor bahwa itu tidak perlu membuat snapshot baru, itu hanya dapat mengantri perintah IUDsp_addarticle:
5. Sinkronkan data Anda di seluruh
Sekarang Anda perlu menyalin data Anda ke pelanggan Anda, Anda bisa:
Metode tepat yang Anda gunakan saya serahkan kepada pembaca, itu juga akan tergantung pada berapa lama Anda bersedia untuk menghentikan Agen Distribusi Anda.
EXTRA: Sebagai langkah tambahan dalam pengujian Anda, berikut adalah tempat yang bagus untuk menjalankan skrip Anda (dari Langkah (B)) untuk membuat tindakan IUD pada [TableNotUsingSnap] sehingga Anda bisa mendapatkan kepercayaan dalam metode ini.
6. Mulai ulang agen distribusi - Pada Distributor (Dorong) atau Pelanggan (Tarik)
sumber