Mengonfigurasi tautan dengan skrip - Azure SQL Managed Instance

Aplikasi ke:Azure SQL Managed Instance

Artikel ini mengajarkan cara mengonfigurasi link antara SQL Server dan Azure SQL Managed Instance dengan skrip Transact-SQL dan PowerShell atau Azure CLI. Dengan tautan , database dari primer awal Anda direplikasi ke replika sekunder Anda dalam waktu dekat secara real time.

Setelah tautan dibuat, Anda kemudian dapat melakukan failover ke replika sekunder untuk tujuan migrasi, atau pemulihan bencana.

Catatan

Gambaran Umum

Gunakan fitur tautan untuk mereplikasi database dari primer awal Anda ke replika sekunder Anda. Untuk SQL Server 2022, primer awal dapat berupa SQL Server atau Azure SQL Managed Instance. Untuk SQL Server 2019 dan versi yang lebih lama, server utama awal harus SQL Server. Setelah tautan dikonfigurasi, database dari primer awal direplikasi ke replika sekunder.

Anda dapat memilih untuk meninggalkan tautan untuk replikasi data berkelanjutan di lingkungan hibrid antara replika utama dan sekunder, atau Anda dapat melakukan failover database ke replika sekunder, untuk bermigrasi ke Azure, atau untuk pemulihan bencana. Untuk SQL Server 2019 dan versi yang lebih lama, failover ke Azure SQL Managed Instance memutus koneksi dan fail back tidak didukung. Dengan SQL Server 2022, Anda memiliki opsi untuk mempertahankan koneksi dan beralih bolak-balik antara dua replika.

Jika Anda berencana menggunakan instans terkelola sekunder hanya untuk pemulihan bencana, Anda dapat menghemat biaya lisensi dengan mengaktifkan manfaat failover hibrida.

Gunakan instruksi dalam artikel ini untuk menyiapkan tautan secara manual antara SQL Server dan Azure SQL Managed Instance. Setelah tautan dibuat, database sumber Anda mendapatkan salinan baca-saja pada replika sekunder target Anda.

Tip

Untuk menyederhanakan penggunaan skrip T-SQL dengan parameter yang benar untuk lingkungan Anda, sebaiknya gunakan wizard tautan Managed Instance di SQL Server Management Studio (SSMS) untuk membuat skrip untuk membuat tautan. Pada halaman Summary di jendela Tautan Instance Terkelola Baru, pilih Script alih-alih Finish.

Prasyarat

Untuk mereplikasi database, Anda memerlukan prasyarat berikut:

Pertimbangkan hal berikut:

  • Fitur link mendukung satu database per link. Untuk mereplikasi beberapa database pada instans, buat tautan untuk setiap database individual. Misalnya, untuk mereplikasi 10 database ke SQL Managed Instance, buat 10 tautan individual.
  • Kolase antara SQL Server dan SQL Managed Instance harus sama. Ketidakcocokan dalam kolasi dapat menyebabkan perbedaan kasus dalam nama server dan mencegah terjalinnya koneksi yang berhasil dari SQL Server ke SQL Managed Instance.
  • Kesalahan 1475 pada SQL Server awal Utama menunjukkan bahwa Anda perlu memulai rantai cadangan baru dengan membuat cadangan penuh tanpa opsi COPY ONLY.
  • Untuk membuat tautan, atau failover, dari SQL Managed Instance ke SQL Server 2025, SQL managed instance Anda harus dikonfigurasi dengan kebijakan pembaruan SQL Server 2025. Replikasi data dan failover dari SQL Managed Instance ke SQL Server 2025 tidak didukung oleh instans yang dikonfigurasi dengan kebijakan pembaruan yang tidak cocok.
  • Untuk membuat tautan, atau failover, dari SQL Managed Instance ke SQL Server 2022, SQL managed instance Anda harus dikonfigurasi dengan kebijakan pembaruan SQL Server 2022. Replikasi data dan failover dari SQL Managed Instance ke SQL Server 2022 tidak didukung oleh instans yang dikonfigurasi dengan kebijakan pembaruan yang tidak cocok.
  • Meskipun Anda dapat membuat tautan dari versi SQL Server yang didukung ke SQL managed instance yang dikonfigurasi dengan kebijakan pembaruan Always-up-to-date, setelah failover ke SQL Managed Instance, Anda tidak akan dapat lagi mereplikasi data atau gagal kembali ke instans SQL Server Anda.

Izin

Untuk SQL Server, Anda harus memiliki izin sysadmin.

Untuk Azure SQL Managed Instance, Anda harus menjadi anggota kontributor SQL Managed Instance, atau memiliki izin peran kustom berikut:

Sumber daya Microsoft.Sql/ Izin yang diperlukan
Microsoft. Sql/managedInstances /baca, /tulis
Microsoft.Sql/managedInstances/hybridCertificate /perbuatan
Microsoft.Sql/managedInstances/databases /baca, /hapus, /tulis, /pemulihanLengkap/aksi, /bacaCadangan/aksi, /detailPemulihan/baca
Microsoft.Sql/managedInstances/distributedAvailabilityGroups /baca, /tulis, /hapus, /setelPeran/aksi
Microsoft.Sql/managedInstances/endpointCertificates /baca
Microsoft.Sql/managedInstances/hybridLink /baca, /tulis, /hapus
Microsoft. Sql/managedInstances/serverTrustCertificates /tulis, /hapus, /baca

Terminologi dan konvensi penamaan

Saat Anda menjalankan skrip dari panduan pengguna ini, penting untuk tidak membingungkan SQL Server dan nama SQL Managed Instance dengan nama domain penuh mereka (FQDN). Tabel berikut menjelaskan hal yang sebenarnya diwakili oleh berbagai nama dan cara mendapatkan nilainya:

Terminologi Deskripsi Cara mengetahuinya
Primer utama 1 SQL Server atau SQL Managed Instance tempat Anda awalnya membuat tautan untuk mereplikasi database Anda ke replika sekunder.
Replika utama SQL Server atau SQL Managed Instance yang saat ini menghosting database utama.
Replika sekunder SQL Server atau SQL Managed Instance yang menerima data yang hampir real time direplikasi dari replika utama saat ini.
nama SQL Server Nama SQL Server yang pendek dan satu kata. Misalnya: sqlserver1. Jalankan SELECT @@SERVERNAME dari T-SQL.
SQL Server FQDN Nama domain yang sepenuhnya memenuhi syarat (FQDN) dari SQL Server Anda. Misalnya: sqlserver1.domain.com. Lihat konfigurasi jaringan Anda (DNS) lokal, atau nama server jika Anda menggunakan komputer virtual (VM) Azure.
nama SQL Managed Instance Nama satu kata yang pendek untuk Managed Instance SQL. Misalnya: managedinstance1. Lihat nama instans terkelola Anda di portal Azure.
SQL Managed Instance Nama Domain Penuh (FQDN) Nama domain yang sepenuhnya memenuhi syarat (FQDN) dari SQL Managed Instance Anda. Misalnya: managedinstance1.6d710bcf372b.database.windows.net. Lihat nama host di halaman gambaran umum SQL Managed Instance di portal Azure.
Nama domain yang dapat diselesaikan Nama DNS yang dapat diubah menjadi alamat IP. Misalnya, menjalankan nslookup sqlserver1.domain.com harus mengembalikan alamat IP seperti 10.0.0.1. Jalankan nslookup perintah dari Command Prompt.
IP SQL Server Alamat IP SQL Server Anda. Dalam kasus beberapa IP pada SQL Server, pilih alamat IP yang dapat diakses dari Azure. Jalankan perintah ipconfig dari prompt perintah OS host yang menjalankan SQL Server.

1 Mengonfigurasi Azure SQL Managed Instance sebagai primer awal Anda didukung mulai dari SQL Server 2022 CU10.

Menyiapkan pemulihan dan pencadangan database

Jika SQL Server adalah primer awal Anda, maka database yang akan direplikasi melalui tautan harus dalam model pemulihan penuh dan memiliki setidaknya satu cadangan. Karena Azure SQL Managed Instance mengambil cadangan secara otomatis, lewati langkah ini jika SQL Managed Instance adalah primer awal Anda.

Saat Anda membuat tautan, penyemaian awal antara replika primer dan sekunder terjadi dengan mengambil cadangan penuh database pada replika utama, mentransfernya ke replika sekunder, dan memulihkannya di sana. Saat Anda mengambil cadangan penuh, kami sarankan Anda menggunakan WITH CHECKSUM opsi untuk memastikan bahwa cadangan valid dan tidak mengalami kerusakan. Untuk informasi selengkapnya, lihat BACKUP (Transact-SQL).

Jalankan kode berikut di SQL Server untuk semua database yang ingin Anda replikasi. Ganti <DatabaseName> dengan nama database Anda yang sebenarnya.

-- Run on SQL Server
-- Set full recovery model for all databases you want to replicate.
ALTER DATABASE [<DatabaseName>] SET RECOVERY FULL
GO

-- Execute backup for all databases you want to replicate.
BACKUP DATABASE [<DatabaseName>] TO DISK = N'<DiskPath>'
GO

Untuk informasi selengkapnya, lihat Membuat Pencadangan Basis Data Lengkap.

Catatan

Link hanya mendukung replikasi database pengguna. Replikasi database sistem tidak didukung. Untuk mereplikasi objek tingkat instans (disimpan di atau mastermsdb database), kami sarankan Anda membuat skrip dan menjalankan skrip T-SQL pada instans tujuan.

Membangun kepercayaan di antara instans

Pertama, Anda harus membangun kepercayaan antara dua instans, dan mengamankan titik akhir yang digunakan untuk berkomunikasi dan mengenkripsi data di seluruh jaringan. Grup ketersediaan terdistribusi menggunakan titik akhir pencerminan database dari grup ketersediaan yang sudah ada, daripada memiliki titik akhir khusus sendiri. Dengan demikian, keamanan dan kepercayaan perlu dikonfigurasi antara dua instans melalui titik akhir pencerminan database grup ketersediaan.

Catatan

Tautan ini didasarkan pada teknologi grup ketersediaan AlwaysOn. Titik akhir pencerminan database adalah titik akhir tujuan khusus yang digunakan secara eksklusif oleh grup ketersediaan untuk menerima koneksi dari instans lain. Istilah titik akhir pencerminan database tidak boleh salah dengan fitur pencerminan database SQL Server warisan.

Kepercayaan berbasis sertifikat adalah satu-satunya cara yang didukung untuk mengamankan titik akhir pencerminan database untuk SQL Server dan SQL Managed Instance. Jika Anda memiliki grup ketersediaan yang sudah ada yang menggunakan Windows authentication, Anda perlu menambahkan kepercayaan berbasis sertifikat ke titik akhir pencerminan yang ada sebagai opsi autentikasi sekunder. Anda dapat melakukan ini dengan menggunakan pernyataan ALTER ENDPOINT, seperti yang ditunjukkan nanti di artikel ini.

Penting

Sertifikat dibuat dengan tanggal dan waktu kedaluwarsa. Mereka harus diperbarui dan dirotasi sebelum kedaluwarsa.

Berikut ini mencantumkan gambaran umum proses untuk mengamankan titik akhir pencerminan database untuk SQL Server dan SQL Managed Instance:

  1. Buat sertifikat pada SQL Server dan dapatkan kunci umumnya.
  2. Dapatkan kunci umum sertifikat SQL Managed Instance.
  3. Tukarkan kunci publik antara SQL Server dan SQL Managed Instance.
  4. Mengimpor kunci otoritas sertifikat akar tepercaya Azure ke SQL Server

Bagian berikut mendeskripsikan langkah ini lebih detail.

Buat sertifikat di SQL Server dan impor kunci publiknya ke SQL Managed Instance

Pertama, buat kunci master database di master database, jika belum ada. Sisipkan kata sandi Anda sebagai pengganti <strong_password> skrip berikut, dan simpan di tempat yang rahasia dan aman. Jalankan skrip T-SQL ini di SQL Server:

-- Run on SQL Server
-- Create a master key encryption password
-- Keep the password confidential and in a secure place
USE MASTER
IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101)
BEGIN
    PRINT 'Creating master key.' + CHAR(13) + 'Keep the password confidential and in a secure place.'
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong_password>'
END
ELSE
    PRINT 'Master key already exists.'
GO

Kemudian, buat sertifikat autentikasi pada SQL Server. Dalam skrip berikut, ganti:

  • @cert_expiry_date dengan tanggal kedaluwarsa sertifikat yang diinginkan (tanggal mendatang).

Rekam tanggal ini dan atur pengingat untuk memutar (memperbarui) sertifikat server SQL sebelum tanggal kedaluwarsanya untuk memastikan operasi tautan berkelanjutan.

Penting

Sangat disarankan untuk menggunakan nama sertifikat yang dibuat secara otomatis dari skrip ini. Saat menyesuaikan nama sertifikat Anda sendiri pada SQL Server diizinkan, nama tidak boleh berisi karakter \.

-- Create the SQL Server certificate for the instance link
USE MASTER

-- Customize SQL Server certificate expiration date by adjusting the date below
DECLARE @cert_expiry_date AS varchar(max)='03/30/2025'

-- Build the query to generate the certificate
DECLARE @sqlserver_certificate_name NVARCHAR(MAX) = N'Cert_' + @@servername  + N'_endpoint'
DECLARE @sqlserver_certificate_subject NVARCHAR(MAX) = N'Certificate for ' + @sqlserver_certificate_name
DECLARE @create_sqlserver_certificate_command NVARCHAR(MAX) = N'CREATE CERTIFICATE [' + @sqlserver_certificate_name + '] ' + char (13) +
'    WITH SUBJECT = ''' + @sqlserver_certificate_subject + ''',' + char (13) +
'    EXPIRY_DATE = '''+ @cert_expiry_date + ''''+ char (13)
IF NOT EXISTS (SELECT name from sys.certificates WHERE name = @sqlserver_certificate_name)
BEGIN
    PRINT (@create_sqlserver_certificate_command)
    -- Execute the query to create SQL Server certificate for the instance link
    EXEC sp_executesql @stmt = @create_sqlserver_certificate_command
END
ELSE
    PRINT 'Certificate ' + @sqlserver_certificate_name + ' already exists.'
GO

Kemudian, gunakan kueri T-SQL berikut pada SQL Server untuk memverifikasi sertifikat telah dibuat:

-- Run on SQL Server
USE MASTER
GO
SELECT * FROM sys.certificates WHERE pvt_key_encryption_type = 'MK'

Dalam hasil kueri, Anda akan mengetahui bahwa sertifikat telah dienkripsi dengan kunci master.

Sekarang, Anda bisa mendapatkan kunci publik sertifikat yang dihasilkan pada SQL Server:

-- Run on SQL Server
-- Show the name and the public key of generated SQL Server certificate
USE MASTER
GO
DECLARE @sqlserver_certificate_name NVARCHAR(MAX) = N'Cert_' + @@servername  + N'_endpoint'
DECLARE @PUBLICKEYENC VARBINARY(MAX) = CERTENCODED(CERT_ID(@sqlserver_certificate_name));
SELECT @sqlserver_certificate_name as 'SQLServerCertName'
SELECT @PUBLICKEYENC AS SQLServerPublicKey;

Simpan nilai SQLServerCertName dan SQLServerPublicKey dari output, karena Anda akan membutuhkannya untuk langkah berikutnya saat Mengimpor sertifikat.

Pertama, pastikan Anda masuk ke Azure dan Anda telah memilih langganan tempat instans terkelola Anda dihosting. Memilih langganan yang tepat sangat penting jika Anda memiliki lebih dari satu langganan Azure di akun Anda.

Ganti <SubscriptionID> dengan ID langganan Azure Anda.

# Run in Azure Cloud Shell (select PowerShell console)

# Enter your Azure subscription ID
$SubscriptionID = "<SubscriptionID>"

# Login to Azure and select subscription ID
if ((Get-AzContext ) -eq $null)
{
    echo "Logging to Azure subscription"
    Login-AzAccount
}
Select-AzSubscription -SubscriptionName $SubscriptionID

Kemudian gunakan perintah New-AzSqlInstanceServerTrustCertificate PowerShell atau az sql mi partner-cert create Azure CLI untuk mengunggah kunci publik sertifikat autentikasi dari SQL Server ke Azure, seperti sampel PowerShell berikut.

Isi informasi pengguna yang diperlukan, salin, tempelkan, lalu jalankan skrip. Ganti:

  • <SQLServerPublicKey> dengan bagian publik sertifikat SQL Server dalam format biner, yang telah Anda rekam di langkah sebelumnya. Ini adalah nilai string panjang yang dimulai dengan 0x.
  • <SQLServerCertName> dengan nama sertifikat SQL Server yang telah Anda rekam di langkah sebelumnya.
  • <ManagedInstanceName> dengan nama singkat instans terkelola Anda.
# Run in Azure Cloud Shell (select PowerShell console)
# ===============================================================================
# POWERSHELL SCRIPT TO IMPORT SQL SERVER PUBLIC CERTIFICATE TO SQL MANAGED INSTANCE
# ===== Enter user variables here ====

# Enter the name for the server SQLServerCertName certificate – for example, "Cert_sqlserver1_endpoint"
$CertificateName = "<SQLServerCertName>"

# Insert the certificate public key blob that you got from SQL Server – for example, "0x1234567..."
$PublicKeyEncoded = "<SQLServerPublicKey>"

# Enter your managed instance short name – for example, "sqlmi"
$ManagedInstanceName = "<ManagedInstanceName>"

# ==== Do not customize the below cmdlets====

# Find out the resource group name
$ResourceGroup = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName

# Upload the public key of the authentication certificate from SQL Server to Azure.
New-AzSqlInstanceServerTrustCertificate -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName -Name $CertificateName -PublicKey $PublicKeyEncoded 

Hasil dari operasi ini adalah ringkasan sertifikat SQL Server yang diunggah ke Azure.

Jika Anda perlu melihat semua sertifikat SQL Server yang diunggah ke instans terkelola, gunakan Get-AzSqlInstanceServerTrustCertificate PowerShell atau az sql mi partner-cert list Azure CLI perintah di Azure Cloud Shell. Untuk menghapus sertifikat SQL Server yang diunggah ke instans terkelola SQL, gunakan Remove-AzSqlInstanceServerTrustCertificate PowerShell atau az sql mi partner-cert delete Azure CLI di Azure Cloud Shell.

Dapatkan kunci umum sertifikat dari SQL Managed Instance dan impor ke SQL Server

Sertifikat untuk mengamankan titik akhir tautan dibuat secara otomatis pada Azure SQL Managed Instance. Dapatkan kunci publik sertifikat dari SQL Managed Instance, dan impor ke SQL Server dengan menggunakan Get-AzSqlInstanceEndpointCertificate PowerShell atau az sql mi endpoint-cert show Azure CLI perintah, seperti sampel PowerShell berikut.

Perhatian

Saat menggunakan Azure CLI, Anda harus menambahkan 0x secara manual ke bagian depan output PublicKey saat Anda menggunakannya dalam langkah berikutnya. Misalnya, PublicKey akan terlihat seperti "0x3082033E30...".

Jalankan skrip berikut. Ganti:

  • <SubscriptionID> dengan ID langganan Azure Anda.
  • <ManagedInstanceName> dengan nama singkat instans terkelola Anda.
# Run in Azure Cloud Shell (select PowerShell console)
# ===============================================================================
# POWERSHELL SCRIPT TO EXPORT MANAGED INSTANCE PUBLIC CERTIFICATE
# ===== Enter user variables here ====

# Enter your managed instance short name – for example, "sqlmi"
$ManagedInstanceName = "<ManagedInstanceName>"

# ==== Do not customize the following cmdlet ====

# Find out the resource group name
$ResourceGroup = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName

# Fetch the public key of the authentication certificate from Managed Instance. Outputs a binary key in the property PublicKey.
Get-AzSqlInstanceEndpointCertificate -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName -EndpointType "DATABASE_MIRRORING" | out-string   

Salin seluruh output PublicKey (dimulai dengan 0x) karena Anda akan memerlukannya di langkah berikutnya.

Atau, jika Anda mengalami masalah dalam menyalin-menempelkan PublicKey, Anda juga dapat menjalankan perintah EXEC sp_get_endpoint_certificate 4 T-SQL pada instans terkelola untuk mendapatkan kunci publiknya untuk titik akhir tautan.

Selanjutnya, impor kunci publik yang diperoleh dari sertifikat keamanan instans terkelola ke SQL Server. Jalankan kueri berikut pada SQL Server untuk membuat sertifikat titik akhir MI. Ganti:

  • <ManagedInstanceFQDN> dengan nama domain instans terkelola yang sepenuhnya memenuhi syarat.
  • <PublicKey> dengan nilai PublicKey yang diperoleh pada langkah sebelumnya (dari Azure Cloud Shell, dimulai dengan 0x). Anda tidak perlu menggunakan tanda kutip.

Penting

Nama sertifikat harus SQL Managed Instance FQDN dan tidak boleh dimodifikasi. Tautan tidak akan beroperasi jika menggunakan nama kustom.

-- Run on SQL Server
USE MASTER
CREATE CERTIFICATE [<ManagedInstanceFQDN>]
FROM BINARY = <PublicKey> 

Mengimpor kunci otoritas sertifikat akar tepercaya Azure ke SQL Server

Mengimpor kunci otoritas sertifikat akar (CA) tepercaya Azure ke SQL Server diperlukan agar SQL Server Anda mempercayai sertifikat kunci publik SQL Managed Instance yang dikeluarkan oleh Azure.

Anda dapat mengunduh kunci root CA yang diperlukan dari detail Otoritas Sertifikat Azure. Minimal, unduh sertifikat DigiCert Global Root G2 dan Microsoft Otoritas Sertifikat Akar RSA 2017 dan impor ke instans SQL Server Anda. Namun, jika Anda berencana menjalankan tautan selama lebih dari beberapa bulan, unduh dan impor semua 7 sertifikat yang tercantum di bagian Root Certificate Authorities untuk menghindari potensi gangguan jika Azure memperbarui daftar CA tepercayanya.

Catatan

Sertifikat akar dalam jalur sertifikasi untuk sertifikat kunci publik SQL Managed Instance dikeluarkan oleh Otoritas Sertifikat (CA) akar tepercaya Azure. CA akar tertentu dapat berubah dari waktu ke waktu karena Azure memperbarui daftar CA tepercayanya. Untuk penyiapan yang disederhanakan, instal semua sertifikat CA akar yang tercantum dalam Azure Otoritas Sertifikat Akar. Anda hanya dapat menginstal kunci CA yang diperlukan dengan mengidentifikasi penerbit kunci publik SQL Managed Instance yang diimpor sebelumnya.

Simpan sertifikat lokal ke instans SQL Server, seperti ke sampel jalur C:\Path\To\<name of certificate>.crt, lalu impor sertifikat dari jalur tersebut dengan menggunakan skrip Transact-SQL berikut. Ganti <name of certificate> dengan nama sertifikat aktual, seperti DigiCert Global Root G2 atau Microsoft RSA Root Certificate Authority 2017.

-- Run on SQL Server
-- Import <name of certificate> root-authority certificate (trusted by Azure), if not already present
IF NOT EXISTS (SELECT name FROM sys.certificates WHERE name = N'<name of certificate>')
BEGIN
    PRINT 'Creating <name of certificate> certificate.'
    CREATE CERTIFICATE [<name of certificate>] FROM FILE = 'C:\Path\To\<name of certificate>.crt'

    --Trust certificates issued by <name of certificate> root authority for Azure database.windows.net domains
    DECLARE @CERTID int
    SELECT @CERTID = CERT_ID('<name of certificate>')
    --For government cloud, use the corresponding SQL Database DNS suffix, e.g. '*.database.usgovcloudapi.net', '*.database.chinacloudapi.cn' etc.
    EXEC sp_certificate_add_issuer @CERTID, N'*.database.windows.net'
END
ELSE
    PRINT 'Certificate <name of certificate> already exists.'
GO

Catatan

Prosedur simpan sp_certificate_add_issuer yang hilang dari lingkungan SQL Server Anda menunjukkan instans SQL Server Anda tidak memiliki pembaruan layanan yang sesuai terinstal.

Terakhir, verifikasi semua sertifikat yang dibuat dengan menggunakan tampilan manajemen dinamis (DMV) berikut:

-- Run on SQL Server
USE master
SELECT * FROM sys.certificates

Memvalidasi rantai sertifikat

Perubahan terjadwal atau tidak disengaja pada sertifikat dapat menurunkan tautan. Untuk menghindari gangguan, penting untuk secara berkala validasi rantai sertifikat pada SQL Server.

Lewati langkah ini jika Anda mengonfigurasi tautan baru atau baru saja mengimpor sertifikat seperti yang dijelaskan di bagian sebelumnya.

Amankan titik akhir pencerminan basis data

Jika Anda tidak memiliki grup ketersediaan yang sudah ada, atau titik akhir pencerminan database pada SQL Server, langkah selanjutnya adalah membuat titik akhir pencerminan database pada SQL Server dan mengamankannya dengan sertifikat SQL Server yang dibuat sebelumnya. Jika Anda memiliki grup ketersediaan atau titik akhir pencerminan yang sudah ada, lewati ke bagian Ubah titik akhir yang sudah ada.

Membuat dan mengamankan titik akhir pencerminan database di SQL Server

Untuk memverifikasi bahwa Anda tidak memiliki titik akhir pencerminan database yang telah dibuat, gunakan skrip berikut:

-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT * FROM sys.database_mirroring_endpoints WHERE type_desc = 'DATABASE_MIRRORING'

Jika kueri sebelumnya tidak memperlihatkan titik akhir pencerminan database yang sudah ada, jalankan skrip berikut pada SQL Server untuk mendapatkan nama sertifikat SQL Server yang dihasilkan sebelumnya.

-- Run on SQL Server
-- Show the name and the public key of generated SQL Server certificate
USE MASTER
GO
DECLARE @sqlserver_certificate_name NVARCHAR(MAX) = N'Cert_' + @@servername  + N'_endpoint'
SELECT @sqlserver_certificate_name as 'SQLServerCertName'

Simpan SQLServerCertName dari output karena Anda akan membutuhkannya di langkah berikutnya.

Gunakan skrip berikut untuk membuat titik akhir pencerminan database baru pada port <EndpointPort> dan mengamankan titik akhir dengan sertifikat SQL Server. Ganti:

  • <SQL_SERVER_CERTIFICATE> dengan nama SQLServerCertName yang diperoleh di langkah sebelumnya.
-- Run on SQL Server
-- Create a connection endpoint listener on SQL Server
USE MASTER
CREATE ENDPOINT database_mirroring_endpoint
    STATE=STARTED   
    AS TCP (LISTENER_PORT=<EndpointPort>, LISTENER_IP = ALL)
    FOR DATABASE_MIRRORING (
        ROLE=ALL,
        AUTHENTICATION = CERTIFICATE [<SQL_SERVER_CERTIFICATE>],
        ENCRYPTION = REQUIRED ALGORITHM AES
    )  
GO

Verifikasi bahwa titik akhir pencerminan telah dibuat dengan menjalankan skrip berikut pada SQL Server:

-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT
    name, type_desc, state_desc, role_desc,
    connection_auth_desc, is_encryption_enabled, encryption_algorithm_desc
FROM 
    sys.database_mirroring_endpoints

Berhasil membuat kolom state_desc pada endpoint yang seharusnya menyatakan STARTED.

Titik akhir pencerminan baru dibuat dengan autentikasi sertifikat dan enkripsi AES yang diaktifkan.

Mengubah titik akhir yang ada

Catatan

Lewati langkah ini jika Anda baru saja membuat titik akhir pencerminan baru. Gunakan langkah ini hanya jika Anda menggunakan grup ketersediaan yang sudah ada dengan titik akhir pencerminan database yang ada.

Jika Anda menggunakan grup ketersediaan yang ada untuk koneksi, atau jika ada titik akhir pencerminan basis data, pertama-tama pastikan bahwa kondisi wajib berikut untuk koneksi tersebut terpenuhi:

  • Jenisnya harus menggunakan DATABASE_MIRRORING.
  • Autentikasi koneksi harus menggunakan CERTIFICATE.
  • Enkripsi harus diaktifkan.
  • Algoritma enkripsi harus menggunakan AES.

Jalankan kueri berikut pada SQL Server untuk menampilkan detail titik akhir pencerminan database yang sudah ada:

-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT
    name, type_desc, state_desc, role_desc, connection_auth_desc,
    is_encryption_enabled, encryption_algorithm_desc
FROM
    sys.database_mirroring_endpoints

Jika output menunjukkan bahwa titik akhir DATABASE_MIRRORINGconnection_auth_desc yang ada bukan berupa CERTIFICATE, atau encryption_algorithm_desc bukan AES, titik akhir perlu diubah untuk memenuhi persyaratan.

Pada SQL Server, titik akhir pencerminan database yang sama digunakan untuk grup ketersediaan dan grup ketersediaan terdistribusi. Jika endpoint connection_auth_desc Anda adalah NTLM (otentikasi Windows) atau KERBEROS, dan Anda memerlukan otentikasi Windows untuk grup ketersediaan yang sudah ada, Anda dapat mengubah endpoint untuk menggunakan beberapa metode otentikasi dengan mengubah opsi otentikasi ke NEGOTIATE CERTIFICATE. Perubahan ini memungkinkan grup ketersediaan yang ada untuk menggunakan autentikasi Windows, sementara autentikasi sertifikat digunakan untuk SQL Managed Instance.

Demikian pula, jika enkripsi tidak menyertakan SEL dan Anda memerlukan enkripsi RC4, Anda dapat mengubah titik akhir untuk menggunakan kedua algoritma. Untuk mengetahui detail tentang kemungkinan opsi untuk pengubahan titik akhir, lihat halaman dokumentasi untuk sys.database_mirroring_endpoints.

Skrip berikut adalah contoh cara mengubah titik akhir pencerminan database yang ada di SQL Server. Ganti:

  • <YourExistingEndpointName> dengan nama titik akhir yang sudah ada.
  • <SQLServerCertName> dengan nama sertifikat SQL Server yang dihasilkan (diperoleh di salah satu langkah sebelumnya di atas).

Bergantung pada konfigurasi spesifik Anda, Anda mungkin perlu menyesuaikan skrip lebih lanjut. Anda juga dapat menggunakan SELECT * FROM sys.certificates untuk mendapatkan nama sertifikat yang dibuat pada SQL Server.

-- Run on SQL Server
-- Alter the existing database mirroring endpoint to use CERTIFICATE for authentication and AES for encryption
USE MASTER
ALTER ENDPOINT [<YourExistingEndpointName>]   
    STATE=STARTED   
    AS TCP (LISTENER_PORT=<EndpointPort>, LISTENER_IP = ALL)
    FOR DATABASE_MIRRORING (
        ROLE=ALL,
        AUTHENTICATION = WINDOWS NEGOTIATE CERTIFICATE [<SQLServerCertName>],
        ENCRYPTION = REQUIRED ALGORITHM AES
    )
GO

Setelah Anda menjalankan kueri titik akhir ALTER dan mengatur mode autentikasi ganda ke Windows dan sertifikat, gunakan kueri ini lagi pada SQL Server untuk memperlihatkan detail untuk titik akhir pencerminan database:

-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT
    name, type_desc, state_desc, role_desc, connection_auth_desc,
    is_encryption_enabled, encryption_algorithm_desc
FROM
    sys.database_mirroring_endpoints

Anda berhasil memodifikasi titik akhir pencerminan database Anda untuk tautan SQL Managed Instance.

Membuat grup ketersediaan di SQL Server

Jika Anda tidak memiliki grup ketersediaan yang sudah ada, langkah selanjutnya adalah membuatnya di SQL Server, terlepas dari yang akan menjadi primer awal.

Catatan

Lewati bagian ini jika Anda sudah memiliki grup ketersediaan yang sudah ada.

Perintah untuk membuat grup ketersediaan berbeda jika SQL Managed Instance Anda adalah primer utama, yang hanya didukung mulai dari SQL Server 2022 CU10.

Meskipun dimungkinkan untuk membuat beberapa tautan untuk database yang sama, tautan hanya mendukung replikasi satu database per tautan. Jika Anda ingin membuat beberapa tautan untuk database yang sama, gunakan grup ketersediaan yang sama untuk semua tautan, tetapi kemudian buat grup ketersediaan terdistribusi baru untuk setiap tautan database antara SQL Server dan SQL Managed Instance.

Jika SQL Server adalah primer awal Anda, buat grup ketersediaan dengan parameter berikut untuk tautan:

  • Nama server utama awal
  • Nama database
  • Mode kegagalan MANUAL
  • Mode penyemaian AUTOMATIC

Pertama, cari tahu nama SQL Server Anda dengan menjalankan pernyataan T-SQL berikut:

-- Run on the initial primary
SELECT @@SERVERNAME AS SQLServerName 

Kemudian, gunakan skrip berikut untuk membuat grup ketersediaan di SQL Server. Ganti:

  • <AGNameOnSQLServer> dengan nama grup ketersediaan Anda di SQL Server. Tautan Managed Instance memerlukan satu basis data untuk setiap grup ketersediaan. Untuk beberapa database, Anda harus membuat beberapa grup ketersediaan. Pertimbangkan untuk memberi nama setiap grup ketersediaan sehingga namanya mencerminkan database yang sesuai - misalnya AG_<db_name>.
  • <DatabaseName> dengan nama database yang ingin Anda replikasi.
  • <SQLServerName> dengan nama instans SQL Server Anda yang diperoleh pada langkah sebelumnya.
  • <SQLServerIP> dengan alamat IP SQL Server. Anda dapat menggunakan nama komputer host SQL Server yang dapat diselesaikan sebagai alternatif, tetapi Anda perlu memastikan bahwa nama tersebut dapat diselesaikan dari jaringan virtual SQL Managed Instance.
-- Run on SQL Server
-- Create the primary availability group on SQL Server
USE MASTER
CREATE AVAILABILITY GROUP [<AGNameOnSQLServer>]
WITH (CLUSTER_TYPE = NONE) -- <- Delete this line for SQL Server 2016 only. Leave as-is for all higher versions.
    FOR database [<DatabaseName>]  
    REPLICA ON   
        N'<SQLServerName>' WITH   
            (  
            ENDPOINT_URL = 'TCP://<SQLServerIP>:<EndpointPort>',
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            FAILOVER_MODE = MANUAL,
            SEEDING_MODE = AUTOMATIC
            );
GO

Penting

Untuk SQL Server 2016, hapus WITH (CLUSTER_TYPE = NONE) dari pernyataan T-SQL di atas. Biarkan as-is untuk semua versi SQL Server nanti.

Selanjutnya, buat grup ketersediaan terdistribusi di SQL Server. Jika Anda berencana membuat beberapa tautan, maka Anda perlu membuat grup ketersediaan terdistribusi untuk setiap tautan, bahkan jika Anda membuat beberapa tautan untuk database yang sama.

Ganti nilai berikut lalu jalankan skrip T-SQL untuk membuat grup ketersediaan terdistribusi Anda.

  • <DAGName> dengan nama grup ketersediaan terdistribusi Anda. Karena Anda dapat mengonfigurasi beberapa tautan untuk database yang sama dengan membuat grup ketersediaan terdistribusi untuk setiap tautan, pertimbangkan untuk menamai setiap grup ketersediaan terdistribusi yang sesuai - misalnya, DAG1_<db_name>, DAG2_<db_name>.
  • <AGNameOnSQLServer> dengan nama grup ketersediaan yang Anda buat di langkah sebelumnya.
  • <AGNameOnSQLMI> dengan nama grup ketersediaan Anda di SQL Managed Instance. Nama harus unik di SQL MI. Pertimbangkan untuk memberi nama setiap grup ketersediaan sehingga namanya mencerminkan database yang sesuai - misalnya AG_<db_name>_MI.
  • <SQLServerIP> dengan alamat IP SQL Server dari langkah sebelumnya. Anda dapat menggunakan nama komputer host SQL Server yang dapat diselesaikan sebagai alternatif, tetapi pastikan nama tersebut dapat diselesaikan dari jaringan virtual SQL Managed Instance (yang memerlukan konfigurasi Azure DNS kustom untuk subnet instans terkelola).
  • <ManagedInstanceName> dengan nama singkat instans terkelola Anda.
  • <ManagedInstanceFQDN> dengan nama domain yang sepenuhnya memenuhi syarat dari instans terkelola Anda.
-- Run on SQL Server
-- Create a distributed availability group for the availability group and database
-- ManagedInstanceName example: 'sqlmi1'
-- ManagedInstanceFQDN example: 'sqlmi1.73d19f36a420a.database.windows.net'
USE MASTER
CREATE AVAILABILITY GROUP [<DAGName>]
WITH (DISTRIBUTED) 
    AVAILABILITY GROUP ON  
    N'<AGNameOnSQLServer>' WITH 
    (
      LISTENER_URL = 'TCP://<SQLServerIP>:<EndpointPort>',
      AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
      FAILOVER_MODE = MANUAL,
      SEEDING_MODE = AUTOMATIC,
      SESSION_TIMEOUT = 20
    ),
    N'<AGNameOnSQLMI>' WITH
    (
      LISTENER_URL = 'tcp://<ManagedInstanceFQDN>:5022;Server=[<ManagedInstanceName>]',
      AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
      FAILOVER_MODE = MANUAL,
      SEEDING_MODE = AUTOMATIC
    );
GO

Verifikasikan grup ketersediaan

Gunakan skrip berikut untuk mencantumkan semua grup ketersediaan dan grup ketersediaan terdistribusi pada instans SQL Server. Pada titik ini, status grup ketersediaan Anda harus connected, dan status grup ketersediaan terdistribusi Anda harus disconnected. Status grup ketersediaan terdistribusi berpindah ke connected hanya setelah bergabung dengan SQL Managed Instance.

-- Run on SQL Server
-- This will show that the availability group and distributed availability group have been created on SQL Server.
SELECT * FROM sys.availability_groups

Atau, Anda dapat menggunakan Object Explorer SSMS untuk menemukan grup ketersediaan dan grup ketersediaan terdistribusi. Perluas folder Selalu Dalam Ketersediaan Tinggi lalu folder Grup Ketersediaan.

Terakhir, Anda dapat membuat tautan. Perintah berbeda berdasarkan instans mana yang merupakan primary awal. Gunakan perintah New-AzSqlInstanceLink PowerShell atau az sql mi link create Azure CLI untuk membuat tautan, seperti contoh PowerShell di bagian ini. Membuat tautan dari SQL Managed Instance primer saat ini tidak didukung dengan Azure CLI.

Jika Anda perlu melihat semua tautan pada instans terkelola, gunakan perintah Get-AzSqlInstanceLink PowerShell atau az sql mi Azure CLI di Azure Cloud Shell.

Untuk menyederhanakan proses, masuk ke portal Azure dan jalankan skrip berikut dari Azure Cloud Shell. Ganti:

  • <ManagedInstanceName> dengan nama singkat instans terkelola Anda.
  • <AGNameOnSQLServer> dengan nama grup ketersediaan yang dibuat pada SQL Server.
  • <AGNameOnSQLMI> dengan nama grup ketersediaan yang dibuat pada SQL Managed Instance.
  • <DAGName> dengan nama grup ketersediaan terdistribusi yang dibuat pada SQL Server.
  • <DatabaseName> dengan database yang direplikasi dalam grup ketersediaan pada SQL Server.
  • <SQLServerIP> dengan alamat IP SQL Server Anda. Alamat IP yang disediakan harus dapat diakses oleh instans terkelola.
  • <EndpointPort> dengan port titik akhir untuk SQL Server

Catatan

Jika Anda ingin membuat tautan ke grup ketersediaan yang sudah ada, berikan alamat IP pendengar saat menyediakan <SQLServerIP> parameter. Pastikan bahwa kepercayaan telah ditetapkan antara semua simpul grup ketersediaan dan SQL Managed Instance (lihat bagian Layar antara instans).

#  Run in Azure Cloud Shell (select PowerShell console)
# =============================================================================
# POWERSHELL SCRIPT TO CREATE MANAGED INSTANCE LINK
# Instructs Managed Instance to join distributed availability group on SQL Server
# ===== Enter user variables here ====

# Enter your managed instance name – for example, "sqlmi1"
$ManagedInstanceName = "<ManagedInstanceName>"

# Enter the availability group name that was created on SQL Server
$AGNameOnSQLServer = "<AGNameOnSQLServer>"

# Enter the availability group name that was created on SQL Managed Instance
$AGNameOnSQLMI = "<AGNameOnSQLMI>"

# Enter the distributed availability group name that was created on SQL Server
$DAGName = "<DAGName>"

# Enter the database name that was placed in the availability group for replication
$DatabaseName = "<DatabaseName>"

# Enter the SQL Server IP
$SQLServerIP = "<SQLServerIP>"

# Enter the SQL Server Endpoint Port
$EndpointPort = "<EndpointPort>"

# ==== Do not customize the following cmdlet ====

# Find out the resource group name
$ResourceGroup = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName

# Build properly formatted connection endpoint
$SourceIP = "TCP://" + $SQLServerIP + ":"+$EndpointPort

# Create link on managed instance. Join distributed availability group on SQL Server.
New-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName -Name $DAGName |
-PartnerAvailabilityGroupName $AGNameOnSQLServer -InstanceAvailabilityGroupName $AGNameOnSQLMI |
-Database @($DatabaseName) -PartnerEndpoint $SourceIP -InstanceLinkRole Secondary

Hasil dari operasi ini adalah stempel waktu keberhasilan eksekusi permintaan buat tautan .

Untuk memverifikasi koneksi antara SQL Managed Instance dan SQL Server, jalankan kueri berikut pada SQL Server. Koneksi tidak akan seketika. Diperlukan waktu hingga satu menit agar DMV mulai menunjukkan koneksi yang berhasil. Terus refresh DMV hingga koneksi ditampilkan sebagai TERSAMBUNG untuk replika SQL Managed Instance.

-- Run on SQL Server
SELECT
    r.replica_server_name AS [Replica],
    r.endpoint_url AS [Endpoint],
    rs.connected_state_desc AS [Connected state],
    rs.last_connect_error_description AS [Last connection error],
    rs.last_connect_error_number AS [Last connection error No],
    rs.last_connect_error_timestamp AS [Last error timestamp]
FROM
    sys.dm_hadr_availability_replica_states rs
    JOIN sys.availability_replicas r
    ON rs.replica_id = r.replica_id

Setelah koneksi dibuat, Object Explorer di SSMS awalnya mungkin menampilkan database yang direplikasi pada replika sekunder dalam status Restoring saat fase seeding awal bergerak dan memulihkan cadangan lengkap database. Setelah database dipulihkan, replikasi harus mengejar ketertinggalan untuk membawa dua database ke status yang disinkronkan. Database tidak lagi akan dalam status Pemulihan setelah penyemaian awal selesai. Penyemaian database kecil mungkin cukup cepat sehingga Anda tidak akan melihat status Memulihkan awal di SSMS.

Penting

  • Tautan tidak akan berfungsi kecuali konektivitas jaringan ada antara SQL Server dan SQL Managed Instance. Untuk memecahkan masalah konektivitas jaringan, ikuti langkah-langkah dalam Menguji konektivitas jaringan.
  • Ambil cadangan reguler file log pada SQL Server. Jika ruang log yang digunakan mencapai 100 persen, replikasi ke SQL Managed Instance berhenti sampai penggunaan ruang berkurang. Kami sangat merekomendasikan agar Anda mengotomatisasi pencadangan log dengan menyiapkan sebagai pekerjaan harian. Untuk detailnya, lihat Cadangkan file log di SQL Server.

Ambil pencadangan log transaksi pertama

Jika SQL Server adalah primary awal Anda, penting untuk mengambil cadangan log transaksi pertama pada SQL Server setelah penyemaian awal selesai, ketika database tidak lagi berada di status Restoring... pada Azure SQL Managed Instance. Kemudian lakukan pencadangan log transaksi SQL Server secara teratur untuk meminimalkan pertumbuhan log yang berlebihan saat SQL Server berfungsi sebagai peran utama.

Jika SQL Managed Instance adalah yang utama, Anda tidak perlu mengambil tindakan apa pun karena Azure SQL Managed Instance mengambil cadangan log secara otomatis.

Jika Anda ingin menghapus tautan, baik karena tidak lagi diperlukan, atau karena dalam keadaan tidak dapat diperbaiki dan perlu dibuat ulang, Anda dapat melakukannya dengan PowerShell dan T-SQL.

Pertama, gunakan perintah Remove-AzSqlInstanceLink PowerShell untuk menghilangkan tautan, seperti contoh berikut:

Remove-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $managedInstanceName -Name $DAGName -Force 

Kemudian, jalankan skrip T-SQL berikut pada SQL Server untuk menghilangkan grup ketersediaan terdistribusi. Ganti <DAGName> dengan nama grup ketersediaan terdistribusi yang digunakan untuk membuat tautan:

USE MASTER 
GO 

DROP AVAILABILITY GROUP <DAGName>  
GO 

Terakhir, secara opsional, Anda dapat menghapus grup ketersediaan jika Anda tidak lagi menggunakannya. Untuk melakukannya, ganti <AGName> dengan nama grup ketersediaan lalu jalankan pada instans masing-masing:

DROP AVAILABILITY GROUP <AGName>  
GO 

Pecahkan masalah

Jika Anda menemukan pesan kesalahan saat membuat tautan, tinjau pesan kesalahan di jendela output kueri untuk informasi selengkapnya. Untuk informasi selengkapnya, tinjau untuk mengatasi masalah dengan tautan.

Untuk menggunakan tautan:

Untuk mempelajari selengkapnya tentang tautan:

Untuk skenario replikasi dan migrasi lainnya, pertimbangkan: