Bagikan melalui


Mengonfigurasi tautan dengan skrip - Azure SQL Managed Instance

Berlaku untuk:Azure SQL Managed Instance

Artikel ini mengajarkan cara mengonfigurasi tautan 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, primer awal harus SQL Server. Setelah tautan dikonfigurasi, database dari primer awal direplikasi ke replika sekunder.

Anda dapat memilih untuk membiarkan tautan di tempat untuk replikasi data berkelanjutan di lingkungan hibrid antara replika primer dan sekunder, atau Anda dapat mengalihkan 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 memutuskan tautan dan fail back tidak didukung. Dengan SQL Server 2022, Anda memiliki opsi untuk mempertahankan tautan dan gagal bolak-balik antara dua replika - fitur ini saat ini dalam pratinjau.

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

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 Instans Terkelola di SQL Server Management Studio (SSMS) untuk menghasilkan skrip untuk membuat tautan. Pada halaman Ringkasan jendela tautan Instans Terkelola Baru, pilih Skrip alih-alih Selesai.

Prasyarat

Catatan

Beberapa fungsionalitas tautan umumnya tersedia, sementara beberapa saat ini dalam pratinjau. Tinjau dukungan versi untuk mempelajari lebih lanjut.

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 link individu.
  • Kolase antara SQL Server dan SQL Managed Instance harus sama. Ketidakcocokan dalam kolase dapat menyebabkan ketidakcocokan dalam kapitalisasi nama server dan mencegah keberhasilan koneksi dari SQL Server ke SQL Managed Instance.
  • Kesalahan 1475 pada SQL Server utama awal Anda menunjukkan bahwa Anda perlu memulai rantai cadangan baru dengan membuat cadangan penuh tanpa COPY ONLY opsi.
  • Untuk membuat tautan, atau failover, dari SQL Managed Instance ke SQL Server 2022, instans terkelola 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 Always-up-to-date.
  • Meskipun Anda dapat membuat tautan dari SQL Server 2022 ke instans terkelola SQL yang dikonfigurasi dengan kebijakan pembaruan Always-to-date, setelah failover ke SQL Managed Instance, Anda tidak akan lagi dapat mereplikasi data atau gagal kembali ke SQL Server 2022.

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 /read, /write
Microsoft.Sql/managedInstances/hybridCertificate /perbuatan
Microsoft.Sql/managedInstances/databases /read, /delete, /write, /completeRestore/action, /readBackups/action, /restoreDetails/read
Microsoft.Sql/managedInstances/distributedAvailabilityGroups /read, /write, /delete, /setRole/action
Microsoft.Sql/managedInstances/endpointCertificates /read
Microsoft.Sql/managedInstances/hybridLink /read, /write, /delete
Microsoft.Sql/managedInstances/serverTrustCertificates /write, /delete, /read

Terminologi dan konvensi penamaan

Saat menjalankan skrip dari panduan pengguna ini, pastikan untuk tidak salah mengira nama SQL Server dan SQL Managed Instance sebagai nama domain yang sepenuhnya memenuhi syarat (FQDN). Tabel berikut menjelaskan hal yang sebenarnya diwakili oleh berbagai nama dan cara mendapatkan nilainya:

Terminologi Deskripsi Cara mengetahuinya
Primer awal 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 kata tunggal yang pendek. Misalnya: sqlserver1. Jalankan SELECT @@SERVERNAME dari T-SQL.
FQDN SQL Server Nama domain yang sepenuhnya memenuhi syarat (FQDN) dari SQL Server Anda. Misalnya: sqlserver1.domain.com. Lihat konfigurasi jaringan (DNS) Anda di lokal, atau nama server jika Anda menggunakan mesin virtual (VM) Azure.
Nama SQL Managed Instance Nama Instans Terkelola SQL kata tunggal yang pendek. Misalnya: managedinstance1. Lihat nama instans terkelola Anda di portal Azure.
FQDN SQL Managed Instance Nama domain yang sepenuhnya memenuhi syarat (FQDN) dari SQL Managed Instance Anda. Misalnya: managedinstance1.6d710bcf372b.database.windows.net. Lihat nama host di halaman ringkasan SQL Managed Instance di portal Azure.
Nama domain yang dapat diselesaikan Nama DNS yang dapat diselesaikan ke alamat IP. Misalnya, menjalankan nslookup sqlserver1.domain.com harus mengembalikan alamat IP seperti 10.0.0.1. Jalankan nslookup perintah dari prompt perintah.
SQL Server IP Alamat IP SQL Server Anda. Dalam kasus beberapa IP di SQL Server, pilih alamat IP yang dapat diakses dari Azure. Jalankan ipconfig perintah dari prompt perintah OS host yang menjalankan SQL Server.

