Pemecah masalah: Menemukan kesalahan dengan replikasi transaksional SQL Server

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Managed Instance

Pemecahan masalah kesalahan replikasi dapat membuat frustrasi tanpa pemahaman dasar tentang cara kerja replikasi transaksional. Langkah pertama dalam membuat publikasi adalah meminta Agen Rekam Jepret membuat rekam jepret dan menyimpannya ke folder rekam jepret. Selanjutnya, Agen Distribusi menerapkan rekam jepret ke pelanggan.

Proses ini membuat publikasi dan menempatkannya dalam status sinkronisasi . Sinkronisasi berfungsi dalam tiga fase:

  1. Transaksi terjadi pada objek yang direplikasi, dan ditandai "untuk replikasi" dalam log transaksi.
  2. Agen Pembaca Log memindai melalui log transaksi dan mencari transaksi yang ditandai "untuk replikasi." Transaksi ini kemudian disimpan ke database distribusi.
  3. Agen Distribusi memindai melalui database distribusi dengan menggunakan utas pembaca. Kemudian, dengan menggunakan utas penulis, agen ini terhubung ke pelanggan untuk menerapkan perubahan tersebut kepada pelanggan.

Kesalahan dapat terjadi dalam langkah apa pun dari proses ini. Menemukan kesalahan tersebut dapat menjadi aspek yang paling menantang dari pemecahan masalah sinkronisasi. Untungnya, penggunaan Replication Monitor memudahkan proses ini.

Catatan

  • Tujuan dari panduan pemecahan masalah ini adalah untuk mengajarkan metodologi pemecahan masalah. Ini dirancang untuk tidak menyelesaikan kesalahan spesifik Anda, tetapi untuk memberikan panduan umum dalam menemukan kesalahan dengan replikasi. Beberapa contoh spesifik disediakan, tetapi resolusinya dapat bervariasi tergantung pada lingkungan.
  • Kesalahan yang disediakan panduan ini sebagai contoh didasarkan pada tutorial Mengonfigurasi replikasi transaksional .

Metodologi pemecahan masalah

Pertanyaan untuk ditanyakan

  1. Di mana dalam proses sinkronisasi replikasi gagal?
  2. Agen mana yang mengalami kesalahan?
  3. Kapan terakhir kali replikasi berhasil bekerja? Apakah ada yang berubah sejak saat itu?

Langkah-langkah yang harus diambil

  1. Gunakan Monitor Replikasi untuk mengidentifikasi pada titik mana replikasi mengalami kesalahan (agen mana?):
    • Jika kesalahan terjadi di bagian Penerbit ke Distributor , masalahnya adalah dengan Agen Pembaca Log.
    • Jika kesalahan terjadi di bagian Distributor ke Pelanggan , masalahnya ada pada Agen Distribusi.
  2. Lihat riwayat pekerjaan agen tersebut di Monitor Aktivitas Pekerjaan untuk mengidentifikasi detail kesalahan. Jika riwayat pekerjaan tidak menampilkan detail yang cukup, Anda dapat mengaktifkan pengelogan verbose pada agen tertentu tersebut.
  3. Cobalah untuk menentukan solusi untuk kesalahan tersebut.

Menemukan kesalahan dengan Agen Rekam Jepret

Agen Rekam Jepret menghasilkan rekam jepret dan menulisnya ke folder rekam jepret yang ditentukan.

  1. Lihat status Agen Rekam Jepret Anda:

    a. Di Object Explorer, perluas simpul Publikasi Lokal di bawah Replikasi.

    b. Klik kanan publikasi Anda AdvWorksProductTrans>Lihat Status Agen Rekam Jepret.

  2. Jika kesalahan dilaporkan dalam status Agen Rekam Jepret, Anda dapat menemukan detail selengkapnya dalam riwayat pekerjaan Agen Rekam Jepret:

    a. Perluas SQL Server Agent di Object Explorer dan buka Monitor Aktivitas Pekerjaan.

    b. Urutkan menurut Kategori dan identifikasi Agen Rekam Jepret menurut kategori REPL-Snapshot.

    c. Klik kanan Agen Rekam Jepret lalu pilih Tampilkan Riwayat.

    Selections for opening the Snapshot Agent history

  3. Di riwayat Agen Rekam Jepret, pilih entri log yang relevan. Ini biasanya satu atau dua baris sebelum entri yang melaporkan kesalahan. (X merah menunjukkan kesalahan.) Tinjau teks pesan dalam kotak di bawah log:

    Snapshot Agent error for denied access

    The replication agent had encountered an exception.
    Exception Message: Access to path '\\node1\repldata.....' is denied.
    

