Bagikan melalui


Praktik terbaik untuk Sinkronisasi Data Azure SQL

Berlaku untuk:Azure SQL Database

Artikel ini menjelaskan praktik terbaik untuk Sinkronisasi Data Azure SQL.

Untuk melihat ringkasan Sinkronisasi Data SQL, lihat Menyinkronkan data di beberapa cloud dan database lokal dengan Sinkronisasi Data Azure SQL.

Penting

Sinkronisasi Data Azure SQL tidak mendukung Azure SQL Managed Instance atau Azure Synapse Analytics saat ini.

Keamanan dan keandalan

Agen klien

  • Pasang agen klien dengan paling tidak menggunakan akun pengguna dengan hak istimewa yang memiliki akses layanan jaringan.
  • Instal agen klien di server yang berbeda dari tempat SQL Server diinstal.
  • Jangan mendaftarkan database lokal dengan lebih dari satu agen.
    • Hindari ini meskipun Anda menyinkronkan tabel yang berbeda untuk grup sinkronisasi yang berbeda.
    • Mendaftarkan database lokal dengan beberapa agen klien menimbulkan tantangan ketika Anda menghapus salah satu grup sinkronisasi.

Akun database dengan hak istimewa yang paling tidak diperlukan

  • Untuk penyiapan sinkronisasi:

    • Izin SQL Server: CREATE/ALTER TABLE, ALTER DATABASE, CREATE PROCEDURE, SELECT/ALTER SCHEMA, CREATE TYPE. Izin ini disertakan (bersama dengan izin lain) dalam peran ddl_admindatabase bawaan .
    • Pada tingkat grup sumber daya, keanggotaan dalam peran Kontributor SQL DB diperlukan. Untuk informasi selengkapnya, lihat Menetapkan peran Azure menggunakan portal Microsoft Azure. Keanggotaan dalam peran yang lebih luas seperti Kontributor atau Pemilik juga berfungsi, jika sudah ditetapkan.
    • Izin di tingkat langganan seharusnya tidak diperlukan, tetapi dapat menyediakan cara yang disederhanakan (meskipun tidak sedikit diperlukan) untuk memberikan izin yang diperlukan untuk beberapa implementasi Azure Data Sync dalam langganan. API asli yang tidak digunakan lagi memerlukan izin Azure RBAC ini, tetapi tidak boleh lagi digunakan.
      • "Microsoft.Sql/locations/syncMemberOperationResults/read"
      • "Microsoft.Sql/locations/syncAgentOperationResults/read"
      • "Microsoft.Sql/locations/syncGroupOperationResults/read"
  • Untuk sinkronisasi yang sedang berlangsung.

    • Izin SQL Server: izin SELECT, INSERT, UPDATE, dan DELETE pada tabel pengguna yang dipilih untuk sinkronisasi. Izin EXECUTE pada jenis tabel yang ditentukan pengguna.
    • Izin SQL Server: IZIN SELECT, INSERT, UPDATE, dan DELETE pada metadata sinkronisasi dan tabel pelacakan yang dibuat sistem. Izin EXECUTE pada prosedur tersimpan yang dibuat oleh layanan.
      • DataSync Skema digunakan untuk objek yang dibuat sistem di database hub dan anggota.
      • dss Skema dan TaskHosting digunakan untuk objek yang dibuat sistem dalam database metadata sinkronisasi.
  • Untuk pencabutan akses.

    • Izin SQL Server: UBAH pada semua tabel bagian sinkronisasi; SELECT dan DELETE pada tabel metadata sinkronisasi; CONTROL pada tabel pelacakan sinkronisasi, prosedur tersimpan, dan jenis yang ditentukan pengguna.
    • Untuk pembersihan, hapus objek yang dibuat sistem dalam DataSyncskema , dss, dan TaskHosting .

Azure SQL Database hanya mendukung satu set info masuk. Untuk menyelesaikan tugas-tugas tersebut dalam batasan ini, pertimbangkan pilihan berikut:

  • Ubah info masuk untuk fase yang berbeda (misalnya, info masuk1 untuk penyiapan dan info masuk2 untuk yang sedang berlangsung).
  • Mengubah izin info masuk (artinya, mengubah izin setelah sinkronisasi disiapkan).

Pengauditan

Disarankan untuk mengaktifkan audit pada tingkat database dalam grup sinkronisasi. Pelajari cara mengaktifkan audit di database Azure SQL Anda atau mengaktifkan audit di database SQL Server Anda.

Konfigurasi

Pertimbangan dan batasan database

Ukuran database

Saat Anda membuat database baru, atur ukuran maksimum sehingga selalu lebih besar dari database yang Anda sebarkan. Jika Anda tidak mengatur ukuran maksimum menjadi lebih besar dari database yang disebarkan, sinkronisasi gagal. Meskipun Sinkronisasi Data SQL tidak menawarkan peningkatan otomatis, Anda ALTER DATABASE dapat menjalankan perintah untuk meningkatkan ukuran database setelah dibuat. Pastikan Anda tetap berada dalam batas ukuran database.

Penting

Sinkronisasi Data SQL menyimpan metadata tambahan dengan setiap database. Pastikan Anda memperhitungkan metadata ini saat menghitung ruang yang diperlukan. Jumlah overhead yang ditambahkan terkait dengan lebar tabel (misalnya, tabel sempit membutuhkan lebih banyak overhead) dan jumlah lalu lintas.

Pertimbangan dan batasan tabel

Memilih tabel

Anda tidak perlu menyertakan semua tabel yang ada dalam database dalam grup sinkronisasi. Tabel yang Anda sertakan dalam grup sinkronisasi memengaruhi efisiensi dan biaya. Sertakan tabel, dan tabel yang bergantung padanya, dalam grup sinkronisasi hanya jika kebutuhan bisnis memerlukannya.

Kunci primer

Setiap tabel dalam grup sinkronisasi harus memiliki kunci primer. Sinkronisasi Data SQL tidak dapat menyinkronkan tabel yang tidak memiliki kunci primer.

Sebelum menggunakan Sinkronisasi Data SQL dalam produksi, uji performa sinkronisasi awal dan berkelanjutan.

Tabel kosong memberikan performa terbaik

Tabel kosong memberikan performa terbaik pada waktu inisialisasi. Jika tabel target kosong, Sinkronisasi Data menggunakan sisipan massal untuk memuat data. Jika tidak, Sinkronisasi Data melakukan perbandingan dan penyisipan baris demi baris untuk memeriksa konflik. Namun, jika performa tidak menjadi perhatian, Anda dapat menyiapkan sinkronisasi antara tabel yang sudah berisi data.

Penyediaan database tujuan

Sinkronisasi Data SQL memberikan provisi otomatis database dasar.

Bagian ini membahas batasan provisi dalam Sinkronisasi Data SQL.

Batasan provisi otomatis

Sinkronisasi Data SQL memiliki batasan berikut untuk provisi otomatis:

  • Pilih hanya kolom yang dibuat di tabel tujuan. Kolom apa pun yang bukan bagian dari grup sinkronisasi tidak tersedia di tabel tujuan.
  • Indeks dibuat hanya untuk kolom yang dipilih. Jika indeks tabel sumber memiliki kolom yang bukan bagian dari grup sinkronisasi, indeks tersebut tidak tersedia di tabel tujuan.
  • Indeks pada kolom jenis XML tidak tersedia.
  • Sinkronisasi Data hanya mendukung dua properti indeks berikut: Unik, Berkluster/Tidak Berkluster. Properti indeks lain seperti IGNORE_DUP_KEY, Di mana predikat filter dll tidak didukung dan indeks tujuan disediakan tanpa properti ini bahkan jika Indeks sumber memiliki properti ini yang ditetapkan.
  • Batasan PEMERIKSAAN tidak tersedia.
  • Pemicu yang ada pada tabel sumber tidak tersedia.
  • Tampilan dan prosedur tersimpan tidak dibuat di database tujuan.
  • ON UPDATE CASCADE dan ON DELETE CASCADE tindakan pada batasan kunci asing tidak dibuat ulang di tabel tujuan.
  • Jika Anda memiliki kolom desimal atau numerik dengan presisi lebih besar dari 28, Sinkronisasi Data SQL mungkin mengalami masalah luapan konversi selama sinkronisasi. Kami merekomendasikan agar Anda membatasi presisi kolom desimal atau numerik menjadi 28 atau kurang.

