SQL Server Change Data Capture adalah fitur yang membaca data historis dari log transaksi SQL Server dan menyimpannya dalam tabel khusus.
Melalui penggunaan fungsi nilai tabel khusus (TVF) maka memungkinkan pengguna untuk menanyakan data ini, sehingga memungkinkan untuk mendapatkan semua perubahan pada tabel tertentu atau hanya perubahan bersih yang dihasilkan dari perubahan dalam waktu tertentu.
CDC memiliki kelebihan tertentu
- Itu dapat dikonfigurasi untuk hanya melacak tabel atau kolom tertentu.
- Ia mampu menangani perubahan model hingga tingkat tertentu.
- Itu tidak mempengaruhi kinerja sebanyak pemicu karena bekerja dengan log transaksi.
- Mudah diaktifkan / dinonaktifkan dan tidak memerlukan kolom tambahan pada tabel yang harus dilacak.
Ini juga memiliki beberapa kelemahan:
- Jumlah data riwayat bisa menjadi sangat cepat.
- Anda tidak dapat melacak siapa yang membuat perubahan (setidaknya tidak untuk dihapus).
- Data histori memerlukan beberapa waktu untuk mengejar ketinggalan, karena didasarkan pada log transaksi.
- Itu tergantung pada Agen SQL Server. Jika Agen tidak berjalan atau macet, tidak ada riwayat yang dilacak.
Saya telah membaca cukup banyak tentang CDC dan sementara saya tahu sekarang bagaimana menggunakannya, saya masih tidak yakin apakah itu alat yang tepat untuk saya.
- Untuk tugas / skenario manakah CDC alat yang tepat? (mis. Mengizinkan pengguna mengembalikan objek data ke titik waktu tertentu? Audit? Menampilkan riwayat lengkap data?)
- Kapan sebaiknya Anda tidak menggunakan CDC, tetapi menggunakan solusi berbasis pemicu khusus?
- Apakah boleh menggunakan CDC dalam basis data operasional dan memanfaatkan data CDC dalam aplikasi operasional? (misalnya menunjukkannya kepada pengguna akhir) Atau apakah ini jelas merupakan penyalahgunaan fitur ini?
Saya biasanya mendengar bahwa CDC adalah alat audit, tetapi bukankah itu untuk apa SQL Server Audit ? Apakah keduanya alat yang berbeda untuk tugas yang sama? Atau bisakah CDC digunakan untuk hal lain?
Skenario saya saat ini adalah saya diminta untuk membangun kerangka kerja data yang andal yang seharusnya menjadi dasar untuk berbagai aplikasi di masa depan. Persyaratan yang tepat kabur, tetapi satu adalah bahwa ia harus dapat melacak riwayat data dan mengembalikan entri yang lebih lama bersama dengan semua data terkait dari tabel lain. Saya mengevaluasi CDC sekarang sebagai opsi, tetapi saya tidak yakin apakah ini cara yang harus ditempuh, karena saya tidak dapat menemukan kasus penggunaan yang direkomendasikan.
Sementara saya menghargai saran untuk skenario spesifik saya, jawaban harus memberikan saran umum tentang kapan atau kapan tidak menggunakan Ubah Data Capture.
Jawaban:
Pertama,
Sehingga dapat memutuskan untuk Anda jika ada pelanggan Anda yang tidak memiliki edisi perusahaan, atau Anda belum tahu Anda akan menggunakan edisi perusahaan. (Karena spesifikasi mencakup "beberapa aplikasi masa depan" ini mungkin merupakan masalah nyata bagi Anda)
Tidak seperti pemicu, ini bukan waktu nyata, ini merupakan keuntungan dan juga kerugian. Menggunakan pemicu selalu memperlambat pembaruan.
Saya bekerja pada satu sistem ketika kami menggunakan pemicu (dihasilkan oleh CodeSmith), serta melacak semua perubahan pada catatan, kami juga menautkan perubahan bersama-sama ke tabel "riwayat" yang termasuk modul aplikasi yang membuat perubahan, dan item UI yang digunakan pengguna untuk melakukan perubahan.
Namun Anda mungkin sebaiknya menyelesaikan ini di tingkat aplikasi, dengan mengatakan menulis semua pembaruan ke antrian pesan yang kemudian diputar ulang untuk membuat database pada suatu titik waktu tertentu, lihat Pola Temporal di blog Martin Flowler untuk ikhtisar opsi yang bagus.
sumber
Berikut ini adalah seri 9 bagian yang ditulis dengan sangat baik yang mengulas berbagai cara audit perubahan data SQL Server. Bagian 3, 4 & 5 fokus pada CDC. Ada baiknya membaca semua artikel karena ini akan menjawab pertanyaan Anda, seperti skenario yang berbeda di mana fitur akan sesuai dan overhead. http://solutioncenter.apexsql.com/tag/methods-for-auditing-sql-server
sumber
Mungkin itu tergantung.
Iya nih.
Iya nih.
Ketika data dalam tabel perubahan tidak memenuhi kebutuhan Anda.
Iya nih.
Tidak, ini bukan penyalahgunaan fitur ini.
Iya nih.
Tidak.
CDC dapat digunakan untuk hal-hal lain.
Ada Ubah Pelacakan dan ada Ubah Data Capture. Keduanya memiliki akar dalam replikasi.
Change Tracking menyediakan cara untuk memberikan perubahan bersih ke sebuah tabel. Contoh penggunaan adalah sinkronisasi perangkat genggam.
CDC, di sisi lain, melacak setiap perubahan kecil, sejarah. Seseorang dapat menggunakan riwayat itu untuk memperbarui gudang data alih-alih menyalin secara massal dalam data, atau seseorang dapat menggunakan riwayat itu sebagai data itu sendiri dan menghasilkan laporan darinya. Tabel perubahan tidak disembunyikan juga tidak memiliki skema aneh atau sesuatu. Anda dapat menanyakannya dan menggunakan data sesuka Anda. Hanya perlu diingat ... ini bukan real time, seperti kata Ian. Data berasal dari log transaksi, jadi berhati-hatilah seperti Anda akan menggunakan replikasi, atau mirroring, atau pengiriman log. Pada umumnya, ini akan lebih cepat dari pemicu. Anda perlu menggunakan Isolasi Snapshot, yang memiliki overhead, dan Anda harus memikirkan Disaster Recovery.
sumber
Titik koreksi. Pada suatu waktu, perubahan pengambilan data hanya tersedia dalam versi yang tercantum di atas. Namun, perubahan pengambilan data menjadi tersedia dalam edisi standar pada 2016 SP1. Jadi, banyak artikel yang ditulis sebelum SP1 2016 membuatnya terdengar seolah-olah CDC tidak terjangkau bagi kita yang menggunakan edisi Standar. Ini bukan lagi masalahnya. Dokumen Microsoft yang menguraikan ketersediaan CDC ada di tautan di bawah ini.
https://docs.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2016?view=sql-server-2017#DW
sumber