Apa itu grup ketersediaan yang terkandung?

Berlaku untuk: SQL Server 2022 (16.x)

Grup ketersediaan yang terkandung adalah grup ketersediaan AlwaysOn (AG) yang mendukung:

  • mengelola objek metadata (pengguna, login, izin, pekerjaan SQL Agent, dan sebagainya) di tingkat AG selain tingkat instans.

  • database sistem mandiri khusus dalam AG.

Artikel ini merinci kesamaan, perbedaan, dan fungsionalitas AG yang terkandung.

Gambaran Umum

AG umumnya terdiri dari satu atau beberapa database pengguna yang dimaksudkan untuk beroperasi sebagai grup terkoordinasi, dan yang direplikasi pada beberapa jumlah simpul dalam kluster. Ketika ada kegagalan dalam simpul, atau dalam kesehatan SQL Server pada simpul yang menghosting salinan utama, grup database dipindahkan sebagai unit ke simpul replika lain di AG. Semua database pengguna tetap sinkron di semua replika AG, baik dalam mode sinkron atau asinkron.

Ini berfungsi dengan baik untuk aplikasi yang hanya berinteraksi dengan sekumpulan database pengguna tersebut, tetapi ada tantangan ketika aplikasi juga mengandalkan objek seperti pengguna, login, izin, pekerjaan agen, dll., yang disimpan dalam salah satu database sistem (master atau msdb). Agar aplikasi berfungsi dengan lancar dan dapat diprediksi, admin harus memastikan bahwa setiap perubahan pada objek ini diduplikasi di semua instans replika di AG. Jika instans baru dibawa ke AG, database dapat disemai secara otomatis atau manual dalam proses yang mudah, tetapi kemudian semua penyesuaian database sistem harus dikonfigurasi ulang pada instans baru agar sesuai dengan replika lain.

AG terkandung memperluas konsep grup database yang direplikasi untuk menyertakan bagian database dan msdb yang master relevan. Anggap saja sebagai konteks eksekusi untuk aplikasi menggunakan AG yang terkandung. Idenya adalah bahwa lingkungan AG yang terkandung mencakup pengaturan yang akan memengaruhi aplikasi yang mengandalkannya. Dengan demikian, lingkungan AG yang terkandung menyangkut semua database yang berinteraksi dengan aplikasi, autentikasi yang digunakannya (login, pengguna, izin), pekerjaan terjadwal apa pun yang diharapkan berjalan, dan pengaturan konfigurasi lain yang memengaruhi aplikasi.

Ini berbeda dari database yang terkandung, yang menggunakan mekanisme yang berbeda untuk akun pengguna, menyimpan informasi pengguna dalam database itu sendiri. Database yang berisi hanya mereplikasi login dan pengguna, dan cakupan login atau pengguna yang direplikasi terbatas pada database tunggal tersebut (dan replikanya).

Sebaliknya, dalam AG yang terkandung, Anda dapat membuat pengguna, login, izin, dan sebagainya, di tingkat AG, dan mereka secara otomatis konsisten di seluruh replika di AG, serta konsisten di seluruh database dalam yang berisi AG. Ini menyelamatkan admin dari keramaian untuk membuat perubahan ini sendiri secara manual.

Perbedaan

Ada beberapa perbedaan praktis yang perlu dipertimbangkan saat bekerja dengan AG yang terkandung, seperti pembuatan database sistem yang terkandung, dan memaksa koneksi pada tingkat AG yang terkandung, daripada menyambungkan di tingkat instans.

Database sistem yang terkandung

Masing-masing berisi AG memiliki database sistem dan msdb sendirimaster, dinamai sesuai dengan nama grup ketersediaan. Misalnya, dalam AG MyContainedAGyang terkandung, Anda memiliki database bernama MyContainedAG_master dan MyContainedAG_msdb. Database sistem ini secara otomatis diunggulkan ke replika baru dan pembaruan direplikasi ke database ini sama seperti database lain dalam grup ketersediaan. Ini berarti bahwa ketika Anda menambahkan objek seperti login, atau pekerjaan agen saat terhubung ke AG yang terkandung, ketika AG yang terkandung gagal ke instans lain, menyambungkan ke AG yang terkandung, Anda masih melihat pekerjaan agen, dan dapat mengautentikasi menggunakan login yang dibuat di AG yang terkandung.

Penting

AG terkandung adalah mekanisme untuk menjaga konfigurasi lingkungan eksekusi tetap konsisten di seluruh replika grup ketersediaan. Mereka tidak mewakili batas keamanan. Tidak ada batasan yang menjaga koneksi ke AG yang terkandung agar tidak mengakses database di luar AG, misalnya.

Database sistem dalam AG yang baru dibuat berisi tidak disalin dari instans tempat CREATE AVAILABILITY GROUP perintah dijalankan. Templat awalnya kosong tanpa data apa pun. Segera setelah pembuatan, akun admin pada instans yang membuat AG yang terkandung disalin ke dalam AG masteryang terkandung . Dengan begitu, administrator dapat masuk ke AG yang terkandung dan menyiapkan konfigurasi lainnya. Jika Anda membuat pengguna atau konfigurasi lokal dalam instans Anda, mereka tidak muncul secara otomatis saat Anda membuat database sistem mandiri, dan mereka tidak terlihat saat Anda tersambung ke AG yang terkandung. Anda perlu membuat ulang secara manual dalam database sistem yang terkandung dalam konteks AG yang terkandung. Pengecualian untuk ini adalah bahwa semua login dalam peran sysadmin dalam instans induk disalin ke dalam database spesifik master AG baru.

Memulihkan database sistem yang terkandung

Anda dapat memulihkan database sistem mandiri menggunakan salah satu dari dua cara berbeda.

  • Pulihkan database mandiri menggunakan replika sekunder:

    1. Pulihkan database yang terkandung master dan msdb ke instans server yang menghosting replika sekunder, menggunakan RESTORE WITH NORECOVERY untuk setiap operasi pemulihan. Untuk informasi selengkapnya, lihat Menyiapkan database sekunder untuk grup ketersediaan AlwaysOn.

    2. Gabungkan setiap database yang terkandung ke grup ketersediaan. Untuk informasi selengkapnya, lihat Menggabungkan database sekunder ke grup ketersediaan AlwaysOn.

  • Pulihkan database mandiri dengan menjatuhkan AG yang terkandung:

    1. Hilangkan AG yang terkandung.

    2. Pulihkan yang terkandung master dan msdb database di setiap instans yang berpartisipasi dalam AG yang terkandung.

    3. Buat ulang AG yang terkandung menggunakan node dan nama asli, menggunakan WITH (CONTAINED, REUSE_SYSTEM_DATABASES) sintaks.

Koneksi (lingkungan mandiri)

Penting untuk membedakan perbedaan antara menyambungkan ke instans, dan menyambungkan ke AG yang terkandung. Satu-satunya cara untuk mengakses lingkungan AG yang terkandung adalah dengan menyambungkan ke pendengar AG yang terkandung, atau untuk menyambungkan ke database yang ada di AG yang terkandung.

"Persist Security Info=False;
User ID=MyUser;Password=*****;
Initial Catalog=MyContainedDatabase;
Server=MyServer;"

Di mana MyContainedDatabase adalah database dalam AG terkandung yang ingin Anda berinteraksi.

Ini berarti Anda harus membuat listener untuk AG yang terkandung agar dapat menggunakan AG yang terkandung secara efektif. Jika Anda terhubung ke salah satu instans yang menghosting AG yang terkandung daripada langsung ke AG yang terkandung melalui pendengar, Anda berada di lingkungan instans, dan bukan AG yang terkandung.

Misalnya, jika grup MyContainedAG ketersediaan Anda dihosting di server SERVER\MSSQLSERVER, dan alih-alih menyambungkan ke pendengar MyContainedAG_Listener, Anda terhubung ke instans menggunakan SERVER\MSSQLSERVER, Anda berada di lingkungan instans, dan bukan di lingkungan MyContainedAG. Ini berarti Anda tunduk pada konten (pengguna, izin, pekerjaan, dll.) yang ditemukan dalam database sistem instans. Untuk mengakses konten yang ditemukan dalam database sistem yang terkandung dari AG yang terkandung, sambungkan ke pendengar AG yang terkandung (MyContainedAG_Listenermisalnya) sebagai gantinya. Saat Anda terhubung ke instans melalui pendengar AG yang terkandung, saat berinteraksi dengan master, Anda benar-benar dialihkan ke database yang terkandung master (misalnya, MyContainedAG_master).

Perutean baca-saja dan grup ketersediaan yang terkandung

Jika Anda mengonfigurasi perutean baca-saja untuk mengalihkan koneksi dengan niat baca ke replika sekunder (lihat Mengonfigurasi perutean baca-saja untuk grup ketersediaan AlwaysOn) dan Anda ingin terhubung menggunakan login yang dibuat hanya di AG yang terkandung, ada beberapa pertimbangan tambahan:

  • Anda harus menentukan database yang merupakan bagian dari AG yang terkandung dalam string koneksi
  • Pengguna yang ditentukan dalam string koneksi harus memiliki izin untuk mengakses database dalam AG yang terkandung.

Misalnya dalam string koneksi berikut, di mana AdventureWorks adalah database dalam AG terkandung yang memiliki MyContainedListener, dan di mana MyUser adalah pengguna yang ditentukan dalam AG yang terkandung dan tidak ada instans yang berpartisipasi:

"Persist Security Info=False;
User ID=MyUser;Password=*****;
Initial Catalog=AdventureWorks;
Server=MyContainedListener;
ApplicationIntent=ReadOnly"

String koneksi ini akan membuat Anda terhubung ke sekunder yang dapat dibaca yang merupakan bagian dari konfigurasi Perutean ReadOnly, dan Anda akan berada dalam konteks AG yang terkandung.

Perbedaan antara menyambungkan ke instans dan menyambungkan ke grup ketersediaan yang terkandung

  • Saat tersambung ke AG yang terkandung, pengguna hanya melihat database di AG yang terkandung, ditambah tempdb.
  • Pada tingkat instans, AG master dan msdb nama yang terkandung adalah [contained AG]_master, dan [contained AG]_msdb. Di dalam AG yang terkandung, namanya adalah master dan msdb.
  • ID database untuk AG master yang terkandung berasal 1 dari dalam AG yang terkandung, tetapi sesuatu yang lain saat terhubung ke instans.
  • Meskipun pengguna tidak melihat database di luar AG yang terkandung saat sys.databases tersambung dalam koneksi AG yang terkandung, mereka dapat mengakses database tersebut USE dengan nama tiga bagian, atau melalui perintah .
  • Konfigurasi server melalui sp_configure dapat dibaca dari koneksi AG yang terkandung tetapi hanya dapat ditulis dari tingkat instans.
  • Dari koneksi AG yang terkandung, sysadmin dapat melakukan operasi tingkat instans, seperti mematikan SQL Server.
  • Sebagian besar tingkat database, tingkat titik akhir, atau operasi tingkat AG hanya dapat dilakukan dari koneksi instans, bukan koneksi AG yang terkandung.

Interaksi dengan fitur lain

Ada pertimbangan tambahan saat menggunakan fitur tertentu dengan AG yang terkandung, dan ada beberapa fitur yang saat ini tidak didukung.

Tidak didukung

Saat ini, fitur SQL Server berikut tidak didukung dengan AG yang terkandung:

  • Replikasi SQL Server dari jenis apa pun (transaksional, penggabungan, rekam jepret, dan sebagainya).
  • Grup ketersediaan terdistribusi.
  • Pengiriman log tempat database target berada di AG yang terkandung. Pengiriman log dengan database sumber dalam AG yang terkandung didukung.

Mengubah pengambilan data

Change data capture (CDC) diimplementasikan sebagai pekerjaan SQL Agent, sehingga Agen SQL perlu berjalan pada semua instans dengan replika dalam AG yang terkandung.

Untuk menggunakan ubah pengambilan data dengan AG yang terkandung, sambungkan ke pendengar AG saat Anda mengonfigurasi CDC sehingga metadata CDC dikonfigurasi menggunakan database sistem yang terkandung.

Pengiriman log

Pengiriman log dapat dikonfigurasi jika database sumber berada di AG yang terkandung. Namun, target pengiriman log tidak didukung dalam AG yang terkandung. Selain itu, ada langkah tambahan untuk memodifikasi pekerjaan pengiriman log setelah CDC dikonfigurasi.

Untuk mengonfigurasi pengiriman log dengan AG yang terkandung, ikuti langkah-langkah berikut:

  1. Koneksi ke pendengar AG yang terkandung.
  2. Konfigurasikan pengiriman log seperti biasa.
  3. Setelah pekerjaan pengiriman log dikonfigurasi, ubah pekerjaan untuk terhubung ke pendengar AG yang terkandung sebelum mengambil cadangan.

Enkripsi data transparan (TDE)

Untuk menggunakan enkripsi data transparan (TDE) dengan database dalam AG yang terkandung, instal Database Master Key (DMK) secara manual ke database yang terkandung master dalam AG yang terkandung.

Database yang menggunakan TDE mengandalkan sertifikat dalam master database untuk mendekripsi Kunci Enkripsi Database (DEK). Tanpa sertifikat itu, SQL Server tidak dapat mendekripsi database yang dienkripsi dengan TDE atau membuatnya online. Dalam AG yang terkandung, SQL Server memeriksa kedua master database untuk DMK, master database untuk instans, dan database yang terkandung master dalam AG yang terkandung untuk mendekripsi database. Jika tidak dapat menemukan sertifikat di salah satu lokasi, maka SQL Server tidak dapat membuat database online.

Untuk mentransfer DMK dari master database instans, ke database yang terkandung master , lihat Memindahkan database yang dilindungi TDE ke SQL Server lain, terutama berfokus pada bagian di mana DMK ditransfer dari server lama ke yang baru.

Paket SSIS & rencana pemeliharaan

Menggunakan paket SSIS, termasuk rencana pemeliharaan, tidak didukung dengan grup ketersediaan yang terkandung.

Perubahan DDL

Satu-satunya perubahan DDL ada dalam CREATE AVAILABILITY GROUP alur kerja. Ada dua klausa baru WITH :

<with_option_spec> ::=
CONTAINED |
REUSE_SYSTEM_DATABASES

TERKANDUNG

Ini menentukan bahwa AG yang dibuat harus berupa AG yang terkandung.

REUSE_SYSTEM_DATABASES

Opsi ini hanya valid untuk AG yang terkandung, dan menentukan bahwa AG yang baru dibuat harus menggunakan kembali database sistem mandiri yang ada untuk AG yang terkandung sebelumnya dengan nama yang sama. Misalnya, jika Anda memiliki AG yang terkandung dengan nama MyContainedAG, dan ingin menghilangkan dan membuatnya kembali, Anda dapat menggunakan opsi ini untuk menggunakan kembali konten database sistem asli yang terkandung.

Perubahan DMV

Ada dua penambahan DMV yang terkait dengan AG yang terkandung:

  • DMV sys.dm_exec_sessions memiliki kolom tambahan: contained_availability_group_id
  • Tampilan sys.availability_groups katalog memiliki kolom yang ditambahkan: is_contained