Rekomendasi

  • Gunakan kemampuan provisi otomatis Sinkronisasi Data SQL hanya ketika Anda mencoba layanan tersebut.
  • Untuk produksi, ketentuan skema database.

Tempat menemukan database hub

Skenario enterprise-ke-cloud

Untuk mengecilkan latensi, dekatkan database hub dengan konsentrasi terbesar lalu lintas database grup sinkronisasi.

Skenario cloud-ke-cloud

  • Ketika semua database dalam grup sinkronisasi berada dalam satu pusat data, hub harus berada di pusat data yang sama. Konfigurasi ini mengurangi latensi dan biaya transfer data antar pusat data.
  • Saat database dalam grup sinkronisasi berada di beberapa pusat data, hub harus terletak di pusat data yang sama dengan sebagian besar database dan lalu lintas database.

Skenario campuran

Terapkan panduan sebelumnya ke konfigurasi grup sinkronisasi kompleks, seperti skenario yang merupakan campuran dari skenario enterprise-ke-cloud dan cloud-ke-cloud.

Sinkronisasi

Hindari sinkronisasi awal yang lambat dan mahal

Di bagian ini, kita membahas sinkronisasi awal grup sinkronisasi. Pelajari cara untuk membantu mencegah sinkronisasi awal membutuhkan waktu lebih lama dan lebih mahal dari yang diperlukan.

Cara kerja sinkronisasi awal

Saat Anda membuat grup sinkronisasi, mulai dengan data hanya dalam satu database. Jika Anda memiliki data dalam beberapa database, Sinkronisasi Data SQL menganggap setiap baris sebagai konflik yang perlu diselesaikan. Resolusi konflik ini menyebabkan sinkronisasi awal berjalan lambat. Jika Anda memiliki data dalam beberapa database, sinkronisasi awal mungkin memakan waktu antara beberapa hari dan beberapa bulan, bergantung pada ukuran database.

Jika database berada di pusat data yang berbeda, setiap baris harus melakukan perjalanan di antara pusat data yang berbeda. Ini meningkatkan biaya sinkronisasi awal.

Rekomendasi

Jika memungkinkan, mulai dengan data hanya di salah satu database grup sinkronisasi.

Desain untuk menghindari perulangan sinkronisasi

Perulangan sinkronisasi terjadi ketika ada referensi melingkar dalam grup sinkronisasi. Dalam skenario itu, setiap perubahan dalam satu database direplikasi tanpa henti dan melingkar melalui database dalam grup sinkronisasi.

Pastikan Anda menghindari perulangan sinkronisasi, karena menyebabkan penurunan kinerja dan mungkin secara signifikan meningkatkan biaya.

Perubahan yang gagal disebarkan

Alasan perubahan gagal disebarluaskan

Perubahan mungkin gagal disebarluaskan karena salah satu alasan berikut:

  • Skema/ketidakcocokan datatype.
  • Menyisipkan null dalam kolom yang tidak dapat diubah ke null.
  • Melanggar batasan kunci asing.

Apa yang terjadi ketika perubahan gagal disebarluaskan?

  • Grup Sinkronisasi menampilkan bahwa grup berada dalam status Peringatan.
  • Detail tercantum di penampil log antarmuka pengguna portal.
  • Jika masalah tidak diselesaikan dalam 45 hari, database menjadi kedaluwarsa.

Catatan

Perubahan ini tidak pernah menyebar. Satu-satunya cara untuk memulihkan skenario ini adalah dengan membuat ulang grup sinkronisasi.

Rekomendasi

Pantau grup sinkronisasi dan kesehatan database secara teratur melalui portal dan antarmuka log.

Pemeliharaan

Hindari database dan grup sinkronisasi yang kedaluwarsa

Grup sinkronisasi atau database dalam grup sinkronisasi bisa kedaluwarsa. Saat status grup sinkronisasi sudah kedaluwarsa, status grup sinkronisasi berhenti berfungsi. Saat status database sudah kedaluwarsa, data mungkin hilang. Yang terbaik adalah menghindari skenario ini alih-alih mencoba memulihkan diri darinya.

Hindari database yang sudah kedaluwarsa

Status database diatur ke Kedaluwarsa saat telah offline selama 45 hari atau lebih. Untuk menghindari status Kedaluwarsa pada database, pastikan tidak ada database yang offline selama 45 hari atau lebih.

Hindari grup sinkronisasi yang sudah kedaluwarsa

Status grup sinkronisasi diatur ke Kedaluwarsa saat setiap perubahan dalam grup sinkronisasi gagal disebarluaskan ke seluruh grup sinkronisasi selama 45 hari atau lebih. Untuk menghindari status Kedaluwarsa pada grup sinkronisasi, periksa log riwayat grup sinkronisasi secara berkala. Pastikan bahwa semua konflik diselesaikan, dan perubahan berhasil disebarluaskan di seluruh database grup sinkronisasi.

Grup sinkronisasi mungkin gagal menerapkan perubahan karena salah satu alasan berikut:

  • Ketidakcocokan skema antar tabel.
  • Ketidakcocokan data antar tabel.
  • Menyisipkan baris dengan nilai null dalam kolom yang tidak memperbolehkan nilai null.
  • Memperbarui baris dengan nilai yang melanggar batasan kunci asing.

Untuk mencegah grup sinkronisasi yang kedaluwarsa:

  • Perbarui skema untuk memperbolehkan nilai yang terdapat dalam baris yang gagal.
  • Perbarui nilai kunci asing untuk menyertakan nilai yang terdapat dalam baris yang gagal.
  • Perbarui nilai data di baris yang gagal sehingga kompatibel dengan skema atau kunci asing dalam database target.

Hindari masalah pencabutan akses

Dalam beberapa keadaan, membatalkan pendaftaran database dengan agen klien dapat menyebabkan sinkronisasi gagal.

Skenario

  1. Grup sinkronisasi A dibuat dengan menggunakan instans Azure SQL Database dan database SQL Server, yang terkait dengan agen lokal 1.
  2. Database lokal yang sama terdaftar dengan agen lokal 2 (agen ini tidak terkait dengan grup sinkronisasi apa pun).
  3. Membatalkan pendaftaran database lokal dari agen lokal 2 menghapus penelusuran dan tabel meta untuk menyinkronkan grup A untuk database lokal.
  4. Sinkronkan operasi grup A gagal, dengan kesalahan ini: "Operasi saat ini tidak dapat diselesaikan karena database tidak disediakan untuk disinkronkan atau Anda tidak memiliki izin ke tabel konfigurasi sinkronisasi."

Solusi

Untuk menghindari skenario ini, jangan mendaftarkan database dengan lebih dari satu agen.

Untuk pulih dari skenario ini:

  1. Hapus database dari setiap grup sinkronisasi tempat database berada.
  2. Tambahkan kembali database ke setiap grup sinkronisasi tempat Anda menghapusnya.
  3. Terapkan setiap grup sinkronisasi yang terpengaruh (tindakan ini memprovisikan database).

Memodifikasi grup sinkronisasi

Jangan mencoba menghapus database dari grup sinkronisasi lalu mengedit grup sinkronisasi tanpa terlebih dahulu menerapkan salah satu perubahan.

Sebagai gantinya, pertama-tama hapus database dari grup sinkronisasi. Kemudian, terapkan perubahan dan tunggu deprovisioning selesai. Saat deprovisioning selesai, Anda dapat mengedit grup sinkronisasi dan menerapkan perubahan.

Jika Anda mencoba menghapus database lalu mengedit grup sinkronisasi tanpa terlebih dahulu menerapkan salah satu perubahan, salah satu atau operasi lainnya gagal. Antarmuka portal mungkin menjadi tidak konsisten. Jika ini terjadi, refresh halaman untuk memulihkan status yang benar.

Hindari batas waktu refresh skema

Jika Anda memiliki skema kompleks untuk disinkronkan, Anda mungkin mengalami "batas waktu operasi" selama refresh skema jika database metadata sinkronisasi memiliki SKU yang lebih rendah (misalnya: dasar).

Solusi

Untuk mengurangi masalah ini, pertimbangkan untuk meningkatkan sumber daya database metadata sinkronisasi Anda.

Langkah berikutnya

Untuk informasi selengkapnya tentang SQL Data Sync, lihat:

Untuk informasi selengkapnya tentang SQL Database, lihat: