sys.sp_cdc_cleanup_change_table (T-SQL)
Berlaku untuk: SQL Server
Menghapus baris dari tabel perubahan dalam database saat ini berdasarkan nilai @low_water_mark yang ditentukan. Prosedur tersimpan ini disediakan untuk pengguna yang ingin mengelola langsung proses pembersihan tabel perubahan. Namun, hati-hati harus digunakan karena prosedur memengaruhi semua konsumen data dalam tabel perubahan.
Sintaks
sys.sp_cdc_cleanup_change_table [ @capture_instance = ] 'capture_instance'
, [ @low_water_mark = ] low_water_mark
, [ @threshold = ] 'delete threshold'
, [ @fCleanupFailed = ] 'cleanup failed' OUTPUT
[ ; ]
Argumen
[ @capture_instance = ] 'capture_instance'
Nama instans pengambilan yang terkait dengan tabel perubahan. @capture_instance adalah sysname, tanpa default, dan tidak boleh NULL
.
capture_instance harus memberi nama instans pengambilan yang ada di database saat ini.
[ @low_water_mark = ] low_water_mark
Nomor urutan log (LSN) yang digunakan sebagai marka air rendah baru untuk @capture_instance. @low_water_mark adalah biner(10), tanpa default.
Jika nilainya tidak NULL
, nilai harus muncul sebagai start_lsn
nilai entri saat ini dalam tabel cdc.lsn_time_mapping . Jika entri lain dalam cdc.lsn_time_mapping
berbagi waktu penerapan yang sama dengan entri yang diidentifikasi oleh marka air rendah baru, LSN terkecil yang terkait dengan grup entri tersebut dipilih sebagai marka air rendah.
Jika nilai secara eksplisit diatur ke NULL
, @low_water_mark saat ini untuk @capture_instance digunakan untuk menentukan batas atas untuk operasi pembersihan.
Catatan
@low_water_mark adalah ambang LSN. Setiap transaksi dengan nilai LSN yang lebih rendah dari nilai yang disediakan diproses, dan nilai yang dimaksud dikecualikan.
[ @threshold = ] 'hapus ambang batas'
Jumlah maksimum entri penghapusan yang dapat dihapus dengan menggunakan satu pernyataan saat pembersihan. @threshold besar, dengan default 5000.
[ @fCleanupFailed = ] OUTPUT 'pembersihan gagal'
Parameter OUTPUT yang menunjukkan apakah operasi pembersihan gagal atau tidak. @fCleanupFailed adalah bit, dengan default 0
.
Tataan hasil
Tidak ada, kecuali parameter OUTPUT @fCleanupFailed opsional digunakan.
Mengembalikan nilai kode
0
(berhasil) atau 1
(kegagalan).
Contoh
-- Declaring a variable and Setting to zero first
SELECT @cleanup_failed_bit = 0;
-- Execute cleanup and obtain output bit
EXEC @retcode = sys.sp_cdc_cleanup_change_table
@capture_instance = '<CaptureInstance>',
@low_water_mark = @LSN, --== LSN to be used for new low watermark for capture instance
@threshold = 1,
@fCleanupFailed = @cleanup_failed_bit OUTPUT;
-- Leverage @cleanup_failed_bit output to check the status.
SELECT IIF(@cleanup_failed_bit > 0, 'CLEANUP FAILURE', 'CLEANUP SUCCESS');
CLEANUP SUCCESS
Keterangan
sys.sp_cdc_cleanup_change_table
melakukan operasi berikut:
Jika parameter @low_water_mark adalah
NULL
,start_lsn
nilai untuk @capture_instance dibiarkan tidak berubah. Namun, jika marka air rendah saat ini lebih besar dari nilai marka air rendah yang ditentukan menggunakan parameter @low_water_mark untuk prosedur, Kesalahan 22957 dilemparkan. Pesan kesalahan untuk Kesalahan 22957 adalahLSN %s, specified as the new low endpoint for the change table associated with capture instance '%s', is not within the Change Data Capture timeline [%s, %s].
Catatan
Marka air rendah baru mungkin bukan marka air rendah yang ditentukan dalam panggilan prosedur tersimpan. Jika entri lain dalam
cdc.lsn_time_mapping
tabel berbagi waktu penerapan yang sama, terkecilstart_lsn
yang diwakili dalam grup entri dipilih sebagai marka air rendah yang disesuaikan. Jika parameter @low_water_mark adalahNULL
atau marka air rendah saat ini lebih besar dari marka air rendah baru,start_lsn
nilai untuk instans pengambilan dibiarkan tidak berubah.Ubah entri tabel dengan
__$start_lsn
nilai yang kurang dari marka air rendah kemudian dihapus. Ambang batas penghapusan digunakan untuk membatasi jumlah baris yang dihapus dalam satu transaksi. Kegagalan untuk berhasil menghapus entri dilaporkan, tetapi tidak memengaruhi perubahan apa pun pada marka air rendah instans tangkapan yang mungkin telah dilakukan berdasarkan panggilan.sys.sp_cdc_cleanup_change_table
Jika waktu prosedur tersimpan habis setelah memperbaruistart_lsn
untuk instans pengambilan tetapi tanpa menghapus data tabel perubahan, meningkatkan nilai retensi data menggunakan prosedur tersimpan sys.sp_cdc_change_job sebelum eksekusi prosedursys.sp_cdc_cleanup_change_table
tersimpan berikutnya tidak menyimpan data untuk periode retensi yang ditentukan. Nilaistart_lsn
dalam cdc.change_tables harus diperlakukan sebagai marka air rendah baru. Prosedursys.sp_cdc_cleanup_change_table
tersimpan tidak mengaturstart_lsn
nilai agar sesuai dengan periode retensi data yang baru ditentukan. Prosedur ini selalu melakukan pembersihan berdasarkan marka air rendah. Menentukan nilai untuk parameter @low_water_mark yang sama dengan atau lebih tinggi daristart_lsn
nilai dalam cdc.change_tables, menghindari menghasilkan Kesalahan 22957.Jika Anda menggunakan
sys.sp_cdc_cleanup_change_table
untuk mengelola proses tabel pembersihan dan kebuntuan terjadi antara pemindaian CDC dan pembersihan CDC saatsys.sp_cdc_cleanup_change_table
dipanggil, Kesalahan 22852 dicatat dengan tingkat keparahan 10 (pesan informasi). Pesan untuk Kesalahan 22852 adalah sebagai berikut:Could not delete change table entries made obsolete by a change in one or more low water marks for capture instances of database <DatabaseName>. The failure occurred when executing the command <CommandName>. The error returned was <ErrorInfo>. Use the action and error to determine the cause of the failure and resubmit the request.
Gunakan sys.sp_cdc_cleanup_change_table
dalam keadaan berikut:
Pekerjaan Agen pembersihan melaporkan kegagalan penghapusan.
Administrator dapat menjalankan prosedur tersimpan ini secara eksplisit untuk mencoba kembali operasi yang gagal. Untuk mencoba kembali pembersihan untuk instans pengambilan tertentu, jalankan
sys.sp_cdc_cleanup_change_table
, dan tentukanNULL
untuk parameter @low_water_mark .Kebijakan berbasis retensi sederhana yang digunakan oleh pekerjaan Agen pembersihan tidak memadai.
Karena prosedur tersimpan ini melakukan pembersihan untuk satu instans tangkapan, prosedur ini dapat digunakan untuk membangun strategi pembersihan kustom yang menyesuaikan aturan untuk pembersihan ke instans pengambilan individu.
Izin
Memerlukan keanggotaan dalam peran database tetap db_owner .