Bagikan melalui


Mengubah pengambilan data (CDC) dengan Azure SQL Database

Berlaku untuk: Azure SQL Database

Dalam artikel ini, pelajari cara mengubah pengambilan data (CDC) diimplementasikan di Azure SQL Database untuk merekam aktivitas pada database saat tabel dan baris telah dimodifikasi. Untuk detail tentang fitur CDC, termasuk cara penerapannya di SQL Server dan Azure SQL Managed Instance, lihat CDC dengan SQL Server.

Gambaran Umum

Di Azure SQL Database, penjadwal tangkapan data perubahan menggantikan pekerjaan SQL Server Agent yang menangkap dan membersihkan data perubahan untuk tabel sumber. Penjadwal menjalankan proses pengambilan dan pembersihan secara otomatis dalam cakupan database, memastikan keandalan dan performa tanpa dependensi eksternal. Pengguna mempertahankan opsi untuk memulai proses pengambilan dan pembersihan secara manual sesuai kebutuhan.

Contoh yang baik dari konsumen data yang digunakan oleh teknologi ini adalah aplikasi ekstraksi, transformasi, dan pemuatan (ETL). Aplikasi ETL secara bertahap memuat data perubahan dari tabel sumber SQL Server ke gudang data atau data mart. Meskipun representasi tabel sumber dalam gudang data harus mencerminkan perubahan dalam tabel sumber, teknologi end-to-end yang me-refresh replika sumber tidak sesuai. Sebagai gantinya, Anda memerlukan aliran data perubahan yang andal yang terstruktur sehingga konsumen dapat menerapkannya ke representasi target data yang berbeda. Tangkapan data perubahan SQL Server menyediakan teknologi ini.

Untuk mempelajari selengkapnya tentang mengubah pengambilan data di Azure SQL Database, lihat episode Data Terekspos ini:

Aliran Data

Ilustrasi berikut menunjukkan aliran data utama untuk mengubah pengambilan data dengan Azure SQL Database:

Diagram bagan alur yang menggambarkan aliran data untuk mengubah pengambilan data.

Prasyarat

Izin

Peran db_owner ini diperlukan untuk mengaktifkan perubahan pengambilan data untuk Azure SQL Database.

Persyaratan komputasi Azure SQL Database

Anda dapat mengaktifkan CDC di Azure SQL Database untuk tingkat layanan apa pun dalam model pembelian berbasis vCore, untuk database tunggal dan kumpulan elastis.

Untuk database dalam model pembelian DTU, CDC didukung untuk database di tingkat S3 atau yang lebih tinggi. Tingkat subkore (Dasar, S0, S1, S2) tidak didukung untuk CDC.

Mengaktifkan CDC untuk Azure SQL Database

Sebelum dapat membuat instans pengambilan untuk tabel individual, Anda harus mengaktifkan CDC untuk Azure SQL Database Anda.

Untuk mengaktifkan CDC, sambungkan ke Azure SQL Database Anda melalui Azure Data Studio atau SQL Server Management Studio (SSMS). Buka jendela kueri baru, lalu aktifkan CDC dengan menjalankan T-SQL berikut:

EXEC sys.sp_cdc_enable_db;
GO

Catatan

Untuk menentukan apakah database sudah diaktifkan, kueri is_cdc_enabled kolom dalam sys.databases tampilan katalog.

Saat mengubah pengambilan data diaktifkan untuk database, cdc schematabel metadata , cdc user, dan objek sistem lainnya dibuat untuk database. cdc schema berisi tabel metadata pengambilan data perubahan dan, setelah cdc diaktifkan untuk tabel sumber, tabel perubahan individual berfungsi sebagai repositori untuk mengubah data. juga cdc schema berisi fungsi sistem terkait yang digunakan untuk mengkueri data perubahan.

Penting

Mengubah tangkapan data memerlukan penggunaan eksklusif dan cdc schema cdc user. Jika skema atau pengguna database bernama cdc saat ini ada dalam database, Anda tidak dapat mengaktifkan cdc untuk database hingga skema dan/atau pengguna dihilangkan atau diganti namanya.

Mengaktifkan CDC untuk tabel