1 Mengonfigurasi Azure SQL Managed Instance sebagai primer awal Anda saat ini dalam pratinjau dan hanya didukung dimulai dengan 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. primer

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 Database 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 grup ketersediaan yang ada, daripada memiliki titik akhir khusus mereka 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 menggunakan Autentikasi Windows, Anda perlu menambahkan kepercayaan berbasis sertifikat ke titik akhir pencerminan yang ada sebagai opsi autentikasi sekunder. Anda dapat melakukan ini dengan menggunakan pernyataan, seperti yang ALTER ENDPOINT ditunjukkan nanti di artikel ini.

Penting

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

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

  1. Buat sertifikat di SQL Server dan dapatkan kunci umum.
  2. Dapatkan kunci umum sertifikat SQL Managed Instance.
  3. Tukar kunci umum 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.

Membuat sertifikat di SQL Server dan mengimpor kunci umum 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 di 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 dihasilkan secara otomatis dari skrip ini. Saat menyesuaikan nama sertifikat Anda sendiri di SQL Server diizinkan, nama tidak boleh berisi karakter apa pun \ .

-- 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 di 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 di 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 pendek 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 perintah Get-AzSqlInstanceServerTrustCertificate PowerShell atau az sql mi partner-cert list Azure CLI di Azure Cloud Shell. Untuk menghapus sertifikat SQL Server yang diunggah ke instans terkelola SQL, gunakan perintah Remove-AzSqlInstanceServerTrustCertificate PowerShell atau az sql mi partner-cert delete Azure CLI di Azure Cloud Shell.

Mendapatkan 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 perintah Get-AzSqlInstanceEndpointCertificate PowerShell atau az sql mi endpoint-cert show Azure CLI, 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-langkah berikutnya. Misalnya, PublicKey akan terlihat seperti "0x3082033E30...".

Jalankan skrip berikut. Ganti:

  • <SubscriptionID> dengan ID langganan Azure Anda.
  • <ManagedInstanceName> dengan nama pendek 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 di SQL Server. 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 sertifikat akar publik otoritas sertifikat (CA) Microsoft dan DigiCert ke SQL Server diperlukan agar SQL Server Anda mempercayai sertifikat yang dikeluarkan oleh Azure untuk domain database.windows.net.

Perhatian

Pastikan PublicKey dimulai dengan 0x. Anda mungkin perlu menambahkannya secara manual ke awal PublicKey jika belum ada.

Pertama, impor sertifikat otoritas akar Microsoft PKI di SQL Server:

-- Run on SQL Server
-- Import Microsoft PKI root-authority certificate (trusted by Azure), if not already present
IF NOT EXISTS (SELECT name FROM sys.certificates WHERE name = N'MicrosoftPKI')
BEGIN
    PRINT 'Creating MicrosoftPKI certificate.'
    CREATE CERTIFICATE [MicrosoftPKI] FROM BINARY = 0x308205A830820390A00302010202101ED397095FD8B4B347701EAABE7F45B3300D06092A864886F70D01010C05003065310B3009060355040613025553311E301C060355040A13154D6963726F736F667420436F72706F726174696F6E313630340603550403132D4D6963726F736F66742052534120526F6F7420436572746966696361746520417574686F726974792032303137301E170D3139313231383232353132325A170D3432303731383233303032335A3065310B3009060355040613025553311E301C060355040A13154D6963726F736F667420436F72706F726174696F6E313630340603550403132D4D6963726F736F66742052534120526F6F7420436572746966696361746520417574686F72697479203230313730820222300D06092A864886F70D01010105000382020F003082020A0282020100CA5BBE94338C299591160A95BD4762C189F39936DF4690C9A5ED786A6F479168F8276750331DA1A6FBE0E543A3840257015D9C4840825310BCBFC73B6890B6822DE5F465D0CC6D19CC95F97BAC4A94AD0EDE4B431D8707921390808364353904FCE5E96CB3B61F50943865505C1746B9B685B51CB517E8D6459DD8B226B0CAC4704AAE60A4DDB3D9ECFC3BD55772BC3FC8C9B2DE4B6BF8236C03C005BD95C7CD733B668064E31AAC2EF94705F206B69B73F578335BC7A1FB272AA1B49A918C91D33A823E7640B4CD52615170283FC5C55AF2C98C49BB145B4DC8FF674D4C1296ADF5FE78A89787D7FD5E2080DCA14B22FBD489ADBACE479747557B8F45C8672884951C6830EFEF49E0357B64E798B094DA4D853B3E55C428AF57F39E13DB46279F1EA25E4483A4A5CAD513B34B3FC4E3C2E68661A45230B97A204F6F0F3853CB330C132B8FD69ABD2AC82DB11C7D4B51CA47D14827725D87EBD545E648659DAF5290BA5BA2186557129F68B9D4156B94C4692298F433E0EDF9518E4150C9344F7690ACFC38C1D8E17BB9E3E394E14669CB0E0A506B13BAAC0F375AB712B590811E56AE572286D9C9D2D1D751E3AB3BC655FD1E0ED3740AD1DAAAEA69B897288F48C407F852433AF4CA55352CB0A66AC09CF9F281E1126AC045D967B3CEFF23A2890A54D414B92AA8D7ECF9ABCD255832798F905B9839C40806C1AC7F0E3D00A50203010001A3543052300E0603551D0F0101FF040403020186300F0603551D130101FF040530030101FF301D0603551D0E0416041409CB597F86B2708F1AC339E3C0D9E9BFBB4DB223301006092B06010401823715010403020100300D06092A864886F70D01010C05000382020100ACAF3E5DC21196898EA3E792D69715B813A2A6422E02CD16055927CA20E8BAB8E81AEC4DA89756AE6543B18F009B52CD55CD53396D624C8B0D5B7C2E44BF83108FF3538280C34F3AC76E113FE6E3169184FB6D847F3474AD89A7CEB9D7D79F846492BE95A1AD095333DDEE0AEA4A518E6F55ABBAB59446AE8C7FD8A2502565608046DB3304AE6CB598745425DC93E4F8E355153DB86DC30AA412C169856EDF64F15399E14A75209D950FE4D6DC03F15918E84789B2575A94B6A9D8172B1749E576CBC156993A37B1FF692C919193E1DF4CA337764DA19FF86D1E1DD3FAECFBF4451D136DCFF759E52227722B86F357BB30ED244DDC7D56BBA3B3F8347989C1E0F20261F7A6FC0FBB1C170BAE41D97CBD27A3FD2E3AD19394B1731D248BAF5B2089ADB7676679F53AC6A69633FE5392C846B11191C6997F8FC9D66631204110872D0CD6C1AF3498CA6483FB1357D1C1F03C7A8CA5C1FD9521A071C193677112EA8F880A691964992356FBAC2A2E70BE66C40C84EFE58BF39301F86A9093674BB268A3B5628FE93F8C7A3B5E0FE78CB8C67CEF37FD74E2C84F3372E194396DBD12AFBE0C4E707C1B6F8DB332937344166DE8F4F7E095808F965D38A4F4ABDE0A308793D84D00716245274B3A42845B7F65B76734522D9C166BAAA8D87BA3424C71C70CCA3E83E4A6EFB701305E51A379F57069A641440F86B02C91C63DEAAE0F84

    --Trust certificates issued by Microsoft PKI root authority for Azure database.windows.net domains
    DECLARE @CERTID int
    SELECT @CERTID = CERT_ID('MicrosoftPKI')
    EXEC sp_certificate_add_issuer @CERTID, N'*.database.windows.net'
END
ELSE
    PRINT 'Certificate MicrosoftPKI already exists.'
GO

Kemudian, impor sertifikat otoritas akar PKI DigiCert di SQL Server:

-- Run on SQL Server
-- Import DigiCert PKI root-authority certificate trusted by Azure to SQL Server, if not already present
IF NOT EXISTS (SELECT name FROM sys.certificates WHERE name = N'DigiCertPKI')
BEGIN
    PRINT 'Creating DigiCertPKI certificate.'
    CREATE CERTIFICATE [DigiCertPKI] FROM BINARY = 0x3082038E30820276A0030201020210033AF1E6A711A9A0BB2864B11D09FAE5300D06092A864886F70D01010B05003061310B300906035504061302555331153013060355040A130C446967694365727420496E6331193017060355040B13107777772E64696769636572742E636F6D3120301E06035504031317446967694365727420476C6F62616C20526F6F74204732301E170D3133303830313132303030305A170D3338303131353132303030305A3061310B300906035504061302555331153013060355040A130C446967694365727420496E6331193017060355040B13107777772E64696769636572742E636F6D3120301E06035504031317446967694365727420476C6F62616C20526F6F7420473230820122300D06092A864886F70D01010105000382010F003082010A0282010100BB37CD34DC7B6BC9B26890AD4A75FF46BA210A088DF51954C9FB88DBF3AEF23A89913C7AE6AB061A6BCFAC2DE85E092444BA629A7ED6A3A87EE054752005AC50B79C631A6C30DCDA1F19B1D71EDEFDD7E0CB948337AEEC1F434EDD7B2CD2BD2EA52FE4A9B8AD3AD499A4B625E99B6B00609260FF4F214918F76790AB61069C8FF2BAE9B4E992326BB5F357E85D1BCD8C1DAB95049549F3352D96E3496DDD77E3FB494BB4AC5507A98F95B3B423BB4C6D45F0F6A9B29530B4FD4C558C274A57147C829DCD7392D3164A060C8C50D18F1E09BE17A1E621CAFD83E510BC83A50AC46728F67314143D4676C387148921344DAF0F450CA649A1BABB9CC5B1338329850203010001A3423040300F0603551D130101FF040530030101FF300E0603551D0F0101FF040403020186301D0603551D0E041604144E2254201895E6E36EE60FFAFAB912ED06178F39300D06092A864886F70D01010B05000382010100606728946F0E4863EB31DDEA6718D5897D3CC58B4A7FE9BEDB2B17DFB05F73772A3213398167428423F2456735EC88BFF88FB0610C34A4AE204C84C6DBF835E176D9DFA642BBC74408867F3674245ADA6C0D145935BDF249DDB61FC9B30D472A3D992FBB5CBBB5D420E1995F534615DB689BF0F330D53E31E28D849EE38ADADA963E3513A55FF0F970507047411157194EC08FAE06C49513172F1B259F75F2B18E99A16F13B14171FE882AC84F102055D7F31445E5E044F4EA879532930EFE5346FA2C9DFF8B22B94BD90945A4DEA4B89A58DD1B7D529F8E59438881A49E26D56FADDD0DC6377DED03921BE5775F76EE3C8DC45D565BA2D9666EB33537E532B6

    --Trust certificates issued by DigiCert PKI root authority for Azure database.windows.net domains
    DECLARE @CERTID int
    SELECT @CERTID = CERT_ID('DigiCertPKI')
    EXEC sp_certificate_add_issuer @CERTID, N'*.database.windows.net'
END
ELSE
    PRINT 'Certificate DigiCertPKI already exists.'
GO

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

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

Mengamankan titik akhir pencerminan database

Jika Anda tidak memiliki grup ketersediaan yang sudah ada, atau titik akhir pencerminan database di SQL Server, langkah selanjutnya adalah membuat titik akhir pencerminan database di SQL Server dan mengamankannya dengan sertifikat SQL Server yang dihasilkan 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 di 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 5022 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=5022, LISTENER_IP = ALL)
    FOR DATABASE_MIRRORING (
        ROLE=ALL,
        AUTHENTICATION = CERTIFICATE [<SQL_SERVER_CERTIFICATE>],
        ENCRYPTION = REQUIRED ALGORITHM AES
    )  
GO

Validasi bahwa titik akhir pencerminan telah dibuat dengan menjalankan skrip berikut di 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 titik akhir state_desc kolom harus menyatakan STARTED.

Titik akhir pencerminan dibuat dengan autentikasi sertifikat dan enkripsi AES 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 ada dengan titik akhir pencerminan database yang ada.

Jika Anda menggunakan grup ketersediaan yang ada untuk link, atau jika ada titik akhir pencerminan database, pertama-tama pastikan bahwa ketentuan wajib untuk link berikut terpenuhi:

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

Jalankan kueri berikut di SQL Server guna melihat detail untuk titik akhir pencerminan database yang 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_algorthm_desc bukan AES, titik akhir perlu diubah untuk memenuhi persyaratan.

Di SQL Server, titik akhir pencerminan database yang sama digunakan untuk grup ketersediaan dan grup ketersediaan terdistribusi. Jika titik akhir connection_auth_desc Anda adalah NTLM (autentikasi Windows) atau KERBEROS, dan Anda memerlukan autentikasi Windows untuk grup ketersediaan yang ada, Anda dapat mengubah titik akhir untuk menggunakan beberapa metode autentikasi dengan mengalihkan opsi autentikasi ke NEGOTIATE CERTIFICATE. Perubahan ini memungkinkan grup ketersediaan yang ada untuk menggunakan autentikasi Windows, saat menggunakan autentikasi sertifikat 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 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 di 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=5022, 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 lagi kueri ini untuk menampilkan detail 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 telah berhasil memodifikasi titik akhir pencerminan database untuk link 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. Perintah untuk membuat grup ketersediaan berbeda jika SQL Managed Instance Anda adalah primer awal, yang hanya didukung dimulai dengan 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 seeding AUTOMATIC

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

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

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

  • <AGName> dengan nama grup ketersediaan Anda. Link Instans Terkelola memerlukan satu database 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 di langkah sebelumnya.
  • <SQLServerIP> dengan alamat IP SQL Server. Anda dapat menggunakan nama host SQL Server uang dapat diselesaikan sebagai alternatif, namun 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 [<AGName>]
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>:5022',
            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 apa adanya untuk semua versi SQL Server yang lebih baru.

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>.
  • <AGName> dengan nama grup ketersediaan yang Anda buat di langkah sebelumnya.
  • <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 pendek 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'<AGName>' WITH 
    (
      LISTENER_URL = 'TCP://<SQLServerIP>:5022',
      AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
      FAILOVER_MODE = MANUAL,
      SEEDING_MODE = AUTOMATIC,
      SESSION_TIMEOUT = 20
    ),
    N'<ManagedInstanceName>' WITH
    (
      LISTENER_URL = 'tcp://<ManagedInstanceFQDN>:5022;Server=[<ManagedInstanceName>]',
      AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
      FAILOVER_MODE = MANUAL,
      SEEDING_MODE = AUTOMATIC
    );
GO

Memverifikasi grup ketersediaan

Gunakan skrip berikut untuk membuat daftar atas semua grup ketersediaan dan grup ketersediaan terdistribusi di 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 hanya setelah connected 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 Management Studio Object Explorer 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 primer 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 tautan az sql mi memperlihatkan perintah 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 pendek instans terkelola Anda.
  • <AGName> dengan nama grup ketersediaan yang dibuat di SQL Server.
  • <DAGName> dengan nama grup ketersediaan terdistribusi yang dibuat di SQL Server.
  • <DatabaseName> dengan database yang direplikasi di grup ketersediaan di SQL Server.
  • <SQLServerIP> dengan alamat IP SQL Server Anda. Alamat IP yang disediakan harus dapat diakses oleh instans terkelola.
#  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
$AGName = "<AGName>"

# 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>"

# ==== 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 + ":5022"

# Create link on managed instance. Join distributed availability group on SQL Server.
New-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName -Name $DAGName |
-PrimaryAvailabilityGroupName $AGName -SecondaryAvailabilityGroupName $ManagedInstanceName |
-TargetDatabase $DatabaseName -SourceEndpoint $SourceIP

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 di SQL Server. Koneksi tidak akan seketika. Diperlukan waktu hingga satu menit agar DMV mulai menunjukkan koneksi yang berhasil. Terus refresh DMV hingga koneksi muncul 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 menunjukkan database yang direplikasi pada replika sekunder dalam status Pemulihan saat fase seeding awal bergerak dan memulihkan cadangan penuh database. Setelah database dipulihkan, replikasi harus mengejar ketertinggalan untuk membawa dua database ke status yang disinkronkan. Database tidak akan lagi berada di Pemulihan setelah penyemaian awal selesai. Seeding database kecil mungkin cukup cepat sehingga Anda tidak akan melihat status Pemulihan awal di Management Studio.

Penting

  • Link 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.
  • Cadangkan file log secara teratur di SQL Server. Jika ruang log yang digunakan mencapai 100 persen, replikasi ke SQL Managed Instance berhenti sampai penggunaan ruang berkurang. Sebaiknya otomatiskan pencadangan log dengan menyiapkan pekerjaan harian. Untuk mengetahui detailnya, lihat Mencadangkan file log di SQL Server.

Pecahkan masalah

Bagian ini menyediakan panduan untuk mengatasi masalah dengan mengonfigurasi dan menggunakan tautan.

Kesalahan

Jika Anda menemukan pesan kesalahan saat membuat tautan atau melakukan failover pada database, tinjau pesan kesalahan di jendela output kueri untuk informasi selengkapnya.

Jika Anda mengalami kesalahan saat bekerja dengan tautan, kueri berhenti dijalankan pada langkah yang gagal. Setelah kondisi kesalahan diselesaikan, jalankan kembali perintah untuk melanjutkan tindakan Anda.

Status tidak konsisten setelah failover paksa

Menggunakan failover paksa dapat mengakibatkan status yang tidak konsisten antara replika primer dan sekunder, menyebabkan skenario otak terpisah dari kedua replika berada dalam peran yang sama. Replikasi data gagal dalam status ini sampai pengguna menyelesaikan situasi dengan menunjuk satu replika secara manual sebagai primer dan replika lainnya sebagai sekunder.

Untuk informasi lebih lanjut tentang fitur link, baca artikel berikut: