Pengambilan data perubahan dan fitur lainnya

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Artikel ini menjelaskan bagaimana fitur berikut berinteraksi dengan mengubah pengambilan data untuk SQL Server dan Azure SQL Managed Instance. Untuk Azure SQL Database, lihat CDC dengan Azure SQL Database.

Pelacakan perubahan

Mengubah penangkapan data dan pelacakan perubahan dapat diaktifkan pada database yang sama. Tidak diperlukan pertimbangan khusus. Untuk informasi selengkapnya, lihat Bekerja dengan Pelacakan Perubahan.

Pencerminan Database

Database yang diaktifkan untuk mengubah pengambilan data dapat dicerminkan. Untuk memastikan bahwa penangkapan dan pembersihan terjadi secara otomatis setelah failover, ikuti langkah-langkah berikut:

  1. Pastikan bahwa SQL Server Agent berjalan pada instans server utama baru.

  2. Buat pekerjaan penangkapan dan pekerjaan pembersihan pada database utama baru (database cermin sebelumnya). Untuk membuat pekerjaan, gunakan prosedur tersimpan sp_cdc_add_job .

Untuk melihat konfigurasi pekerjaan pembersihan atau pengambilan saat ini, gunakan prosedur tersimpan sys.sp_cdc_help_jobs pada instans server utama baru. Untuk database tertentu, pekerjaan pengambilan diberi nama cdc.database_name_capture, dan pekerjaan pembersihan diberi nama cdc.database_name_cleanup, di mana database_name adalah nama database.

Untuk mengubah konfigurasi pekerjaan, gunakan prosedur tersimpan sys.sp_cdc_change_job .

Untuk informasi tentang pencerminan database, lihat Pencerminan Database (SQL Server).

Replikasi Transaksional

Mengubah penangkapan data dan replikasi transaksional dapat berdampingan dalam database yang sama, tetapi populasi tabel perubahan ditangani secara berbeda ketika kedua fitur diaktifkan. Ubah penangkapan data dan replikasi transaksional selalu gunakan prosedur yang sama, sp_replcmds, untuk membaca perubahan dari log transaksi. Saat mengubah tangkapan data diaktifkan sendiri, pekerjaan SQL Server Agent memanggil sp_replcmds. Ketika kedua fitur diaktifkan pada database yang sama, Agen Pembaca Log memanggil sp_replcmds. Agen ini mengisi tabel perubahan dan tabel database distribusi. Untuk informasi selengkapnya, lihat Agen Pembaca Log Replikasi.

Pertimbangkan skenario di mana pengambilan data perubahan diaktifkan pada AdventureWorks2022 database, dan dua tabel diaktifkan untuk diambil. Untuk mengisi tabel perubahan, pekerjaan pengambilan memanggil sp_replcmds. Database diaktifkan untuk replikasi transaksional, dan publikasi dibuat. Sekarang, Agen Pembaca Log dibuat untuk database dan pekerjaan pengambilan dihapus. Agen Pembaca Log terus memindai log dari nomor urutan log terakhir yang diterapkan pada tabel perubahan. Ini memastikan konsistensi data dalam tabel perubahan. Jika replikasi transaksional dinonaktifkan dalam database ini, Agen Pembaca Log dihapus dan pekerjaan penangkapan dibuat ulang.

Catatan

Ketika Agen Pembaca Log digunakan untuk mengubah pengambilan data dan replikasi transaksional, perubahan yang direplikasi pertama kali ditulis ke database distribusi. Kemudian, perubahan yang diambil ditulis ke tabel perubahan. Kedua operasi dilakukan bersama-sama. Jika ada latensi secara tertulis ke database distribusi, akan ada latensi yang sesuai sebelum perubahan muncul dalam tabel perubahan.

Opsi proc exec dari replikasi transaksional tidak tersedia saat pengambilan data perubahan diaktifkan.

Pemulihan atau lampirkan database

SQL Server menggunakan logika berikut untuk menentukan apakah pengambilan data perubahan tetap diaktifkan setelah database dipulihkan atau dilampirkan:

  • Jika database dipulihkan ke server yang sama dengan nama database yang sama, ubah pengambilan data tetap diaktifkan.

  • Jika database dipulihkan ke server lain, secara default, pengambilan data perubahan dinonaktifkan dan semua metadata terkait dihapus.

    Untuk mempertahankan perubahan pengambilan data, gunakan opsi KEEP_CDC saat memulihkan database. Untuk informasi selengkapnya tentang opsi ini, lihat MEMULIHKAN.

  • Jika database dilepas dan dilampirkan ke server yang sama atau server lain, ubah pengambilan data tetap diaktifkan.

  • Jika database dilampirkan atau dipulihkan dengan opsi KEEP_CDC ke edisi apa pun selain Standard, Enterprise, atau SQL Managed Instance, operasi diblokir karena pengambilan data perubahan memerlukan edisi SQL Server Standard, Enterprise, atau SQL Managed Instance. Pesan kesalahan 934 ditampilkan:

    SQL Server cannot load database '%.*ls' because change data capture is enabled. The currently installed edition of SQL Server does not support change data capture. Either restore database without KEEP_CDC option, or upgrade the instance to one that supports change data capture.

Anda bisa menggunakan sys.sp_cdc_disable_db untuk menghapus pengambilan data perubahan dari database yang dipulihkan atau dilampirkan.

Setelah memulihkan database di Azure SQL Managed Instance, CDC akan tetap diaktifkan, tetapi Anda harus memastikan bahwa pekerjaan pemindaian dan pembersihan ditambahkan dan berjalan. Anda dapat menambahkan pekerjaan secara manual dengan menjalankan sys.sp_cdc_add_job.

Database Mandiri

Mengubah pengambilan data tidak didukung dalam database mandiri.

Grup ketersediaan

Saat Anda menggunakan grup ketersediaan AlwaysOn, enumerasi perubahan harus dilakukan pada replika sekunder untuk mengurangi beban disk pada primer.

Panduan Indeks Penyimpan Kolom

Mengubah pengambilan data tidak dapat diaktifkan pada tabel dengan indeks penyimpan kolom berkluster. Dimulai dengan SQL Server 2016, SQL Server dapat diaktifkan pada tabel dengan indeks penyimpan kolom yang tidak terdaftar.

Kolom komputasi

CDC tidak mendukung nilai untuk kolom komputasi meskipun kolom komputasi didefinisikan sebagai bertahan. Kolom komputasi yang disertakan dalam instans pengambilan selalu memiliki nilai NULL. Perilaku ini dimaksudkan, dan bukan bug.

Linux

CDC didukung untuk SQL Server 2017 di Linux yang dimulai dengan CU18, dan SQL Server 2019 di Linux.

Lihat Juga