Setelah mengaktifkan CDC untuk Azure SQL Database, Anda kemudian dapat mengaktifkan CDC di tingkat tabel dengan memilih satu atau beberapa tabel untuk melacak perubahan data. Buat instans pengambilan untuk tabel sumber individual dengan menggunakan prosedur tersimpan sys.sp_cdc_enable_table.

Untuk mengaktifkan CDC untuk tabel, jalankan T-SQL berikut:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL;
GO

Tip

Contoh sebelumnya tidak menggunakan @role_name eksplisit dengan mengatur parameter ke NULL, tetapi Anda dapat menggunakan peran pembatasan untuk membatasi akses ke data perubahan.

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.

Untuk mengaktifkan CDC untuk daftar kolom tertentu dalam tabel, jalankan T-SQL berikut:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL,
    @captured_column_list = N'Column1, Column2, Column3';
GO

Tip

Perhatikan bahwa contoh sebelumnya tidak menggunakan @role_name eksplisit dan dengan mengatur parameter ke NULL, tetapi Anda dapat menggunakan peran pembatasan untuk membatasi akses ke data perubahan.

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.

Untuk mengaktifkan CDC untuk tabel yang menentukan peran pembatasan, jalankan T-SQL berikut:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = N'RoleName'
GO

Jika Anda tidak ingin menggunakan peran pembatasan, atur parameter @role_name secara eksplisit ke NULL.

Fungsi untuk mengkueri perubahan bersih

Instans pengambilan selalu menyertakan fungsi bernilai tabel untuk mengembalikan semua entri tabel perubahan yang terjadi dalam interval yang ditentukan. Fungsi ini dinamai dengan menambahkan nama instans tangkapan ke cdc.fn_cdc_get_all_changes_. Untuk informasi selengkapnya, lihat cdc.fn_cdc_get_all_changes.

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.

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.

Untuk mengaktifkan CDC untuk tabel dengan dukungan untuk perubahan bersih, jalankan T-SQL berikut:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL,
    @supports_net_changes = 1
GO

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 menggunakan kunci utama yang dibuat setelah tabel diaktifkan, kunci dan kolom kunci dapat dihapus tanpa batasan.

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

Tip

Untuk menentukan apakah tabel sumber telah diaktifkan untuk mengubah pengambilan data, periksa is_tracked_by_cdc kolom dalam sys.tables tampilan katalog.

Menonaktifkan CDC untuk Azure SQL Database

Menonaktifkan CDC untuk Azure SQL Database Anda menghapus semua metadata penangkapan data perubahan terkait, termasuk cdc usercdc schemaproses penangkapan dan pembersihan penjadwal eksternal. Namun, peran pembatasan apa pun yang dibuat oleh tangkapan data perubahan tidak dihapus secara otomatis, dan harus dihapus secara eksplisit.

Catatan

Untuk menentukan apakah database mengaktifkan cdc, kueri is_cdc_enabled kolom dalam sys.databases tampilan katalog.

Tidak perlu menonaktifkan CDC untuk tabel individual sebelum Anda menonaktifkan CDC di tingkat database.

Untuk menonaktifkan CDC di tingkat database, jalankan T-SQL berikut:

EXEC sys.sp_cdc_disable_db;
GO

Tip

Setelah menonaktifkan CDC di tingkat database, Anda harus mengaktifkan CDC untuk tabel individual lagi jika Anda ingin menggunakan fitur CDC sekali lagi.

Mengelola CDC

Di Azure SQL Database, CDC adalah fitur penting untuk melacak dan mengelola perubahan dalam tabel database Anda. Tidak seperti lingkungan SQL Server tradisional, Azure SQL Database menggunakan penjadwal tangkapan data perubahan untuk menangani tugas CDC alih-alih mengandalkan pekerjaan SQL Server Agent. Penjadwal ini secara otomatis memulai proses pengambilan dan pembersihan berkala untuk tabel CDC dalam database Anda, memastikan keandalan dan performa tanpa dependensi eksternal.

Pengambilan dan pembersihan CDC otomatis

