Pada artikel sebelumnya, Menyiapkan dan Mengonfigurasi Replikasi SQL Server, kita telah membahas secara mendalam, konsep Replikasi SQL Server, komponennya, jenisnya, dan cara mengkonfigurasi Replikasi Transaksional SQL langkah demi langkah. Sangat disarankan untuk membaca artikel sebelumnya dan memahami konsep replikasi dan komponennya sebelum membaca artikel ini. Dalam artikel ini, kita akan melihat cara memecahkan masalah situs Replikasi SQL Server yang ada.
Ringkasan Pemecahan Masalah
Tujuan utama Replikasi SQL Server adalah menjaga sinkronisasi data di Publisher dan Subscriber. Dalam skenario bahagia, jika transaksi dilakukan dan dilakukan di database publikasi, itu akan disalin ke database distribusi kemudian disinkronkan dan diterapkan ke semua Pelanggan yang terhubung ke Penerbit itu. Jika masalah terjadi pada setiap langkah dari proses ini, perubahan Penerbit tidak akan tersedia di sisi Pelanggan. Dalam hal ini, kita perlu memecahkan masalah dan memperbaiki masalah itu sesegera mungkin sebelum berakhir dengan situs Replikasi SQL yang kedaluwarsa yang harus disinkronkan lagi dari awal atau database dengan file log transaksinya kehabisan ruang kosong, menjeda semua transaksi database .
Mengidentifikasi di langkah mana sinkronisasi replikasi gagal dan mengalokasikan pesan galat indikatif yang mengarah untuk memperbaiki masalah, adalah bagian paling menantang dari proses pemecahan masalah Replikasi SQL Server. Selain itu, memeriksa waktu sinkronisasi terakhir dan perubahan apa yang dilakukan pada/setelah waktu itu yang dapat menyebabkan kegagalan ini, juga dapat membantu memecahkan masalah kegagalan sinkronisasi replikasi.
Memahami peran agen Replikasi SQL Server akan membantu dalam mengidentifikasi di langkah mana sinkronisasi gagal. Ingatlah bahwa ada tiga agen replikasi yang umum di antara sebagian besar tipe replikasi SQL Server. Agen Snapshot bertanggung jawab untuk membuat snapshot sinkronisasi awal. Agen Pembaca Log bertanggung jawab untuk membaca perubahan dari file log transaksi database dan menyalinnya ke database distribusi dan akhirnya, Distribusi agen yang bertanggung jawab untuk menyinkronkan perubahan ke Pelanggan.
Dalam artikel ini, kami akan memanfaatkan Monitor Replikasi dan Pemantau Aktivitas Kerja windows dalam memantau status Replikasi SQL Server dan mendapatkan informasi tentang kesalahan kegagalan sinkronisasi.
Skenario Pemecahan Masalah
Cara terbaik dan langsung untuk memahami cara memecahkan masalah Replikasi SQL Server adalah dengan menyediakan skenario praktis dan menunjukkan cara memperbaiki masalah khusus ini. Mari kita mulai membahas skenario satu per satu.
Masalah Layanan Agen Server SQL
Layanan Agen Server SQL memainkan peran penting dalam proses sinkronisasi Replikasi SQL Server. Hal ini disebabkan oleh fakta bahwa setiap agen replikasi akan berjalan di bawah tugas agen SQL.
Menjadi administrator database proaktif, Anda perlu memeriksa status situs replikasi SQL setiap hari. Untuk memeriksa status situs replikasi, klik kanan pada Publikasi, di bawah node Replikasi -> Publikasi Lokal, dan pilih Luncurkan Monitor Replikasi pilihan, seperti yang ditunjukkan di bawah ini:
Dari jendela Replication Monitor, Anda dapat melihat pesan peringatan yang menunjukkan bahwa replikasi akan segera kedaluwarsa atau sudah kedaluwarsa, tanpa melihat pesan kesalahan indikatif, seperti di bawah ini:
Jika jendela Replication Monitor tidak memberi kami informasi yang berguna tentang mengapa situs replikasi segera kedaluwarsa, langkah selanjutnya adalah memeriksa Job Activity Monitor di bawah simpul agen SQL Server. Mengunjungi node SQL Server Agent, Anda akan melihat langsung bahwa SQL Server Agent Service tidak berjalan (dari lingkaran merah di sebelahnya). Jika Layanan Agen Server SQL tidak berjalan, ini berarti bahwa semua pekerjaan yang dibuat di bawah contoh tersebut tidak bekerja, termasuk pekerjaan agen replikasi. Akibatnya, situs replikasi secara keseluruhan tidak berfungsi.
Untuk memperbaiki masalah itu, kita perlu memulai layanan SQL Server Agent dari SQL Server Management Studio secara langsung atau menggunakan SQL Server Configuration Manager (disarankan), seperti yang ditunjukkan di bawah ini:
Setelah memulai layanan Agen Server SQL, periksa kembali Monitor Replikasi dan pastikan bahwa status Pelanggan Berjalan dan semua transaksi yang tertunda berhasil disinkronkan dengan Pelanggan. Anda dapat memeriksa langkah-langkah ini satu per satu, dengan memeriksa apakah catatan disalin dari bagian Penerbit ke Distributor:
Kemudian disinkronkan dari Distributor ke Subscriber dengan sukses, seperti di bawah ini:
Dan terakhir pastikan tidak ada transaksi yang tidak terdistribusi dari tab terakhir, seperti gambar di bawah ini:
Setelah itu, kita perlu memastikan bahwa pekerjaan agen replikasi aktif dan berjalan tanpa masalah. Pekerjaan Agen SQL dapat diperiksa dengan memperluas node Agen Server SQL di bawah Penjelajah Objek SSMS dan melihat monitor Aktivitas Pekerjaan, lalu memeriksa apakah Agen Pembaca Log dan agen Distributor sedang berjalan, dengan mempertimbangkan bahwa Agen Snapshot hanya akan bekerja selama proses pembuatan snapshot, seperti yang ditunjukkan di bawah ini:
Anda juga dapat meninjau riwayat tugas agen replikasi dan memeriksa alasan kegagalan sebelumnya, dengan mengeklik kanan tugas tersebut dan memilih Lihat Riwayat pilihan seperti di bawah ini:
Di mana Anda mungkin menemukan pesan kesalahan indikatif yang membantu mengatasi masalah ini di masa mendatang, seperti di bawah ini:
Untuk mengatasi masalah sebelumnya, mode startup layanan SQL Server Agent harus diubah dari Manual ke Otomatis, dengan cara ini Anda akan memastikan bahwa layanan akan dimulai secara otomatis ketika server hosting di-boot ulang.
Masalah Izin Agen Snapshot
Asumsikan bahwa saat memeriksa status Replikasi SQL Server, menggunakan Monitor Replikasi, Anda melihat bahwa ada kegagalan replikasi, dari tanda X di dalam lingkaran merah. Dan Monitor Replikasi menunjukkan bahwa kegagalan berasal dari salah satu agen replikasi, dari tanda X di dalam lingkaran merah di bagian atas tab Agen.
Untuk mengidentifikasi kegagalan replikasi itu, kita harus menelusuri tab Agen dan memeriksa agen mana yang gagal. Dari halaman Agen, Anda akan melihat bahwa Agen Snapshot adalah yang gagal. Klik dua kali pada Agen Snapshot dan tinjau pesan kesalahan di bawah ini:
Agen replikasi belum mencatat pesan kemajuan dalam 10 menit. Ini mungkin menunjukkan agen yang tidak responsif atau aktivitas sistem yang tinggi. Pastikan bahwa rekaman sedang direplikasi ke tujuan dan bahwa koneksi ke Pelanggan, Penerbit, dan Distributor masih aktif.
Sayangnya, pesan kesalahan ini bersifat umum dan hanya menunjukkan bahwa Agen Snapshot tidak berfungsi tanpa menyebutkan alasannya, sebagai berikut:
Kemudian kita perlu mencari informasi yang berguna di tempat lain, yaitu pekerjaan Snapshot Agent. Dari jendela Job Activity Monitor, di bawah node SQL Server Agent, Anda dapat melihat bahwa pekerjaan Snapshot Agent gagal. Dan dari riwayat pekerjaan itu, Anda dapat melihat bahwa itu gagal baru-baru ini, karena masalah otentikasi proxy. Dengan kata lain, kredensial untuk akun tempat Agen Snapshot dijalankan tidak benar, seperti yang ditunjukkan di bawah ini:
Untuk memperbaiki masalah kredensial Agen Snapshot, klik kanan pada Publikasi, di bawah node Replikasi -> Publikasi Lokal, dan pilih Properti pilihan. Dari jendela Properti Publikasi, jelajahi Keamanan Agen dan masukkan kembali kredensial untuk akun tempat Agen Snapshot akan dijalankan.
Setelah menyegarkan kredensial akun Agen Snapshot, mulai lagi pekerjaan Agen Snapshot, dari jendela Monitor Aktivitas Pekerjaan, dan pastikan pekerjaan tersebut berfungsi dengan baik, seperti di bawah ini:
Juga, periksa apakah Agen Snapshot berfungsi dengan baik sekarang, dan pesan kesalahan tidak muncul lagi di bawah Monitor Replikasi, seperti yang ditunjukkan di bawah ini:
Masalah Izin Folder Snapshot
Asumsikan bahwa, ketika mencoba menyinkronkan Penerbit dan Pelanggan menggunakan snapshot awal atau menyinkronkan ulang situs replikasi Snapshot menggunakan snapshot baru, proses pembuatan snapshot gagal dengan pesan kesalahan akses di bawah ini:
Pesan kesalahan ini menunjukkan bahwa, akun yang menjalankan Agen Snapshot tidak memiliki izin untuk mengakses folder snapshot yang ditentukan dalam pesan kesalahan.
Untuk memperbaiki masalah itu, kita perlu memeriksa akun yang menjalankan Agen Snapshot, dari halaman Keamanan Agen dari jendela Properti Publikasi, seperti yang ditunjukkan di bawah ini:
Kemudian telusuri folder snapshot yang ditentukan dalam pesan kesalahan dan pastikan bahwa akun Snapshot ini memiliki izin baca-tulis minimum pada folder itu, lalu jalankan kembali Snapshot Agent dan lihat bahwa masalah telah diperbaiki sekarang dan snapshot sinkronisasi berhasil dibuat, sebagai di bawah ini:
Masalah Izin Pelanggan
Asumsikan bahwa, saat memeriksa status situs Replikasi SQL Server, menggunakan Monitor Replikasi, Anda melihat bahwa ada kegagalan dengan Pelanggan, seperti yang ditunjukkan di bawah ini:
Jika Anda mengklik ikon kesalahan, Anda akan melihat bahwa telah terjadi kegagalan saat mencoba menyinkronkan transaksi dari Distributor ke Pelanggan. Dan dari pesan error tersebut, jelas bahwa Distributor tidak dapat terhubung ke instance Subscriber SQL Server karena masalah izin, seperti yang ditunjukkan di bawah ini:
Untuk memperbaiki masalah itu, kami perlu memeriksa dan menyegarkan kredensial yang digunakan untuk terhubung ke instance Pelanggan. Untuk memeriksa kredensial, klik kanan pada Langganan di bawah simpul Replikasi -> Publikasi Lokal -> nama Publikasi saat ini dan pilih opsi Properti. Dari Koneksi Pelanggan di bawah jendela Properti Pelanggan, segarkan kredensial untuk akun yang akan digunakan untuk terhubung ke instance Pelanggan, seperti yang ditunjukkan di bawah ini:
Setelah itu, periksa kembali status replikasi dari Monitor Replikasi dan Anda akan melihat bahwa masalah koneksi Pelanggan tidak lagi tersedia, dan situs replikasi berjalan normal, seperti yang ditunjukkan di bawah ini:
Pelanggan Tidak Dapat Dihubungi
Masalah kegagalan Replikasi SQL Server lainnya yang mungkin Anda hadapi dari sisi Pelanggan adalah bahwa Distributor tidak dapat terhubung ke Pelanggan, menunjukkan di bawah Distributor ke halaman Pelanggan bahwa, Distributor tidak dapat membuka koneksi dengan Pelanggan karena "Jaringan Terkait … ” kesalahan konektivitas, ditampilkan di jendela Replication Monitor di bawah ini:
Pesan kesalahan ini menunjukkan bahwa ada masalah koneksi antara instans Distributor dan instans Pelanggan. Cara pertama dan langsung untuk memeriksa masalah konektivitas ini adalah memastikan bahwa instance SQL Server Pelanggan online. Ini dapat diperiksa dari Manajer Konfigurasi SQL Server dari sisi Pelanggan. Dalam situasi kami, kami dapat melihat bahwa Layanan SQL Server di sisi Pelanggan dihentikan. Untuk memperbaiki masalah itu, mulai Layanan SQL Server dan periksa dari Monitor Replikasi bahwa situs replikasi disinkronkan lagi, seperti yang ditunjukkan di bawah ini. Untuk masalah konektivitas SQL tingkat lanjut, periksa dokumen Pemecahan Masalah Konektivitas MS:
Masalah Izin Basis Data Pelanggan
Asumsikan bahwa Anda memeriksa status sinkronisasi Replikasi SQL Server, menggunakan Monitor Replikasi, dan ditemukan bahwa replikasi gagal saat mencoba mereplikasi perubahan dari Distributor ke Pelanggan, Mengklik kesalahan pelanggan, Anda akan melihat bahwa Distributor dapat menjangkau pelanggan dan menghubungkannya, tetapi tidak dapat terhubung ke database Langganan karena kurangnya masalah izin, seperti yang ditunjukkan di bawah ini:
Untuk memperbaiki masalah itu, sambungkan ke Pelanggan dan pastikan bahwa akun yang digunakan untuk terhubung ke basis data Pelanggan adalah anggota peran tetap basis data db_Owner, seperti yang ditunjukkan di bawah ini:
Setelah itu, periksa kembali Replication Monitor dan pastikan Distributor dapat menjangkau database langganan dan mereplikasi perubahan, seperti di bawah ini:
Masalah Perbedaan Data
Asumsikan bahwa salah satu tim pengembangan database mengklaim bahwa ada beberapa perubahan yang dilakukan pada tabel Pergeseran di Publisher (SQL1) tidak tercermin dalam laporan harian yang dijalankan pada instance Pelanggan (SQL2), dan dia memberikan snapshot di bawah ini yang menunjukkan bahwa perubahan tidak direplikasi:
Langkah pertama dalam memeriksa masalah sinkronisasi replikasi adalah membuka Monitor Replikasi dan temukan di langkah mana yang gagal. Dari Monitor Replikasi, Anda dapat melihat bahwa Agen Pembaca Log gagal, karena perubahan tidak direplikasi dari Distributor ke Pelanggan, tetapi tidak ada pesan jelas yang dikembalikan dari agen tersebut, seperti yang ditunjukkan di bawah ini:
Karena kami tidak dapat menemukan pesan kesalahan yang berarti dari Monitor Replikasi, kami akan memeriksa riwayat pekerjaan Agen Pembaca Log, menggunakan Monitor Aktivitas Pekerjaan, yang menunjukkan bahwa, kredensial untuk akun yang menjalankan Agen Pembaca Log, tidak benar , seperti yang ditunjukkan di bawah ini:
Untuk memperbaiki masalah kredensial Agen Pembaca Log, jelajahi halaman Keamanan Agen dari jendela Properti Publikasi, dan segarkan kredensial Agen Pembaca Log dengan kredensial yang valid, seperti di bawah ini:
Memeriksa Monitor Replikasi lagi, Anda akan melihat bahwa perubahan berhasil direplikasi dan data diperbarui dengan perubahan shift baru, seperti yang ditunjukkan di bawah ini:
Baris Tidak Ditemukan di Pelanggan
Mari kita lihat masalah ini dari sisi lain. Katakanlah, ada perubahan yang dilakukan pada tabel shift seperti yang ditunjukkan di bawah ini:
Tapi perubahan ini tidak direplikasi ke pelanggan dan situs replikasi SQL Server secara keseluruhan gagal. Dari Monitor Replikasi, Anda dapat melihat bahwa ia gagal saat mencoba melakukan perubahan dari Distributor ke Pelanggan, dan gagal karena fakta bahwa ia tidak dapat memperbarui catatan tertentu dengan ID sama dengan 3, karena catatan ini tidak tersedia di tabel database Pelanggan, seperti yang ditunjukkan di bawah ini:
Memeriksa catatan itu di sisi Pelanggan (SQL2), Anda akan melihat bahwa catatan itu tidak tersedia, seperti di bawah ini:
Untuk mengatasi masalah ini, kita perlu memasukkan catatan itu lagi ke tabel database Pelanggan dan membiarkan Distributor mencoba memperbaruinya lagi, memperbaiki masalah kegagalan sinkronisasi replikasi, seperti yang ditunjukkan di bawah ini:
SQL Server memberi kami opsi untuk membiarkan situs replikasi terus bekerja meskipun masalah inkonsistensi data ditemukan, di mana Anda dapat memperbaiki masalah inkonsistensi ini nanti secara manual. Untuk melakukannya, dari Monitor Replikasi, klik kanan pada Pelanggan dan pilih Profil Agen pilihan, seperti yang ditunjukkan di bawah ini:
Dari jendela yang ditampilkan, Anda dapat memperbarui profil Agen Pembaca Log dan mengizinkannya untuk terus mereplikasi perubahan data jika ada masalah inkonsistensi data, seperti yang ditunjukkan di bawah ini:
Masalah Langganan yang Tidak Diinisialisasi
Jika situs replikasi dibiarkan tanpa pemantauan untuk waktu yang lama, dan terjadi kegagalan tanpa perbaikan selama lebih dari tiga hari, situs replikasi akan kedaluwarsa dan Langganan akan ditandai sebagai belum diinisialisasi, menunggu untuk diinisialisasi ulang lagi menggunakan snapshot baru . Skenario yang sama dapat dihadapi saat membuat Langganan baru tanpa menginisialisasinya, seperti yang ditunjukkan di bawah ini:
Untuk memperbaiki masalah itu, kita harus menginisialisasi ulang Langganan itu, dengan mengklik kanan Langganan di bawah simpul Replikasi -> Publikasi Lokal dan perluas Publikasi, lalu pilih opsi Inisialisasi Ulang dan tandai Langganan ini untuk Inisialisasi dan siapkan untuk menerima yang baru snapshot, seperti yang ditunjukkan di bawah ini:
Jika status Langganan tetap Tidak Diinisialisasi setelah menginisialisasi ulang, periksa pekerjaan Snapshot Agent, menggunakan jendela Job Activity Monitor, dan lihat mengapa gagal. Dari riwayat pekerjaan Agen Snapshot, Anda akan melihat bahwa pekerjaan gagal karena masalah penentuan pemilik pekerjaan agen tersebut, seperti yang ditunjukkan di bawah ini:
Untuk mengatasi masalah ini, buka pekerjaan Agen Snapshot dan ubah pemilik pekerjaan menjadi SA atau pengguna administrator yang valid, dan pekerjaan akan berhasil dijalankan, seperti di bawah ini:
Sekarang Anda akan melihat bahwa status Berlangganan berubah menjadi Berjalan, memberikan bahwa menunggu snapshot awal untuk memulai proses sinkronisasi, seperti yang ditunjukkan di bawah ini:
Untuk menghasilkan snapshot baru, klik kanan pada Publikasi, di bawah Replikasi node-> Publikasi Lokal, dan pilih Lihat Status Agen Snapshot pilihan.
Dari jendela yang terbuka, klik tombol Start untuk memulai proses pembuatan snapshot. Ketika snapshot yang berisi semua artikel Publisher berhasil dibuat, buka kembali Replication Monitor dan periksa status Langganan, di mana Anda akan melihat bahwa snapshot diterapkan ke Subscriber dan disinkronkan dengan Publisher, seperti yang ditunjukkan di bawah ini:
Masalah Pemilik Database Penayang
Asumsikan juga bahwa, saat memeriksa status situs replikasi SQL Server, menggunakan Monitor replikasi, situs replikasi gagal dan kegagalan terdeteksi di agen pembaca log. Memeriksa pesan kesalahan yang dikembalikan dari agen itu, ditemukan bahwa ada masalah dalam menentukan pemilik database Publikasi saat ini, seperti yang ditunjukkan di bawah ini:
Untuk memperbaiki masalah itu, kita perlu memperbarui pemilik database publikasi saat ini, dengan menggantinya dengan pengguna database yang valid, menggunakan SP_changedbowner prosedur tersimpan sistem, atau hanya dari jendela properti database. Setelah itu, jalankan kembali job Log Reader Agent, menggunakan jendela Job Activity Monitor, lalu validasi jika masalah agen sudah tidak ada lagi, menggunakan Replication Monitor, seperti gambar di bawah ini:
Kesimpulan
Dalam artikel ini, kami menunjukkan berbagai masalah yang mungkin Anda hadapi saat menggunakan fitur Replikasi SQL Server untuk menyalin data di antara situs yang berbeda, dan cara memperbaiki masalah ini.
Sangat disarankan untuk selalu memperbarui SQL Server Engine, dengan SP dan CU terbaru, sehingga semua bug yang terkait dengan fitur Replikasi SQL Server akan diperbaiki secara otomatis. Terakhir, sebagai administrator database SQL Server proaktif, awasi situs replikasi Anda untuk memperbaiki masalah apa pun dari awal sebelum menjadi lebih besar dan lebih sulit untuk diperbaiki.