Menggunakan Sql Server Ubah Data Capture dengan skema yang sering berubah

10

Kami sedang mencari untuk mengaktifkan Sql Server Change Data Capture untuk subsistem baru yang kami bangun.

Itu tidak benar-benar karena kita membutuhkannya, tetapi kita didorong untuk memiliki penelusuran sejarah yang lengkap, dan CDC akan dengan baik menyelesaikan persyaratan ini dengan upaya minimal pada bagian kita.

Kami mengikuti proses pengembangan tangkas, yang dalam hal ini berarti bahwa kami sering melakukan perubahan pada skema database, misalnya menambahkan kolom baru, memindahkan data ke kolom lain, dll.

Kami melakukan tes kecil di mana kami membuat tabel, mengaktifkan CDC untuk tabel itu, dan kemudian menambahkan kolom baru ke tabel. Perubahan pada kolom baru tidak terdaftar dalam tabel CDC.

Apakah ada mekanisme untuk memperbarui tabel CDC ke skema baru, dan apakah ada praktik terbaik untuk bagaimana Anda menangani data yang diambil saat memigrasi skema database?

Pete
sumber
Anda mungkin mendapatkan jawaban yang lebih baik / lebih cepat jika Anda memposting pertanyaan ini di dba.stackexchange.com
TimG
2
@TimG Mengalikan pertanyaan tidak disarankan, migrasi akan menjadi pilihan - tetapi memiliki karunia dan tidak dapat dimigrasi saat karunia aktif. Yang mengatakan, pertanyaan dan hadiahnya telah disebutkan di ruang obrolan dba.SE dan memang menarik perhatian.

Jawaban:

5

Kami juga baru-baru ini mulai melihat CDC. Saya bukan ahli dalam hal ini, tetapi saya pikir saya punya beberapa jawaban untuk pertanyaan Anda.

Untuk sebagian besar, CDC akan membantu Anda mencapai tujuan Anda dari sejarah yang benar-benar dapat dilacak, tetapi saya tidak berpikir itu akan membawa Anda semua jalan ke sana.

Pertama:

kami sering membuat perubahan pada skema database ... Apakah ada mekanisme untuk memperbarui tabel CDC ke skema baru

Dan di sinilah saya pikir CDC akan mengecewakan Anda. The MSDN dokumentasi di bawah bagian "Memahami Perubahan Pelacakan Overhead" cukup jelas bahwa itu tidak akan melacak perubahan skema untuk Anda. Misalnya, dengan Alter Table Add Column:

Jika kolom baru ditambahkan ke tabel perubahan dilacak, penambahan kolom tidak dilacak. Hanya pembaruan dan perubahan yang dilakukan pada kolom baru dilacak.

Drop Column sedikit lebih kompleks.

Namun, Anda harus menggunakan skrip DB untuk mengubah skema Anda sehingga Anda tidak harus bergantung pada CDC di sini. Itu memungkinkan Anda untuk memiliki konsistensi antara QA dan skema Produksi Anda. Dan perubahan ke QA harus dilakukan oleh skrip sehingga perubahan yang sama persis dapat diterapkan ke Prod. Seharusnya tidak terlalu sulit untuk mengekstrak perubahan skema dari skrip tersebut. Ini mungkin berarti bahwa dimensi "waktu" dari riwayat Anda digerakkan oleh versi alih-alih waktu yang sebenarnya, tetapi hasil akhirnya akan sama.

Jika Anda belum memilikinya, buat tabel untuk melacak versi skema basis data Anda. Dan kemudian letakkan tabel versi skema database di bawah CDC sehingga Anda dapat menyelaraskan perubahan makroskopis ke skema terhadap perubahan mikroskopis dalam tabel tertentu.

Menurut pemahaman saya, Anda masih harus melihat data ditambahkan ke kolom baru terlepas dari CDC tidak menunjukkan perubahan skema. Dan migrasi data dari tabel ke tabel juga harus diambil oleh CDC.

Adakah praktik terbaik untuk cara Anda menangani data yang diambil saat memigrasi skema database?

Perlakukan itu seperti Anda akan memperlakukan audit. Anda perlu memahami apa yang Anda periksa, mengapa Anda memeriksanya, dan berapa lama Anda perlu menyimpan informasi itu. Lingkup dan retensi adalah dua bugaboo terbesar dalam hal tugas seperti ini.

Alat pelaporan CDC dapat dipahami dengan mudah, jadi Anda harus tahu konteks perubahannya. Terlalu mudah untuk mengatakan "lacak semuanya !" dan berakhir dengan tidak ada yang dapat digunakan sebagai hasilnya. Demikian juga, Anda bisa menggandakan ukuran database Anda dengan menyimpan salinan setiap perubahan. Di atas meja churn tinggi dengan banyak sisipan dan penghapusan, Anda akan berakhir dengan pertumbuhan astronomi. Itu tidak buruk dalam dirinya sendiri, tetapi Anda perlu menganggarkan untuk pertumbuhan itu dan memiliki sarana untuk memeriksa semua data yang dihasilkan.

Jadi ini membuat Anda kembali untuk memahami mengapa Anda didorong untuk memiliki keterlacakan yang lengkap. Tentu ada alasan yang sah untuk persyaratan itu. Tetapi Anda tidak akan dapat menyusun audit efektif dari basis data Anda sampai Anda tahu mengapa Anda harus memenuhi persyaratan itu.


sumber
1

Anda dapat melacak penambahan kolom dengan pemicu DDL.

CREATE TRIGGER trigger_name
ON { ALL SERVER | DATABASE }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS { sql_statement [ ; ] [ ,...n ] |
EXTERNAL NAME < method specifier > [ ; ] }

Anda dapat menggunakan grup acara DDL_TABLE_EVENTS untuk menjalankan CREATE, DROP, atau ALTER tabel.

Namun, Anda mungkin ingin melihat SQL Server Audit , jika Anda menggunakan perusahaan> 2008, karena dapat "menggabungkan semua kemampuan audit menjadi spesifikasi audit". Tautan msdn ini memiliki artikel terperinci tentangnya: http://msdn.microsoft.com/en-us/library/dd392015(v=sql.100).aspx .

CREATE SERVER AUDIT audit_name
TO { [ FILE (<file_options> [, ...n]) ] |
APPLICATION_LOG | SECURITY_LOG }
[ WITH ( <audit_options> [, ...n] ) ] }[ ; ]

<file_options>::=
{FILEPATH = 'os_file_path'
[, MAXSIZE = { max_size { MB | GB | TB } | UNLIMITED } ]
[, MAX_ROLLOVER_FILES = integer ]
[, RESERVE_DISK_SPACE = { ON | OFF } ] }

<audit_options>::=
{ [ QUEUE_DELAY = integer ]
[, ON_FAILURE = { CONTINUE | SHUTDOWN } ]
[, AUDIT_GUID = uniqueidentifier ]}

Kemudian Anda membuat Spesifikasi Server atau Database.

JoseTeixeira
sumber
0

Simple-Talk memiliki artikel yang bagus tentang perubahan pengambilan data dan panduan yang sangat menyeluruh tentang CDC serta dokumentasi MSDN menjelaskan berbagai metode tergantung pada persyaratan. Tetapi keduanya dapat membantu Anda dengan persyaratan spesifik Anda.

Sunny Patel
sumber