Pekerjaan penangkapan CDC di Azure SQL Database beroperasi dengan mulus, berjalan setiap 20 detik untuk melacak perubahan secara efisien. Secara bersamaan, pekerjaan pembersihan berjalan setiap jam, memastikan tabel CDC Anda tetap dioptimalkan. Pengguna dapat yakin bahwa manajemen CDC terjadi secara otomatis tanpa intervensi manual.

Penting

Jika database tanpa server mengaktifkan CDC dan dalam keadaan dijeda, CDC tidak berjalan. Pemindaian CDC tidak akan memengaruhi fitur jeda otomatis.

Kontrol CDC manual

Meskipun CDC berjalan secara otomatis, pengguna mempertahankan fleksibilitas untuk melakukan operasi CDC manual sesuai permintaan. Prosedur sp_cdc_scan dan sp_cdc_cleanup_change_tables memungkinkan Anda memicu tugas penangkapan dan pembersihan sesuai kebutuhan.

Memantau CDC

Azure SQL Database menyediakan alat berharga untuk memantau aktivitas CDC. Dua tampilan manajemen dinamis, sys.dm_cdc_log_scan_sessions dan sys.dm_cdc_errors, menawarkan wawasan tentang proses CDC, memastikan Anda memiliki visibilitas penuh ke dalam perubahan data Anda.

Kustomisasi CDC

Meskipun Azure SQL Database menyederhanakan manajemen CDC, beberapa batasan ada:

  • Frekuensi pekerjaan penangkapan dan pembersihan CDC tidak dapat disesuaikan.
  • Nilai pollinginterval dan continuous untuk pekerjaan penangkapan dan pembersihan tidak berlaku di Azure SQL Database.
  • Menghapus entri pekerjaan pengambilan dari cdc.cdc_jobs tabel tidak menghentikan pekerjaan pengambilan latar belakang.
  • Menghilangkan entri pekerjaan pembersihan akan menghentikan pekerjaan pembersihan.
  • Tabel cdc.cdc_jobs berada dalam cdc skema, bukan msdb.

Terlepas dari batasan ini, Anda masih dapat menyesuaikan opsi berikut:

  • cdc.cdc_jobs Kueri tabel untuk detail konfigurasi saat ini.
  • Sesuaikan maxtrans opsi dan maxscans menggunakan prosedur tersimpan sp_cdc_change_job .
  • Kelola pekerjaan dengan menggunakan sp_cdc_drop_job dan sp_cdc_add_job sesuai kebutuhan.

Pertimbangan dan rekomendasi performa

Mengaktifkan penangkapan data perubahan untuk Azure SQL Database memiliki efek performa yang sebanding dengan mengaktifkan CDC untuk SQL Server atau Azure SQL Managed Instance. Namun, beberapa faktor memengaruhi efek performa saat mengaktifkan CDC, termasuk:

  • Jumlah tabel yang diaktifkan CDC di Azure SQL Database Anda.

  • Frekuensi perubahan dalam tabel yang dilacak, atau volume transaksi. Transaksi aktif mencegah pemotongan log hingga transaksi terapkan dan pemindaian CDC mengejar ketinggalan, atau transaksi dibatalkan. Ini dapat mengakibatkan log transaksi mengisi lebih dari biasanya dan harus dipantau sehingga log transaksi tidak terisi.

  • Pastikan ada ruang kosong yang tersedia di database sumber, karena artefak CDC (misalnya, tabel CT, cdc_jobs dll.) disimpan dalam database yang sama.

  • Apakah Anda memiliki database tunggal atau merupakan bagian dari kumpulan elastis.

  • Database dalam sumber daya berbagi kumpulan elastis di antara mereka (seperti ruang disk), oleh karena itu mengaktifkan CDC pada beberapa database menjalankan risiko mencapai ukuran maksimum ukuran disk kumpulan elastis. Pantau sumber daya seperti CPU, memori, dan throughput log. Untuk informasi selengkapnya, lihat Manajemen sumber daya di kumpulan elastis yang padat.

  • Saat berhadapan dengan database di kumpulan elastis, sangat penting untuk mempertimbangkan jumlah tabel yang diaktifkan CDC dan jumlah database tempat tabel tersebut berada. Sebaiknya menilai beban kerja Anda dan mengambil langkah-langkah yang diperlukan, seperti menskalakan kumpulan elastis. Untuk informasi selengkapnya, lihat Menskalakan sumber daya kumpulan elastis di Azure SQL Database.

Penting

Pertimbangan ini adalah panduan umum. Untuk panduan yang tepat untuk mengoptimalkan performa untuk beban kerja tertentu, hubungi dukungan Microsoft.

Pertimbangkan praktik terbaik berikut saat Anda menggunakan CDC dengan Azure SQL Database:

  • Uji beban kerja Anda secara menyeluruh sebelum mengaktifkan CDC pada database dalam produksi untuk membantu Anda menentukan SLO yang sesuai untuk beban kerja Anda. Untuk informasi selengkapnya tentang ukuran komputasi Azure SQL Database, lihat Tingkat layanan.

  • Pertimbangkan untuk menskalakan jumlah vCore atau transisi ke tingkat database yang lebih tinggi, seperti Hyperscale, untuk mempertahankan tingkat performa sebelumnya setelah CDC diaktifkan di Azure SQL Database Anda. Untuk informasi selengkapnya, lihat model pembelian vCore - Azure SQL Database dan tingkat layanan Hyperscale.

  • Pantau pemanfaatan ruang dengan cermat. Untuk informasi selengkapnya, lihat Mengelola ruang file untuk database di Azure SQL Database.

  • Pantau tingkat pembuatan log, untuk informasi selengkapnya, lihat Konsumsi sumber daya berdasarkan beban kerja pengguna dan proses internal.

  • Proses pemindaian dan pembersihan CDC adalah bagian dari beban kerja database reguler Anda (juga menggunakan sumber daya). Tergantung pada volume transaksi, penurunan performa dapat substansial karena proses pemindaian dan pembersihan tidak mengikuti beban kerja karena seluruh baris ditambahkan untuk mengubah tabel dan untuk operasi pembaruan, preimage juga disertakan. Kami menyarankan untuk menilai beban kerja Anda dan mengambil langkah-langkah yang diperlukan sesuai dengan rekomendasi sebelumnya. Untuk informasi selengkapnya, lihat bagian manajemen CDC di artikel ini.

Penting

Penjadwal menjalankan pengambilan dan pembersihan secara otomatis dalam SQL Database. Pekerjaan penangkapan CDC berjalan setiap 20 detik, dan pekerjaan pembersihan berjalan setiap jam.

  • Untuk mencegah peningkatan latensi, pastikan jumlah database yang diaktifkan CDC tidak melampaui jumlah vCore yang dialokasikan ke kumpulan elastis. Untuk mempelajari lebih lanjut, lihat Manajemen sumber daya di kumpulan elastis yang padat.

  • Berdasarkan beban kerja dan tingkat performa Anda, pertimbangkan untuk mengubah periode retensi CDC menjadi jumlah yang lebih kecil dari default tiga hari untuk memastikan bahwa proses pembersihan dapat mengimbangi perubahan dalam tabel perubahan. Mempertahankan periode retensi yang lebih rendah sambil memantau ukuran database adalah praktik yang baik.

  • Tidak ada Perjanjian Tingkat Layanan (SLA) yang disediakan saat perubahan diisi ke tabel perubahan. Latensi sub-detik juga tidak didukung.

Masalah dan batasan yang diketahui

Pemotongan log agresif

Saat Anda mengaktifkan ubah penangkapan data (CDC) di Azure SQL Database, fitur pemotongan log agresif dari Accelerated Database Recovery (ADR) dinonaktifkan. Ini karena pemindaian CDC mengakses log transaksi database. Transaksi aktif mencegah pemotongan log transaksi hingga transaksi terapkan dan pemindaian CDC mengejar ketinggalan, atau transaksi dibatalkan. Ini dapat mengakibatkan log transaksi mengisi lebih dari biasanya dan harus dipantau sehingga log transaksi tidak terisi.

