Mengaktifkan dan menonaktifkan pengambilan data perubahan

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Artikel ini menjelaskan cara mengaktifkan dan menonaktifkan ubah pengambilan data (CDC) untuk database dan tabel untuk SQL Server dan Azure SQL Managed Instance. Untuk Azure SQL Database, lihat CDC dengan Azure SQL Database.

Izin

Izin sysadmin diperlukan untuk mengaktifkan atau menonaktifkan perubahan pengambilan data di SQL Server dan Azure SQL Managed Instance.

Mengaktifkan untuk database

Sebelum Anda dapat membuat instans pengambilan untuk tabel individual, Anda harus mengaktifkan ubah pengambilan data untuk database.

Untuk mengaktifkan perubahan pengambilan data, jalankan prosedur tersimpan sys.sp_cdc_enable_db (Transact-SQL) dalam konteks database. Untuk menentukan apakah database sudah mengaktifkan CDC, kueri kolom is_cdc_enabled dalam sys.databases tampilan katalog.

Ketika database mengaktifkan perubahan pengambilan data, skema cdc , pengguna cdc , tabel metadata, dan objek sistem lainnya dibuat untuk database. Skema cdc berisi tabel metadata pengambilan data perubahan dan, setelah tabel sumber diaktifkan untuk mengubah pengambilan data, tabel perubahan individual berfungsi sebagai repositori untuk data perubahan. Skema cdc juga berisi fungsi sistem terkait yang digunakan untuk mengkueri data perubahan.

Mengubah pengambilan data memerlukan penggunaan skema cdc dan pengguna cdc secara eksklusif. Jika skema atau pengguna database bernama cdc saat ini ada dalam database, tangkapan data perubahan tidak dapat diaktifkan untuk database hingga skema dan/atau pengguna dihilangkan atau diganti namanya.

-- ====
-- Enable Database for CDC
-- ====
USE MyDB
GO
EXEC sys.sp_cdc_enable_db
GO

Catatan

Untuk menemukan templat terkait CDC di SQL Server Management Studio, buka Lihat, pilih Penjelajah Templat, lalu pilih Templat SQL Server. Mengubah pengambilan data adalah sub-folder yang berisi templat

Menonaktifkan untuk database

Gunakan sys.sp_cdc_disable_db (Transact-SQL) dalam konteks database untuk menonaktifkan perubahan pengambilan data untuk database. Tidak perlu menonaktifkan CDC untuk tabel individual sebelum Anda menonaktifkan CDC untuk database. Menonaktifkan CDC untuk database menghapus semua metadata pengambilan data perubahan terkait, termasuk pengguna cdc , skema, dan pekerjaan pengambilan data perubahan. Namun, setiap peran gating yang dibuat oleh CDC tidak akan dihapus secara otomatis dan harus dihapus secara eksplisit. Untuk menentukan apakah database mengaktifkan CDC, kueri kolom is_cdc_enabled dalam sys.databases tampilan katalog.

Jika database yang diaktifkan CDC dihilangkan, pekerjaan penangkapan data perubahan akan dihapus secara otomatis.

-- Disable Database for change data capture
USE MyDB
GO
EXEC sys.sp_cdc_disable_db
GO

Aktifkan untuk tabel

Setelah database diaktifkan untuk mengubah pengambilan data, anggota peran database tetap db_owner dapat membuat instans pengambilan untuk tabel sumber individual dengan menggunakan prosedur sys.sp_cdc_enable_tabletersimpan . Untuk menentukan apakah tabel sumber telah diaktifkan untuk mengubah pengambilan data, periksa kolom is_tracked_by_cdc dalam sys.tables tampilan katalog.

Penting

Untuk informasi selengkapnya tentang sys.sp_cdc_enable_table argumen prosedur tersimpan, lihat sys.sp_cdc_enable_table (Transact-SQL).

Opsi berikut dapat ditentukan saat membuat instans pengambilan:

Kolom dalam tabel sumber yang akan diambil.

Secara default, semua kolom dalam tabel sumber diidentifikasi sebagai kolom yang diambil. Jika hanya subset kolom yang perlu dilacak, seperti untuk alasan privasi atau performa, gunakan parameter @captured_column_list untuk menentukan subset kolom.

Grup file untuk memuat tabel perubahan.

Secara default, tabel perubahan terletak di grup file default database. Pemilik database yang ingin mengontrol penempatan masing-masing tabel perubahan dapat menggunakan parameter @filegroup_name untuk menentukan grup file tertentu untuk tabel perubahan yang terkait dengan instans pengambilan. Grup file bernama harus sudah ada. Umumnya, disarankan agar tabel perubahan ditempatkan dalam grup file yang terpisah dari tabel sumber. Lihat templat Aktifkan Tabel Menentukan Opsi Grup File untuk contoh yang memperlihatkan penggunaan parameter @filegroup_name.

