Bagikan melalui


Tentang Pelacakan Perubahan (SQL Server)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceDatabase SQL di Microsoft Fabric

Artikel ini menjelaskan fitur pelacakan perubahan untuk SQL Server, yang merupakan solusi ringan yang menyediakan mekanisme pelacakan perubahan yang efisien untuk aplikasi.

Untuk memulai, tinjau Mengonfigurasi pelacakan perubahan.

Gambaran Umum

Sebelumnya, untuk memungkinkan aplikasi mengkueri perubahan pada data dalam database dan mengakses informasi yang terkait dengan perubahan, pengembang aplikasi harus menerapkan mekanisme pelacakan perubahan kustom. Mekanisme ini biasanya melibatkan banyak pekerjaan seperti kombinasi pemicu, kolom tanda waktu, tabel baru untuk menyimpan informasi pelacakan, dan proses pembersihan kustom. Fitur pelacakan perubahan SQL Server menyederhanakan proses ini, memudahkan untuk mengidentifikasi informasi yang terkait dengan perubahan tanpa perlu solusi kustom.

Berbagai jenis aplikasi memiliki persyaratan berbeda untuk seberapa banyak informasi yang aplikasi butuhkan tentang perubahan. Aplikasi dapat menggunakan pelacakan perubahan untuk menjawab pertanyaan berikut tentang perubahan yang telah dibuat pada tabel pengguna:

  • Baris apa yang telah berubah untuk tabel pengguna?

    • Hanya fakta bahwa baris telah berubah diperlukan, bukan berapa kali baris telah berubah atau nilai dari setiap perubahan menengah.

    • Data terbaru dapat diperoleh langsung dari tabel yang sedang dilacak.

  • Apakah ada perubahan pada baris?

    • Fakta bahwa baris telah berubah dan informasi tentang perubahan harus tersedia dan dicatat pada saat perubahan dilakukan dalam transaksi yang sama.

Catatan

Jika aplikasi memerlukan informasi tentang semua perubahan yang dibuat dan nilai perantara dari data yang diubah, menggunakan penangkapan data perubahan, alih-alih pelacakan perubahan, mungkin sesuai. Untuk informasi selengkapnya, lihat Tentang Mengubah Penangkapan Data (SQL Server).

Perubahan SQL Server 2025

Pelacakan perubahan memiliki proses pembersihan otomatis yang menghapus metadata pelacakan perubahan kedaluwarsa dari tabel sistem. Di SQL Server 2022 (16.x) dan versi yang lebih lama, proses autocleanup menggunakan pendekatan pembersihan mendalam.

Dalam pendekatan ini, thread autocleanup aktif setiap 30 menit, mengambil semua database dan tabel yang dilacak perubahannya, menemukan titik pembersihan yang aman berdasarkan periode retensi yang dikonfigurasi, dan melakukan perulangan di semua tabel untuk menghapus data dari tabel pendamping yang sesuai.

Di SQL Server 2025 (17.x) dan versi yang lebih baru, proses autocleanup pelacakan perubahan memperkenalkan pendekatan pembersihan dangkal adaptif baru untuk tabel sisi besar. Pendekatan baru ini menghapus data di bawah titik pembersihan yang aman. Titik ini ditemukan berdasarkan kedalaman pembersihan dan periode retensi yang dikonfigurasi. Pendekatan ini berjalan dalam langkah-langkah bertahap hingga semua data yang memenuhi syarat dihapus.

Di SQL Server 2025 (17.x), pembersihan dangkal adaptif diaktifkan secara default.

Untuk menonaktifkan pembersihan dangkal adaptif, aktifkan bendera pelacakan 8273 secara global:

DBCC TRACEON (8273, -1);

Aplikasi Sinkronisasi Satu Arah dan Dua Arah

Aplikasi yang harus menyinkronkan data dengan instans SQL Server Database Engine harus dapat meminta perubahan. Pelacakan perubahan dapat digunakan sebagai fondasi untuk aplikasi sinkronisasi satu arah dan dua arah.

Aplikasi Sinkronisasi Satu Arah

Aplikasi sinkronisasi satu arah, seperti klien atau aplikasi penembolokan tingkat menengah, dapat dibangun dengan menggunakan pelacakan perubahan. Seperti yang ditunjukkan dalam ilustrasi berikut, aplikasi cache memerlukan data untuk disimpan di Mesin Database dan di-cache di penyimpanan data lainnya. Aplikasi harus dapat menjaga cache tetap terbarui dengan perubahan apa pun yang telah dibuat pada tabel database. Tidak ada perubahan untuk diteruskan kembali ke Mesin Basis Data.

Diagram yang menunjukkan aplikasi sinkronisasi satu arah.

Aplikasi Sinkronisasi Dua Arah

Aplikasi sinkronisasi dua arah juga dapat dibangun yang menggunakan pelacakan perubahan. Dalam skenario ini, data dalam instans Mesin Database disinkronkan dengan satu atau lebih penyimpanan data. Data di penyimpanan tersebut dapat diperbarui dan perubahan harus disinkronkan kembali ke Mesin Database.

Diagram yang menunjukkan aplikasi sinkronisasi dua arah.

Contoh yang baik dari aplikasi sinkronisasi dua arah adalah aplikasi yang kadang-kadang terhubung. Dalam jenis aplikasi ini, aplikasi klien meminta dan memperbarui penyimpanan lokal. Ketika koneksi tersedia antara klien dan server, aplikasi disinkronkan dengan server, dan mengubah aliran data di kedua arah.

Aplikasi sinkronisasi dua arah harus dapat mendeteksi konflik. Konflik akan terjadi jika data yang sama diubah di kedua penyimpanan data dalam waktu antara sinkronisasi. Dengan kemampuan untuk mendeteksi konflik, aplikasi dapat memastikan bahwa perubahan tidak hilang.

Cara Kerja Pelacakan Perubahan

Untuk mengonfigurasi pelacakan perubahan, Anda dapat menggunakan pernyataan DDL atau SQL Server Management Studio. Untuk informasi selengkapnya, lihat Mengaktifkan dan Menonaktifkan Pelacakan Perubahan. Untuk melacak perubahan, pelacakan perubahan harus terlebih dahulu diaktifkan untuk database lalu diaktifkan untuk tabel yang ingin Anda lacak dalam database tersebut. Definisi tabel tidak harus diubah dengan cara apa pun, dan tidak ada pemicu yang dibuat.

Setelah pelacakan perubahan dikonfigurasi untuk tabel, pernyataan DML apa pun yang memengaruhi baris dalam tabel akan menyebabkan informasi pelacakan perubahan untuk setiap baris yang diubah dicatat. Untuk mengkueri baris yang telah berubah dan untuk mendapatkan informasi tentang perubahan, Anda bisa menggunakan fungsi pelacakan perubahan.

Nilai kolom kunci utama adalah satu-satunya informasi dari tabel terlacak yang direkam dengan informasi perubahan. Nilai-nilai ini mengidentifikasi baris yang telah diubah. Guna mendapatkan data terbaru untuk baris tersebut, aplikasi dapat menggunakan nilai kolom kunci primer untuk menggabungkan tabel sumber dengan tabel yang dilacak.

Informasi tentang perubahan yang dilakukan pada setiap baris juga dapat diperoleh dengan menggunakan pelacakan perubahan. Misalnya, jenis operasi DML yang menyebabkan perubahan (menyisipkan, memperbarui, atau menghapus) atau kolom yang diubah sebagai bagian dari operasi pembaruan.

Semua operasi DML dilacak, meskipun nilai kolom tidak berubah. Misalnya, jika pernyataan pembaruan menetapkan kolom ke nilai yang sama dengan yang sudah dimilikinya, kolom masih dianggap telah berubah.

Pembersihan Pelacakan Perubahan

Informasi pelacakan perubahan untuk semua tabel (diaktifkan untuk Pelacakan Perubahan) disimpan dalam memori rowstore. Data pelacakan perubahan yang terkait dengan setiap tabel yang diaktifkan untuk Pelacakan Perubahan dipindahkan pada setiap titik pemeriksaan dari rowstore dalam memori ke dalam tabel internal di disk terkait. Selama checkpoint, in-memory rowstore juga dihapus sepenuhnya setelah baris-baris dipindahkan ke tabel di disk.

Setiap tabel yang diaktifkan untuk Pelacakan Perubahan memiliki tabel internal di disk yang digunakan oleh fungsi Pelacakan Perubahan untuk menentukan versi perubahan dan baris yang telah berubah sejak versi tertentu. Setiap kali utas pembersihan otomatis bangun, utas ini memindai semua database pengguna pada instans SQL Server untuk mengidentifikasi database yang diaktifkan pelacakan perubahan. Berdasarkan pengaturan periode retensi database, setiap tabel internal di disk dibersihkan dari rekaman kedaluwarsanya.

Prosedur tersimpan ditambahkan dalam Paket Layanan untuk SQL Server 2014 (12.x) dan SQL Server 2016 (13.x) untuk melakukan pembersihan manual untuk tabel internal Pelacakan Perubahan internal. Informasi selengkapnya tentang prosedur tersimpan tersedia di KB173157.