Saat mengaktifkan CDC, sebaiknya gunakan opsi indeks yang dapat dilanjutkan saat Anda membuat atau membangun ulang indeks. Indeks yang dapat dilanjutkan tidak membuka transaksi yang berjalan lama, dan memungkinkan pemotongan log selama operasi untuk manajemen ruang log yang lebih baik. Untuk informasi selengkapnya, lihat Panduan untuk operasi indeks online - Pertimbangan Indeks yang Dapat Dilanjutkan.

Tingkat layanan Azure SQL Database

Meskipun CDC didukung untuk database dan kumpulan elastis di tingkat layanan apa pun dalam model pembelian berbasis vCore, database yang lebih rendah dari S3 (seperti Dasar, S0, S1, S2) tidak didukung dalam model pembelian DTU.

Batas log Azure SQL Database

Pemulihan Database yang Dipercepat dan CDC tidak kompatibel di Azure SQL Database. Ini karena pemindaian CDC secara aktif mengakses dan berinteraksi dengan log transaksi database, yang dapat bertentangan dengan perilaku pemotongan log Agresif ADR.

Untuk mencegah masalah skalabilitas dan manajemen ruang, pantau Azure SQL Database Anda dengan cermat dan pertimbangkan penskalaan ke tingkat database yang lebih tinggi, dan izinkan log transaksi Anda tumbuh sesuai dengan kebutuhan beban kerja Anda.

Tip

Jika beban kerja Anda menuntut performa keseluruhan yang lebih tinggi karena throughput log transaksi yang lebih tinggi dan waktu penerapan transaksi yang lebih cepat, gunakan tingkat layanan Hyperscale.

Penyesuaian pengambilan dan pembersihan

Mengonfigurasi frekuensi pengambilan dan proses pembersihan untuk CDC di Azure SQL Database tidak dimungkinkan. Penjadwal menjalankan pengambilan dan pembersihan secara otomatis.

Failover di Azure SQL Database

Jika skenario failover lokal atau GeoDR, jika database Anda mengaktifkan CDC, proses pengambilan dan pembersihan perubahan data akan terjadi secara otomatis pada database utama baru setelah failover terjadi.

Microsoft Entra ID

Catatan

ID Microsoft Entra sebelumnya dikenal sebagai Azure Active Directory (Azure AD).

Jika Anda membuat database di Azure SQL Database sebagai pengguna Microsoft Entra dan mengaktifkan CDC di dalamnya, pengguna SQL (misalnya, bahkan satu dalam sysadmin peran) tidak dapat menonaktifkan/membuat perubahan pada artefak CDC. Namun, pengguna Microsoft Entra lain dapat mengaktifkan/menonaktifkan CDC pada database yang sama.

Demikian pula, jika Anda membuat database sebagai pengguna SQL, mengaktifkan/menonaktifkan pengambilan data perubahan karena pengguna Microsoft Entra tidak berfungsi.

Mengaktifkan CDC gagal jika Anda membuat database di Azure SQL Database sebagai pengguna Microsoft Entra, jangan aktifkan CDC, lalu coba aktifkan CDC setelah memulihkan database.

Untuk mengatasi masalah ini, sambungkan ke database Anda dengan akun admin Microsoft Entra Anda, dan jalankan T-SQL berikut:

ALTER AUTHORIZATION ON DATABASE::[<restored_db_name>] TO [<azuread_admin_login_name>];

EXEC sys.sp_cdc_enable_db;

Pemulihan titik waktu (PitR)

Jika Anda mengaktifkan CDC di Azure SQL Database anda sebagai pengguna SQL, point-in-time-restore (PITR) mempertahankan CDC dalam database yang dipulihkan, kecuali jika dipulihkan ke SLO subkore. Jika dipulihkan ke SLO subkore, artefak CDC tidak tersedia.

Jika Anda mengaktifkan CDC pada database Anda sebagai pengguna Microsoft Entra, pemulihan point-in-time (PITR) tidak dimungkinkan ke SLO subkore. Pulihkan database ke SLO yang sama atau lebih tinggi dengan sumbernya, lalu nonaktifkan CDC jika perlu.

Pemecahan Masalah

Bagian ini menyediakan panduan dan langkah-langkah pemecahan masalah yang terkait dengan CDC di Azure SQL Database. Kesalahan terkait CDC mungkin menghalangi fungsi yang tepat dari proses pengambilan dan menyebabkan perluasan log transaksi database.

Untuk memeriksa kesalahan ini, Anda bisa mengkueri tampilan manajemen dinamis sys.dm_cdc_errors. sys.dm_cdc_errors Jika tampilan manajemen dinamis mengembalikan kesalahan apa pun, lihat bagian berikut untuk memahami langkah-langkah mitigasi.

Catatan

Untuk informasi selengkapnya tentang kode kesalahan tertentu, lihat Peristiwa dan kesalahan Mesin Database.

Ini adalah berbagai kategori pemecahan masalah yang disertakan dalam bagian ini:

Kategori Deskripsi
Metadata dimodifikasi Menyertakan informasi tentang cara mengurangi masalah yang terkait dengan CDC ketika tabel terlacak telah dimodifikasi atau dihilangkan.
Manajemen ruang database Menyertakan informasi tentang cara mengurangi masalah ketika ruang database telah habis.
Batasan CDC Menyertakan informasi tentang cara mengurangi masalah yang disebabkan oleh keterbatasan CDC.

Metadata dimodifikasi

Kesalahan 200/208 - Nama objek tidak valid

  • Penyebab: Kesalahan mungkin terjadi ketika metadata CDC telah dihilangkan. Agar CDC berfungsi dengan baik, Anda tidak boleh memodifikasi metadata CDC apa pun secara manual seperti CDC schema, tabel perubahan, prosedur tersimpan sistem CDC, izin default cdc user (sys.database_principals) atau mengganti nama cdc user.

  • Rekomendasi: Untuk mengatasi masalah ini, Anda perlu menonaktifkan dan mengaktifkan kembali CDC untuk database Anda. Saat mengaktifkan perubahan pengambilan data untuk database, ia membuat skema cdc, pengguna cdc, tabel metadata, dan objek sistem lainnya untuk database. Anda harus mengaktifkan kembali CDC secara manual untuk tabel individual setelah CDC diaktifkan untuk database.

Catatan

Objek yang ditemukan dalam tampilan katalog sistem sys.objects dengan is_ms_shipped=1 dan schema_name=cdc tidak boleh diubah atau dihilangkan.

Kesalahan 1202 - Prinsipal database tidak ada, atau pengguna bukan anggota

  • Penyebab: Kesalahan mungkin terjadi ketika pengguna CDC telah dihilangkan. Agar CDC berfungsi dengan baik, Anda tidak boleh mengubah metadata CDC apa pun secara manual seperti CDC schema, tabel perubahan, prosedur tersimpan sistem CDC, izin default cdc user (sys.database_principals) atau mengganti nama cdc user.

  • Rekomendasi: Pastikan cdc pengguna ada di database Anda, dan juga memiliki peran yang db_owner ditetapkan. Untuk membuat cdc pengguna, lihat contoh Membuat pengguna cdc dan menetapkan peran.

Kesalahan 15517 - Tidak dapat dijalankan sebagai prinsipal database karena prinsipal tidak ada

  • Penyebab: Jenis prinsipal ini tidak dapat ditiru, atau Anda tidak memiliki izin. Kesalahan mungkin terjadi ketika metadata CDC telah dihilangkan atau bukan lagi bagian db_owner dari peran. Agar CDC berfungsi dengan baik, Anda tidak boleh memodifikasi metadata CDC apa pun secara manual seperti CDC schema, tabel perubahan, prosedur tersimpan sistem CDC, izin default cdc user (sys.database_principals) atau mengganti nama cdc user.

  • Rekomendasi: Pastikan cdc pengguna ada di database Anda, dan juga memiliki peran yang db_owner ditetapkan. Untuk membuat cdc pengguna, lihat contoh Membuat pengguna cdc dan menetapkan peran.