Jika izin Windows Anda tidak dikonfigurasi dengan benar untuk folder rekam jepret, Anda akan melihat kesalahan "akses ditolak" untuk Agen Rekam Jepret. Anda harus memverifikasi izin ke folder tempat rekam jepret Anda disimpan, dan memastikan bahwa akun yang digunakan untuk menjalankan Agen Rekam Jepret memiliki izin untuk mengakses berbagi.

Menemukan kesalahan dengan Agen Pembaca Log

Agen Pembaca Log terhubung ke database penerbit Anda dan memindai log transaksi untuk setiap transaksi yang ditandai "untuk replikasi." Kemudian menambahkan transaksi tersebut ke database distribusi.

  1. Sambungkan ke penerbit di SQL Server Management Studio. Perluas simpul server, klik kanan folder Replikasi , lalu pilih Luncurkan Monitor Replikasi:

    Monitor Replikasi terbuka: Replication Monitor

  2. X merah menunjukkan bahwa publikasi tidak disinkronkan. Perluas Penerbit Saya di sisi kiri, lalu perluas server penerbit yang relevan.

  3. Pilih publikasi AdvWorksProductTrans di sebelah kiri, lalu cari X merah di salah satu tab untuk mengidentifikasi di mana masalahnya berada. Dalam hal ini, X merah ada di tab Agen , sehingga salah satu agen mengalami kesalahan:

    Red X on the

  4. Pilih tab Agen untuk mengidentifikasi agen mana yang mengalami kesalahan:

    Red X on the failing Log Reader Agent

  5. Tampilan ini menunjukkan kepada Anda dua agen, Agen Rekam Jepret dan Agen Pembaca Log. Yang mengalami kesalahan memiliki X merah. Dalam hal ini, ini adalah Agen Pembaca Log.

    Klik dua kali baris yang melaporkan kesalahan untuk membuka riwayat agen untuk Agen Pembaca Log. Riwayat ini menyediakan informasi selengkapnya tentang kesalahan:

    Error details for the Log Reader Agent

    Status: 0, code: 20011, text: 'The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.'.
    The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.
    Status: 0, code: 15517, text: 'Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.'.
    Status: 0, code: 22037, text: 'The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.'.        
    
  6. Kesalahan biasanya terjadi ketika pemilik database penerbit tidak diatur dengan benar. Ini bisa terjadi ketika database dipulihkan. Untuk memverifikasi ini:

    a. Perluas Database di Object Explorer.

    b. Klik kanan Properti AdventureWorks2012>.

    c. Verifikasi bahwa pemilik ada di bawah halaman File . Jika kotak ini kosong, ini adalah kemungkinan penyebab masalah Anda.

  7. Jika pemilik kosong di halaman File , buka jendela Kueri Baru dalam konteks database AdventureWorks2012. Jalankan kode T-SQL berikut:

    -- set the owner of the database to 'sa' or a specific user account, without the brackets. 
    EXECUTE sp_changedbowner '<useraccount>'
    -- example for sa: exec sp_changedbowner 'sa'
    -- example for user account: exec sp_changedbowner 'sqlrepro\administrator' 
    
  8. Anda mungkin perlu memulai ulang Agen Pembaca Log:

    a. Perluas simpul SQL Server Agent di Object Explorer dan buka Monitor Aktivitas Pekerjaan.

    b. Urutkan menurut Kategori dan identifikasi Agen Pembaca Log menurut kategori REPL-LogReader .

    c. Klik kanan pekerjaan Agen Pembaca Log dan pilih Mulai Pekerjaan di Langkah.

    Selections to restart the Log Reader Agent

  9. Validasi bahwa publikasi Anda sekarang disinkronkan dengan membuka Monitor Replikasi lagi. Jika belum terbuka, Anda dapat menemukannya dengan mengklik kanan Replikasi di Object Explorer.

  10. Pilih publikasi AdvWorksProductTrans , pilih tab Agen , dan klik dua kali Agen Pembaca Log untuk membuka riwayat agen. Anda sekarang akan melihat bahwa Agen Pembaca Log sedang berjalan dan mereplikasi perintah atau memiliki "tidak ada transaksi yang direplikasi":

    Log Reader Agent running with no replicated transactions

