Mengelola Pelacakan Perubahan (SQL Server)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Topik ini menjelaskan cara mengelola pelacakan perubahan. Ini juga menjelaskan cara mengonfigurasi keamanan dan menentukan efek pada penyimpanan dan performa saat pelacakan perubahan digunakan.

Mengelola Pelacakan Perubahan

Bagian berikut mencantumkan tampilan katalog, izin, dan pengaturan yang relevan untuk mengelola pelacakan perubahan.

Tampilan Katalog

Untuk menentukan tabel dan database mana yang mengaktifkan pelacakan perubahan, Anda bisa menggunakan tampilan katalog berikut:

Selain itu , tampilan katalog sys.internal_tables mencantumkan tabel internal yang dibuat saat pelacakan perubahan diaktifkan untuk tabel pengguna.

Keamanan

Untuk mengakses informasi pelacakan perubahan dengan menggunakan fungsi pelacakan perubahan, prinsipal harus memiliki izin berikut:

  • Izin SELECT pada setidaknya kolom kunci utama pada tabel yang dilacak perubahan ke tabel yang sedang dikueri.

  • LIHAT izin PELACAKAN PERUBAHAN pada tabel tempat perubahan diperoleh. Izin LIHAT PELACAKAN PERUBAHAN diperlukan karena alasan berikut:

    • Rekaman pelacakan perubahan menyertakan informasi tentang baris yang telah dihapus, khususnya nilai kunci utama baris yang telah dihapus. Prinsipal dapat diberikan izin SELECT untuk tabel terlacak perubahan setelah beberapa data sensitif dihapus. Dalam hal ini, Anda tidak ingin prinsipal tersebut dapat mengakses informasi yang dihapus dengan menggunakan pelacakan perubahan.

    • Informasi pelacakan perubahan dapat menyimpan informasi tentang kolom mana yang telah diubah oleh operasi pembaruan. Prinsipal dapat ditolak izin ke kolom yang berisi informasi sensitif. Namun, karena informasi pelacakan perubahan tersedia, prinsipal dapat menentukan bahwa nilai kolom telah diperbarui, tetapi prinsipal tidak dapat menentukan nilai kolom.

Memahami Overhead Pelacakan Perubahan

Saat pelacakan perubahan diaktifkan untuk tabel, beberapa operasi administrasi terpengaruh. Tabel berikut mencantumkan operasi dan efek yang harus Anda pertimbangkan.

Operasi Saat pelacakan perubahan diaktifkan
DROP TABLE Semua informasi pelacakan perubahan untuk tabel yang dihilangkan dihapus.
UBAH TABEL HILANGKAN BATASAN Upaya untuk menghilangkan batasan KUNCI PRIMER akan gagal. Pelacakan perubahan harus dinonaktifkan sebelum batasan KUNCI PRIMER dapat dihilangkan.
UBAH KOLOM JATUHKAN TABEL Jika kolom yang dijatuhkan adalah bagian dari kunci utama, menghilangkan kolom tidak diizinkan, terlepas dari pelacakan perubahan.

Jika kolom yang dihilangkan bukan bagian dari kunci utama, menghilangkan kolom berhasil. Namun, efek pada aplikasi apa pun yang menyinkronkan data ini harus dipahami terlebih dahulu. Jika pelacakan perubahan kolom diaktifkan untuk tabel, kolom yang dihilangkan mungkin masih dikembalikan sebagai bagian dari informasi pelacakan perubahan. Adalah tanggung jawab aplikasi untuk menangani kolom yang dihilangkan.
UBAH TABEL TAMBAHKAN KOLOM Jika kolom baru ditambahkan ke tabel terlacak perubahan, penambahan kolom tidak dilacak. Hanya pembaruan dan perubahan yang dilakukan pada kolom baru yang dilacak.
UBAH KOLOM UBAH TABEL Perubahan jenis data kolom kunci non-primer tidak dilacak.
UBAH SAKELAR TABEL Mengalihkan partisi gagal jika satu atau kedua tabel mengaktifkan pelacakan perubahan.
DROP INDEX, atau ALTER INDEX DISABLE Indeks yang memberlakukan kunci primer tidak dapat dihilangkan atau dinonaktifkan.
POTONG TABEL Memotong tabel dapat dilakukan pada tabel yang mengaktifkan pelacakan perubahan. Namun, baris yang dihapus oleh operasi tidak dilacak, dan versi minimum yang valid diperbarui. Ketika aplikasi memeriksa versinya, pemeriksaan menunjukkan bahwa versi terlalu lama dan diperlukan reinisialisasi. Ini sama dengan pelacakan perubahan yang dinonaktifkan, lalu dapat diaktifkan kembali untuk tabel.

Menggunakan pelacakan perubahan memang menambahkan beberapa overhead ke operasi DML karena informasi pelacakan perubahan yang disimpan sebagai bagian dari operasi.

Efek pada DML

Pelacakan perubahan telah dioptimalkan untuk meminimalkan overhead performa pada operasi DML. Overhead performa bertahap yang terkait dengan penggunaan pelacakan perubahan pada tabel mirip dengan overhead yang timbul saat indeks dibuat untuk tabel dan perlu dipertahankan.

Untuk setiap baris yang diubah oleh operasi DML, baris ditambahkan ke tabel pelacakan perubahan internal. Efek dari ini relatif terhadap operasi DML tergantung pada berbagai faktor, seperti berikut:

  • Jumlah kolom kunci primer

  • Jumlah data yang sedang diubah di baris tabel pengguna

  • Jumlah operasi yang sedang dilakukan dalam transaksi

Isolasi rekam jepret, jika digunakan, juga berpengaruh pada performa untuk semua operasi DML, baik pelacakan perubahan diaktifkan atau tidak.

Efek pada Penyimpanan

Data pelacakan perubahan disimpan dalam jenis tabel internal berikut:

  • Tabel perubahan internal

    Ada satu tabel perubahan internal untuk setiap tabel pengguna yang mengaktifkan pelacakan perubahan.

  • Tabel transaksi internal

    Ada satu tabel transaksi internal untuk database.

Tabel internal ini memengaruhi persyaratan penyimpanan dengan cara berikut:

  • Untuk setiap perubahan pada setiap baris dalam tabel pengguna, baris ditambahkan ke tabel perubahan internal. Baris ini memiliki overhead tetap kecil ditambah overhead variabel yang sama dengan ukuran kolom kunci utama. Baris dapat berisi informasi konteks opsional yang ditetapkan oleh aplikasi. Dan, jika pelacakan kolom diaktifkan, setiap kolom yang diubah memerlukan 4 byte dalam tabel pelacakan.

  • Untuk setiap transaksi yang dilakukan, baris ditambahkan ke tabel transaksi internal.

Seperti halnya tabel internal lainnya, Anda dapat menentukan ruang yang digunakan untuk tabel pelacakan perubahan dengan menggunakan prosedur tersimpan sp_spaceused . Nama tabel internal dapat diperoleh dengan menggunakan tampilan katalog sys.internal_tables , seperti yang ditunjukkan dalam contoh berikut.

sp_spaceused 'sys.change_tracking_309576141'  
sp_spaceused 'sys.syscommittab'  

Lihat Juga

Lacak Perubahan Data (SQL Server)
ALTER TABLE (Transact-SQL)
Properti Database (Halaman ChangeTracking)
UBAH Opsi SET DATABASE (Transact-SQL)
sys.change_tracking_databases (T-SQL)
sys.change_tracking_tables (T-SQL)
Lacak Perubahan Data (SQL Server)
Tentang Pelacakan Perubahan (SQL Server)
Bekerja dengan Ubah Data (SQL Server)