Kesalahan 18807 - Tidak dapat menemukan ID objek untuk tabel sistem replikasi

  • Penyebab: Kesalahan ini terjadi ketika SQL Server tidak dapat menemukan atau mengakses tabel sistem replikasi '%s.' Ini bisa karena tabel hilang atau tidak dapat dijangkau. CDC berfungsi dengan baik, Anda tidak boleh memodifikasi metadata CDC apa pun secara manual seperti CDC schema, tabel perubahan, prosedur tersimpan sistem CDC, izin default cdc user (sys.database_principals) atau mengganti nama cdc user.

  • Rekomendasi: Verifikasi bahwa tabel sistem ada dan dapat diakses dengan mengkueri tabel secara langsung. Kueri katalog sistem sys.objects, atur klausa predikat dengan is_ms_shipped=1 dan schema_name=cdc untuk mencantumkan semua objek terkait CDC. Jika kueri tidak mengembalikan objek apa pun, Anda harus menonaktifkan lalu mengaktifkan kembali CDC untuk database Anda. Mengaktifkan ubah pengambilan data untuk database membuat cdc schematabel metadata , cdc user, dan objek sistem lainnya untuk database. Anda harus mengaktifkan kembali CDC secara manual untuk tabel individual setelah CDC diaktifkan untuk database.

Kesalahan 21050 - Hanya anggota peran server tetap sysadmin atau db_owner yang dapat melakukan operasi ini

  • Penyebab: Pengguna cdc telah dihapus dari db_owner peran database, atau dari sysadmin peran server.

  • Rekomendasi: Pastikan cdc pengguna memiliki peran yang db_owner ditetapkan. Untuk membuat cdc pengguna, lihat contoh Membuat pengguna cdc dan menetapkan peran.

Manajemen Ruang Database

Kesalahan 1105 - Tidak dapat mengalokasikan ruang untuk objek dalam database karena grup file penuh

  • Penyebab: Kesalahan ini terjadi ketika grup file utama database kehabisan ruang, dan SQL Database tidak dapat mengalokasikan lebih banyak ruang untuk objek (seperti tabel atau indeks) dalam grup file tersebut.

  • Rekomendasi: Untuk mengatasi masalah ini, hapus data yang tidak perlu dalam database Anda untuk mengosongkan ruang. Identifikasi tabel, indeks, atau objek lain yang tidak digunakan dalam grup file yang dapat dihapus dengan aman. Pantau pemanfaatan ruang dengan cermat, untuk informasi selengkapnya, lihat Mengelola ruang file untuk database di Azure SQL Database.

    Jika menghilangkan data/objek yang tidak perlu bukanlah opsi, pertimbangkan untuk menskalakan ke tingkat database yang lebih tinggi.

Penting

Untuk informasi terperinci tentang ukuran komputasi (SLO) Azure SQL Database (database tunggal) lihat Batas sumber daya untuk database tunggal menggunakan model pembelian vCore dan Batas sumber daya untuk database tunggal menggunakan model pembelian DTU - Azure SQL Database.

Kesalahan 1132 - Kumpulan elastis telah mencapai batas penyimpanannya

  • Penyebab: Kesalahan ini terjadi ketika penggunaan penyimpanan di kumpulan elastis Anda telah melebihi batas yang dialokasikan.

  • Rekomendasi: Untuk mengatasi masalah ini, terapkan strategi pengarsipan dan pembersihan data untuk menyimpan hanya data yang diperlukan dalam database yang merupakan bagian dari kumpulan elastis. Pantau pemanfaatan ruang dengan cermat. Untuk informasi selengkapnya, lihat Mengelola ruang file untuk database di Azure SQL Database.

    Jika mengarsipkan data atau menghilangkan data/objek yang tidak perlu bukanlah opsi, pertimbangkan untuk menskalakan ke tingkat database yang lebih tinggi.

Penting

Untuk informasi terperinci tentang ukuran komputasi (SLO) Azure SQL Database (database tunggal) lihat Batas sumber daya untuk kumpulan elastis menggunakan model pembelian vCore dan Batas sumber daya untuk kumpulan elastis menggunakan model pembelian DTU.

Batasan CDC

Kesalahan 2628 - string atau data biner akan dipotong dalam tabel

  • Penyebab: Mengubah ukuran kolom tabel yang diaktifkan CDC menggunakan pernyataan DDL dapat menyebabkan masalah dengan proses pengambilan CDC berikutnya. sys.dm_cdc_errors Tampilan Manajemen Dinamis (DMV) berguna untuk memeriksa CDC apa pun untuk masalah yang dilaporkan, seperti nomor kesalahan 2628 dan 8115.

  • Rekomendasi: Sebelum membuat perubahan pada ukuran kolom, Anda harus menilai apakah perubahan kompatibel dengan data yang ada dalam tabel perubahan CDC. Untuk mengatasi masalah ini, Anda perlu menonaktifkan dan mengaktifkan kembali CDC untuk database Anda. Untuk informasi selengkapnya tentang mengaktifkan CDC untuk database atau tabel, lihat Mengaktifkan CDC untuk Azure SQL Database dan Mengaktifkan CDC untuk bagian tabel di artikel ini.

Kesalahan 22830 - Fungsi bawaan 'SUSER_SNAME' dalam konteks peniruan tidak didukung dalam versi SQL Server ini

  • Penyebab: Kesalahan ini terjadi selama mengaktifkan CDC jika pemicu pengguna ada di database, yang memiliki panggilan ke SUSER_SNAME() pada create_table. Anda dapat mencantumkan pemicu dengan skrip Transact-SQL berikut. Perintah ini memberikan detail pemicu objek dan yang sesuai object_id:

    SELECT name,
        object_id
    FROM sys.triggers
    WHERE parent_class_desc = 'DATABASE'
        AND is_disabled = 0;
    

    Setelah mendapatkan definisi pemicu, Anda dapat mencari panggilan yang dilakukan SYSTEM_USER dengan skrip berikut:

    SELECT OBJECT_DEFINITION(object_id) AS trigger_definition;
    
  • Rekomendasi: Untuk mengatasi masalah ini, ikuti langkah-langkah ini untuk setiap pemicu pengguna yang diperoleh dari skrip sebelumnya.

    • Menonaktifkan pemicu
    • Mengaktifkan CDC
    • Mengaktifkan kembali pemicu

Untuk informasi selengkapnya, lihat MENONAKTIFKAN PEMICU (Transact-SQL).

Kesalahan 913 - Pekerjaan penangkapan CDC gagal saat memproses perubahan untuk tabel dengan jenis data CLR sistem

  • Penyebab: Kesalahan ini terjadi saat mengaktifkan CDC pada tabel dengan jenis data CLR sistem, membuat perubahan DML, lalu membuat perubahan DDL pada tabel yang sama saat pekerjaan penangkapan CDC memproses perubahan yang terkait dengan tabel lain.

  • Rekomendasi: Langkah-langkah yang direkomendasikan adalah menghentikan DML ke tabel, menjalankan pekerjaan penangkapan untuk memproses perubahan, menjalankan DDL untuk tabel, menjalankan pekerjaan pengambilan untuk memproses perubahan DDL, lalu mengaktifkan kembali pemrosesan DML. Untuk informasi selengkapnya, lihat Pekerjaan penangkapan CDC gagal saat memproses perubahan.

Membuat pengguna dan menetapkan peran

cdc user Jika dihapus, Anda dapat menambahkan kembali pengguna secara manual.

Gunakan skrip T-SQL berikut, untuk membuat pengguna (cdc), dan menetapkan peran yang tepat (db_owner).

IF NOT EXISTS (
    SELECT *
    FROM sys.database_principals
    WHERE NAME = 'cdc'
)
BEGIN
    CREATE USER [cdc] WITHOUT LOGIN
    WITH DEFAULT_SCHEMA = [cdc];
END

EXEC sp_addrolemember 'db_owner', 'cdc';

Memeriksa dan menambahkan keanggotaan peran

Untuk memverifikasi apakah cdc pengguna termasuk dalam sysadmin peran atau db_owner , jalankan kueri T-SQL berikut:

EXECUTE AS USER = 'cdc';

SELECT is_srvrolemember('sysadmin'), is_member('db_owner');

cdc Jika pengguna bukan milik salah satu peran, jalankan kueri T-SQL berikut untuk menambahkan db_owner peran kepada cdc pengguna.

EXEC sp_addrolemember 'db_owner' , 'cdc';