Menemukan kesalahan dengan Agen Distribusi

Agen Distribusi menemukan data dalam database distribusi lalu menerapkannya ke pelanggan.

  1. Sambungkan ke penerbit di SQL Server Management Studio. Perluas simpul server, klik kanan folder Replikasi , lalu pilih Luncurkan Monitor Replikasi.

  2. Di Monitor Replikasi, pilih publikasiAdvWorksProductTrans , dan pilih tab Semua Langganan . Klik kanan langganan dan pilih Tampilkan Detail:

  3. Kotak dialog Distributor ke Riwayat Pelanggan terbuka dan mengklarifikasi kesalahan apa yang dialami agen:

    Error details for the Distribution Agent

    Error messages:
    Agent 'NODE1\SQL2016-AdventureWorks2012-AdvWorksProductTrans-NODE2\SQL2016-7' is retrying after an error. 89 retries attempted. See agent job history in the Jobs folder for more details.
    
  4. Kesalahan menunjukkan bahwa Agen Distribusi sedang mencoba kembali. Untuk menemukan informasi selengkapnya, periksa riwayat pekerjaan untuk Agen Distribusi:

    a. Perluas SQL Server Agent di Object Explorer >Job Activity Monitor.

    b. Urutkan pekerjaan menurut Kategori.

    c. Identifikasi Agen Distribusi berdasarkan kategori REPL-Distribution. Klik kanan agen dan pilih Tampilkan Riwayat.

    Selections for viewing the Distribution Agent history

  5. Pilih salah satu entri kesalahan dan lihat teks kesalahan di bagian bawah jendela:

    Error text that indicates a wrong password for the distribution agent

    Message:
    Unable to start execution of step 2 (reason: Error authenticating proxy NODE1\repl_distribution, system error: The user name or password is incorrect.)
    
  6. Kesalahan ini menunjukkan bahwa kata sandi yang digunakan Agen Distribusi salah. Untuk mengatasinya:

    a. Perluas simpul Replikasi di Object Explorer.

    b. Klik kanan Properti langganan>.

    c. Pilih elipsis (...) di samping Akun Proses Agen dan ubah kata sandi.

    Selections for modifying the password for the Distribution Agent

  7. Centang Monitor Replikasi lagi, dengan mengklik kanan Replikasi di Object Explorer. X merah di bawah Semua Langganan menunjukkan bahwa Agen Distribusi masih mengalami kesalahan.

    Buka riwayat Distribusi ke Pelanggan dengan mengklik kanan langganan diDetail TampilanMonitor> Replikasi. Di sini, kesalahannya sekarang berbeda:

    Error that indicates the Distribution Agent can't connect

    Connecting to Subscriber 'NODE2\SQL2016'        
    Agent message code 20084. The process could not connect to Subscriber 'NODE2\SQL2016'.
    Number:  18456
    Message: Login failed for user 'NODE2\repl_distribution'.
    
  8. Kesalahan ini menunjukkan bahwa Agen Distribusi tidak dapat tersambung ke pelanggan, karena login gagal untuk pengguna NODE2\repl_distribution. Untuk menyelidiki lebih lanjut, sambungkan ke pelanggan dan buka log kesalahan SQL Server saat ini di bawah simpul Manajemen di Object Explorer:

    Error that indicates the login failed for the subscriber

    Jika Anda melihat kesalahan ini, login hilang pada pelanggan. Untuk mengatasi kesalahan ini, lihat Izin untuk replikasi.

  9. Setelah kesalahan masuk diselesaikan, periksa Lagi Monitor Replikasi. Jika semua masalah telah diatasi, Anda akan melihat panah hijau di samping Nama Publikasi dan status Berjalan di bawah Semua Langganan.

    Klik kanan langganan untuk membuka riwayat Distributor Kepada Pelanggan sekali lagi untuk memverifikasi keberhasilan. Jika ini pertama kalinya Anda menjalankan Agen Distribusi, Anda akan melihat bahwa rekam jepret telah disalin secara massal ke pelanggan:

    Distribution Agent with a

