Jadi kami telah mulai mengeksplorasi dengan menggunakan perubahan data pada salah satu database produksi kami. Kami ingin mengetahui waktu dari setiap perubahan. Membaca melalui tutorial dan tutorial dll. Tampaknya pendekatan standar adalah menggunakan LSN untuk berhubungan dengan cdc.lsn_time_mapping
tabel sistem. Pendekatan ini bekerja tetapi tidak terlalu mudah atau berkinerja ketika berbicara tentang 100-an dari ribuan perubahan sehari.
Dalam lingkungan pengujian saya membuat penyesuaian berikut ke tabel trek perubahan. Saya mengeluarkan ALTER TABLE
pernyataan untuk menambahkan kolom ke ujung yang dipanggil [__ChangeDateTime]
dan menjadikannya nilai default GetDate()
. Pendekatannya tampaknya bekerja, pelacakan perubahan masih berfungsi secara normal, datetime sedang ditangkap. Tapi bermain-main dengan tabel sistem membuat saya sedikit gugup.
Jika ini bukan bidang sistem yang Microsoft tambahkan sejak awal, mereka pasti memiliki alasan. Karena mereka malah memilih untuk LSN ke pendekatan cdc.lsn_time_mapping apakah saya mengatur diri saya untuk masalah dengan membuat hack saya sendiri dengan cara ini?
MEMPERBARUI:
Ditemukan selama pengujian yang GetDate () pada waktu tidak cukup tepat untuk kebutuhan kita - beberapa perubahan berbagi waktu yang sama. Rekomendasikan menggunakan sysdatetime () dan datetime2 untuk memindahkan nilai ke nanosecond. Opsi untuk 2008+ hanya jelas.
Satu-satunya peringatan yang akan saya berikan adalah bahwa tabel-tabel itu dijatuhkan secara otomatis ketika CDC dinonaktifkan. Kolom tidak dibuat ulang secara otomatis saat Anda mengaktifkannya kembali
sumber