Saya perhatikan bahwa ketika Anda mengatur replikasi transaksional, SQL Server akan mengatur manajemen rentang identitas ke manual. Apakah ini berarti bahwa dalam database berlangganan saya, ketika saya mencoba untuk memasukkan catatan baru ke dalam tabel yang PK-nya adalah kolom identitas, itu akan memberi saya kesalahan dan mengatakan bahwa ia mencoba memasukkan PK "1", "2 "," 3 ", dll. Ini karena nilai identitas saat ini untuk semua kolom identitas pada pelanggan akan diatur ulang ke nilai awal (biasanya 1) alih-alih tetap seperti pada penerbit.
Saya mengerti mengapa SQL Server melakukan ini - Anda seharusnya membiarkan tabel pelanggan sebagai read-only. Namun, skenario saya sedikit tidak lazim - saya memperbarui pelanggan saya dari waktu ke waktu melalui replikasi, membuat cadangan langsung dari DB itu, maka saya ingin melakukan beberapa pembaruan kepada pelanggan bahwa TIDAK AKAN didorong kembali ke penerbit, lalu ketika saya pergi untuk memperbarui pelanggan lagi, saya mengembalikan databasenya dari cadangan sebelumnya dan menarik pembaruan terbaru. Karena saya ingin melakukan pembaruan untuk pelanggan di antara pembaruan ini ('sementara delta' jika Anda mau), saya perlu kolom identitas untuk bekerja dan tidak mengatur ulang ke 1 ketika direplikasi.
Saya mencoba mengaktifkan manajemen rentang identitas otomatis saat menyiapkan publikasi saya, tetapi itu hanya memberi saya kesalahan berikut ketika saya mencoba menambahkan tabel ke publikasi:
Msg 21231, Level 16, Negara Bagian 1, Prosedur sp_MSrepl_addarticle, Baris 2243
Dukungan rentang identitas otomatis hanya berguna untuk publikasi yang memperbolehkan memperbarui pelanggan.
Apakah ada cara saya bisa mengatasi masalah ini? Saya memang ingin menyajikan replikasi ini ke SQL Server seolah-olah hanya-baca di akhir pelanggan karena saya tidak berencana membuat pembaruan yang akan didorong kembali ke penerbit , tetapi saya ingin membuat pembaruan sementara yang akan dihapus sebelum replikasi berikutnya.
Saya juga telah mempertimbangkan bahwa replikasi snapshot mungkin merupakan metode yang lebih tepat daripada replikasi transaksional untuk pola penggunaan saya, tetapi masalahnya adalah replikasi snapshot memerlukan pengiriman seluruh DB setiap pembaruan tunggal; karena saya berencana mengambil cadangan langsung DB setelah replikasi terbaru, saya tidak perlu melakukan seluruh transfer setiap waktu; hanya perubahan sejak terakhir kali.
Is there any way I can get round this problem?
Anda harus mengatur kolom identitas sebagai BUKAN UNTUK REPLIKASI menggunakan sys.sp_identitycolumnforreplication untuk sql server 2005 dan lebih tinggi. Anda bahkan tidak perlu mengulang artikel Anda ketika Anda mengubah kolom identitas bukan untuk replikasi. Jangan lakukan itu menggunakan GUI.