Bagikan melalui


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

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

Mirroring Database

Database yang diaktifkan untuk penangkapan data perubahan dapat digandakan. Untuk memastikan bahwa pengambilan 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 tugas penangkapan dan tugas pembersihan pada database utama baru (database cermin sebelumnya). Untuk membuat tugas, 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

Pengambilan Data Perubahan dan replikasi transaksional dapat berkoeksistensi dalam database yang sama, tetapi pengisian tabel perubahan data ditangani secara berbeda ketika kedua fitur diaktifkan. Penangkapan perubahan data dan replikasi transaksional selalu menggunakan prosedur yang sama, sp_replcmds, untuk membaca perubahan dari log transaksi. Ketika fitur pencatatan perubahan data diaktifkan secara otomatis, 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 untuk Replikasi.

Pertimbangkan skenario di mana pengambilan data perubahan diaktifkan pada AdventureWorks2025 database, dan dua tabel diaktifkan untuk pengambilan. Untuk mengisi tabel perubahan, pekerjaan pencatatan memanggil sp_replcmds. Database diaktifkan untuk replikasi transaksional, dan publikasi dibuat. Sekarang, Agen Pembaca Log telah dibuat untuk database dan tugas tangkap 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 pemrosesan data 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 saat menulis ke database distribusi, akan ada latensi yang berhubungan sebelum perubahan muncul dalam tabel perubahan.

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

Pulihkan 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, penangkapan data perubahan 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, perekaman perubahan 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

Pengambilan data perubahan tidak didukung dalam basis data 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

Pengambilan data perubahan tidak dapat diaktifkan pada tabel dengan indeks kolom berkelompok. Dimulai dengan SQL Server 2016, fitur ini dapat diaktifkan pada tabel dengan indeks columnstore non-klaster.

Kolom Terhitung

CDC tidak mendukung nilai untuk kolom terhitung meskipun kolom terhitung didefinisikan sebagai dipertahankan. Kolom komputasi yang disertakan dalam instans pengambilan selalu memiliki nilai NULL. Perilaku ini diniatkan, dan bukan kesalahan dalam perangkat lunak.

Linux

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

Lihat Juga