Aktifkan pengelogan verbose pada agen apa pun

Anda dapat menggunakan pengelogan verbose untuk melihat informasi lebih rinci tentang kesalahan yang terjadi dengan agen apa pun dalam topologi replikasi. Langkah-langkahnya sama untuk setiap agen. Pastikan Anda memilih agen yang benar di Monitor Aktivitas Pekerjaan.

Catatan

Agen dapat berada di penerbit atau pelanggan, tergantung pada apakah itu langganan tarik atau dorong. Jika Anda tidak dapat menemukan agen yang Anda cari di server yang Anda lihat, coba periksa server lain.

  1. Tentukan di mana Anda ingin pengelogan verbose disimpan, dan pastikan bahwa folder ada. Contoh ini menggunakan c:\temp.

  2. Perluas simpul SQL Server Agent di Object Explorer dan buka Monitor Aktivitas Pekerjaan.

  3. Urutkan menurut Kategori dan identifikasi agen yang menarik. Contoh ini menggunakan Agen Pembaca Log. Klik kanan agen Properti yang menarik>.

    Selections for opening agent properties

  4. Pilih halaman Langkah-langkah , lalu sorot langkah Jalankan agen . Pilih Edit.

    Selections for editing the

  5. Dalam kotak Perintah , mulai baris baru, masukkan teks berikut, dan pilih OK:

    -Output C:\Temp\OUTPUTFILE.txt -Outputverboselevel 3
    

    Anda dapat memodifikasi lokasi dan tingkat verbositas sesuai dengan preferensi Anda.

    Verbose output in the properties for the job step

    Catatan

    Hal-hal ini dapat menyebabkan agen Anda gagal, atau file output hilang, saat Anda menambahkan parameter output verbose:

    • Ada masalah pemformatan di mana tanda hubung menjadi tanda hubung.
    • Lokasi tidak ada di disk, atau akun yang menjalankan agen tidak memiliki izin untuk menulis ke lokasi yang ditentukan.
    • Ada ruang yang hilang antara parameter terakhir dan -Output parameter .
    • Agen yang berbeda mendukung berbagai tingkat verbositas. Jika Anda mengaktifkan pengelogan verbose tetapi agen Anda gagal memulai, coba turunkan tingkat verbositas yang ditentukan sebesar 1.
  6. Mulai ulang Agen Pembaca Log dengan mengklik kanan agen >Hentikan Pekerjaan di Langkah. Refresh dengan memilih ikon Refresh dari toolbar. Klik kanan agen >Mulai Pekerjaan di Langkah.

  7. Tinjau output pada disk.

    Output text file

  8. Untuk menonaktifkan pengelogan verbose, ikuti langkah-langkah sebelumnya yang sama untuk menghapus seluruh -Output baris yang Anda tambahkan sebelumnya.

Untuk informasi selengkapnya, lihat Mengaktifkan pengelogan verbose untuk agen replikasi.

Lihat juga


Gambaran umum replikasi transaksional
Tutorial replikasi
Blog ReplTalk

Dapatkan bantuan