-- Enable CDC for a table specifying filegroup
USE MyDB
GO

EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @role_name     = N'MyRole',
    @filegroup_name = N'MyDB_CT',
    @supports_net_changes = 1
GO

Peran untuk mengontrol akses ke tabel perubahan.

Tujuan peran bernama adalah untuk mengontrol akses ke data perubahan. Peran yang ditentukan dapat menjadi peran server tetap yang ada atau peran database. Jika peran yang ditentukan belum ada, peran database dari nama tersebut dibuat secara otomatis. Pengguna harus memiliki izin SELECT pada semua kolom tabel sumber yang diambil. Selain itu, ketika peran ditentukan, pengguna yang bukan anggota peran sysadmin atau db_owner juga harus menjadi anggota peran yang ditentukan.

Jika Anda tidak ingin menggunakan peran pembatasan, atur parameter @role_name secara eksplisit ke NULL. Lihat templat Aktifkan Tabel Tanpa Menggunakan Peran Gating untuk contoh mengaktifkan tabel tanpa peran pembatasan.

-- Enable CDC for a table using a gating role option
USE MyDB
GO
    EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @role_name     = NULL,
    @supports_net_changes = 1
GO

Fungsi untuk mengkueri perubahan bersih.

Instans pengambilan selalu menyertakan fungsi bernilai tabel (TVF) untuk mengembalikan semua entri tabel perubahan yang terjadi dalam interval yang ditentukan. Fungsi ini dinamai dengan menambahkan nama instans pengambilan ke 'cdc.fn_cdc_get_all_changes_''. Untuk informasi selengkapnya, lihat cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL).

Jika parameter @supports_net_changes diatur ke 1, fungsi perubahan bersih juga dibuat untuk instans pengambilan. Fungsi ini menghasilkan hanya satu perubahan untuk setiap baris berbeda yang diubah dalam interval yang ditentukan dalam panggilan. Untuk informasi selengkapnya, lihat cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-SQL).

Untuk mendukung kueri perubahan bersih, tabel sumber harus memiliki kunci primer atau indeks unik untuk mengidentifikasi baris secara unik. Jika indeks unik digunakan, nama indeks harus ditentukan menggunakan parameter @index_name . Kolom yang ditentukan dalam kunci primer atau indeks unik harus disertakan dalam daftar kolom sumber yang akan diambil.

Lihat templat Aktifkan Tabel untuk Semua dan Kueri Perubahan Bersih untuk contoh yang menunjukkan pembuatan instans pengambilan dengan kedua fungsi kueri.

-- Enable CDC for a table for all and net changes queries
USE MyDB
GO
EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @role_name     = N'MyRole',
    @supports_net_changes = 1
GO

Catatan

Jika tangkapan data perubahan diaktifkan pada tabel dengan kunci primer yang ada, dan parameter @index_name tidak digunakan untuk mengidentifikasi indeks unik alternatif, fitur ubah penangkapan data menggunakan kunci utama. Perubahan berikutnya pada kunci primer tidak diizinkan tanpa terlebih dahulu menonaktifkan perubahan pengambilan data untuk tabel. Ini berlaku terlepas dari apakah dukungan untuk kueri perubahan bersih diminta saat tangkapan data perubahan dikonfigurasi. Jika tidak ada kunci primer pada tabel pada saat diaktifkan untuk mengubah pengambilan data, penambahan kunci primer berikutnya diabaikan dengan mengubah pengambilan data. Karena mengubah pengambilan data tidak akan menggunakan kunci utama yang dibuat setelah tabel diaktifkan, kunci dan kolom kunci dapat dihapus tanpa batasan.

Menonaktifkan untuk tabel

Anggota peran database tetap db_owner dapat menghapus instans pengambilan untuk tabel sumber individual dengan menggunakan prosedur sys.sp_cdc_disable_tabletersimpan seperti. To determine whether a source table is currently enabled for change data capture, examine the **is_tracked_by_cdc** column in the tampilan katalog sys.tables. Jika tidak ada tabel yang diaktifkan untuk database setelah pennonaktifkan berlangsung, pekerjaan penangkapan data perubahan juga dihapus.

Jika tabel yang didukung pengambilan data perubahan dihapus, metadata pengambilan data perubahan yang terkait dengan tabel akan dihapus secara otomatis.

Lihat Nonaktifkan Instans Pengambilan untuk templat Tabel untuk contoh menonaktifkan tabel.

-- Disable a Capture Instance for a table
USE MyDB
GO
    EXEC sys.sp_cdc_disable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @capture_instance = N'dbo_MyTable'
GO

Baca juga