Bagikan melalui


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.

Konvensi sintaks transact-SQL

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:

  1. 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 adalah LSN %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, terkecil start_lsn yang diwakili dalam grup entri dipilih sebagai marka air rendah yang disesuaikan. Jika parameter @low_water_mark adalah NULL atau marka air rendah saat ini lebih besar dari marka air rendah baru, start_lsn nilai untuk instans pengambilan dibiarkan tidak berubah.

  2. 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.

  3. sys.sp_cdc_cleanup_change_table Jika waktu prosedur tersimpan habis setelah memperbarui start_lsn untuk instans pengambilan tetapi tanpa menghapus data tabel perubahan, meningkatkan nilai retensi data menggunakan prosedur tersimpan sys.sp_cdc_change_job sebelum eksekusi prosedur sys.sp_cdc_cleanup_change_table tersimpan berikutnya tidak menyimpan data untuk periode retensi yang ditentukan. Nilai start_lsn dalam cdc.change_tables harus diperlakukan sebagai marka air rendah baru. Prosedur sys.sp_cdc_cleanup_change_table tersimpan tidak mengatur start_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 dari start_lsn nilai dalam cdc.change_tables, menghindari menghasilkan Kesalahan 22957.

  4. Jika Anda menggunakan sys.sp_cdc_cleanup_change_table untuk mengelola proses tabel pembersihan dan kebuntuan terjadi antara pemindaian CDC dan pembersihan CDC saat sys.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 tentukan NULL 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 .