Mereplikasi database dengan fitur link melalui skrip T-SQL dan PowerShell - Azure SQL Managed Instance
BERLAKU UNTUK:
Azure SQL Managed Instance
Artikel ini menunjukkan cara menggunakan skrip Transact-SQL (T-SQL) dan PowerShell untuk mereplikasi database Anda dari SQL Server ke Azure SQL Managed Instance menggunakan link Instans Terkelola.
Catatan
- Link merupakan fitur dari Azure SQL Managed Instance dan saat ini berada dalam pratinjau. Anda juga dapat menggunakan wizard SQL Server Management Studio (SSMS) untuk menyiapkan link replikasi database Anda.
- Skrip PowerShell dalam artikel ini memanggil REST API Azure SQL Managed Instance.
Prasyarat
Untuk mereplikasi database ke Azure SQL Managed Instance, Anda memerlukan prasyarat berikut:
- Langganan Azure aktif. Jika Anda tidak memilikinya, buat akun gratis.
- SQL Server 2019 edisi Enterprise atau Developer, dimulai dengan CU15 (15.0.4198.2).
- Azure SQL Managed Instance. Memulai jika Anda belum memilikinya.
- SQL Server Management Studio v18.11.1 atau versi yang lebih baru.
- Lingkungan yang dipersiapkan dengan baik.
Mereplikasi database
Gunakan petunjuk berikut untuk menyiapkan link antara instans SQL Server dan instans terkelola Anda secara manual. Setelah link dibuat, database sumber Anda akan mendapatkan salinan replika baca-saja di instans terkelola target Anda.
Catatan
Link hanya mendukung replikasi database pengguna. Replikasi database sistem tidak didukung. Untuk mereplikasi objek tingkat instans (disimpan dalam database master atau msdb), sebaiknya buat skrip dan jalankan skrip T-SQL pada instans tujuan.
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 |
|---|---|---|
| Nama SQL Server | Juga disebut nama pendek SQL Server. Misalnya: sqlserver1. Ini bukan nama domain yang sepenuhnya memenuhi syarat. | Jalankan SELECT @@SERVERNAME dari T-SQL. |
| FQDN SQL Server | Nama domain yang sepenuhnya memenuhi syarat untuk instans 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 | Juga disebut nama pendek SQL Managed Instance. Misalnya: managedinstance1. | Lihat nama instans terkelola Anda di portal Azure. |
| FQDN SQL Managed Instance | Nama domain yang sepenuhnya memenuhi syarat dari nama 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 akan menghasilkan alamat IP seperti 10.0.1.100. | Gunakan nslookup dari perintah. |
Membangun kepercayaan di antara instans
Langkah pertama dalam menyiapkan link adalah membangun kepercayaan antar 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 menggunakan titik akhir khususnya sendiri. Inilah sebabnya keamanan dan kepercayaan antara dua entitas perlu dikonfigurasi untuk titik akhir pencerminan database grup ketersediaan.
Kepercayaan berbasis sertifikat merupakan satu-satunya cara yang didukung untuk mengamankan titik akhir pencerminan database di 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 ALTER ENDPOINT.
Penting
Sertifikat dibuat dengan tanggal dan waktu kedaluwarsa. Sertifikat harus dirotasi sebelum kedaluwarsa.
Berikut adalah gambaran umum proses mengamankan titik akhir pencerminan database dari SQL Server dan SQL Managed Instance:
- Buat sertifikat di SQL Server dan dapatkan kunci umum.
- Dapatkan kunci umum sertifikat SQL Managed Instance.
- Tukar kunci umum antara SQL Server dan SQL Managed Instance.
Bagian berikut mendeskripsikan langkah-langkahnya secara mendetail.
Membuat sertifikat di SQL Server dan mengimpor kunci umum ke SQL Managed Instance
Pertama, buat kunci master di SQL Server dan buat sertifikat autentikasi:
-- Run on SQL Server
-- Create a master key encryption password
-- Keep the password confidential and in a secure place
USE MASTER
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong_password>'
GO
-- Create the SQL Server certificate for the instance link
USE MASTER
GO
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 + '] WITH SUBJECT = ''' + @sqlserver_certificate_subject + ''', EXPIRY_DATE = ''03/30/2025'''
EXEC sp_executesql @stmt = @create_sqlserver_certificate_command
GO
Kemudian, gunakan kueri T-SQL berikut di SQL Server untuk memverifikasi bahwa sertifikat telah dibuat:
-- Run on SQL Server
USE MASTER
GO
SELECT * FROM sys.certificates
Dalam hasil kueri, Anda akan mengetahui bahwa sertifikat telah dienkripsi dengan kunci master.
Anda kini bisa mendapatkan kunci umum sertifikat yang dihasilkan di SQL Server:
-- Run on SQL Server
-- Show the public key of the 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 @PUBLICKEYENC AS PublicKeyEncoded;
Simpan nilai PublicKeyEncoded dari output, karena Anda akan membutuhkannya untuk langkah berikutnya.
Untuk langkah selanjutnya, gunakan PowerShell dengan modul Az.Sql yang diinstal, versi 3.5.1 atau yang lebih baru. Atau gunakan Azure Cloud Shell online untuk menjalankan perintah karena selalu diperbarui dengan versi modul terbaru.
Jalankan skrip PowerShell berikut. (Jika Anda menggunakan Cloud Shell, isi informasi pengguna yang diperlukan, salin, tempelkan ke Cloud Shell, lalu jalankan skrip.) Ganti:
<SubscriptionID>dengan ID langganan Azure Anda.<ManagedInstanceName>dengan nama pendek instans terkelola Anda.<PublicKeyEncoded>dengan bagian umum sertifikat SQL Server dalam format biner yang dihasilkan pada langkah sebelumnya. Ini adalah nilai string panjang yang dimulai dengan0x.
# Run in Azure Cloud Shell
# ===============================================================================
# POWERSHELL SCRIPT TO IMPORT SQL SERVER CERTIFICATE TO MANAGED INSTANCE
# USER CONFIGURABLE VALUES
# (C) 2021-2022 SQL Managed Instance product group
# ===============================================================================
# Enter your Azure subscription ID
$SubscriptionID = "<YourSubscriptionID>"
# Enter your managed instance name – for example, "sqlmi1"
$ManagedInstanceName = "<YourManagedInstanceName>"
# Enter the name for the server trust certificate – for example, "Cert_sqlserver1_endpoint"
$certificateName = "<YourServerTrustCertificateName>"
# Insert the certificate public key blob that you got from SQL Server – for example, "0x1234567..."
$PublicKeyEncoded = "<PublicKeyEncoded>"
# ===============================================================================
# INVOKING THE API CALL -- REST OF THE SCRIPT IS NOT USER CONFIGURABLE
# ===============================================================================
# Log in and select a subscription if needed.
#
if ((Get-AzContext ) -eq $null)
{
echo "Logging to Azure subscription"
Login-AzAccount
}
Select-AzSubscription -SubscriptionName $SubscriptionID
# Build the URI for the API call.
#
$miRG = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName
$uriFull = "https://management.azure.com/subscriptions/" + $SubscriptionID + "/resourceGroups/" + $miRG+ "/providers/Microsoft.Sql/managedInstances/" + $ManagedInstanceName + "/serverTrustCertificates/" + $certificateName + "?api-version=2021-08-01-preview"
echo $uriFull
# Build the API request body.
#
$bodyFull = "{ `"properties`":{ `"PublicBlob`":`"$PublicKeyEncoded`" } }"
echo $bodyFull
# Get auth token and build the HTTP request header.
#
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$currentAzureContext = Get-AzContext
$profileClient = New-Object Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient($azProfile)
$token = $profileClient.AcquireAccessToken($currentAzureContext.Tenant.TenantId)
$authToken = $token.AccessToken
$headers = @{}
$headers.Add("Authorization", "Bearer "+"$authToken")
# Invoke API call
#
Invoke-WebRequest -Method PUT -Headers $headers -Uri $uriFull -ContentType "application/json" -Body $bodyFull
Operasi ini akan menghasilkan stempel waktu keberhasilan pengunggahan kunci privat sertifikat SQL Server ke SQL Managed Instance.
Mendapatkan kunci umum sertifikat dari SQL Managed Instance dan impor ke SQL Server
Sertifikat untuk mengamankan titik akhir untuk link dibuat secara otomatis. Bagian ini menjelaskan cara mendapatkan kunci umum sertifikat dari SQL Managed Instance dan cara mengimpor ke SQL Server.
Gunakan SQL Server Management Studio untuk menyambungkan ke SQL Managed Instance. Jalankan prosedur tersimpan sp_get_endpoint_certificate untuk mendapatkan kunci umum sertifikat:
-- Run on a managed instance
EXEC sp_get_endpoint_certificate @endpoint_type = 4
Salin seluruh kunci umum (yang dimulai dengan 0x) dari SQL Managed Instance. Jalankan kueri berikut di SQL Server dengan mengganti <InstanceCertificate> dengan nilai kunci. Anda tidak perlu menggunakan tanda kutip.
Penting
Nama sertifikat harus SQL Managed Instance FQDN.
-- Run on SQL Server
USE MASTER
CREATE CERTIFICATE [<SQLManagedInstanceFQDN>]
FROM BINARY = <InstanceCertificate>
Terakhir, verifikasi semua sertifikat yang dibuat dengan menggunakan tampilan manajemen dinamis (DMV) berikut:
-- Run on SQL Server
SELECT * FROM sys.certificates
Membuat titik akhir pencerminan di SQL Server
Jika Anda memiliki grup ketersediaan atau titik akhir pencerminan yang ada di SQL Server, langkah berikutnya adalah membuat titik akhir pencerminan di SQL Server dan mengamankannya dengan sertifikat. Jika Anda tidak memiliki grup ketersediaan atau titik akhir pencerminan yang ada, langsung ke bagian berikutnya, yakni Mengubah titik akhir yang ada.
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 menampilkan titik akhir pencerminan database yang ada, jalankan skrip berikut di SQL Server. Langkah akan ini membuat titik akhir pencerminan database yang baru di port 5022 dan mengamankan titik akhir dengan sertifikat.
-- 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
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. Dengan perubahan ini, grup ketersediaan yang ada dapat menggunakan autentikasi Windows sekaligus 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.<CERTIFICATE-NAME>dengan nama sertifikat SQL Server yang dihasilkan.
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 <CERTIFICATE-NAME>,
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 ada, maka langkah berikutnya adalah membuatnya di SQL Server. Buat grup ketersediaan dengan parameter berikut untuk link:
- Nama SQL Server
- Nama database
- Mode kegagalan
MANUAL - Mode seeding
AUTOMATIC
Pertama, temukan nama SQL Server Anda dengan menjalankan pernyataan T-SQL berikut:
-- Run on SQL Server
SELECT @@SERVERNAME AS SQLServerName
Lalu, gunakan skrip berikut untuk membuat grup ketersediaan di SQL Server. Ganti:
<SQLServerName>dengan nama instans SQL Server Anda.<AGName>dengan nama grup ketersediaan Anda. Untuk beberapa database, Anda harus membuat beberapa grup ketersediaan. Link Instans Terkelola memerlukan satu database untuk setiap grup ketersediaan. Pertimbangkan untuk memberi nama setiap grup ketersediaan sehingga namanya mencerminkan database yang sesuai - misalnyaAG_<db_name>.Catatan
Fitur link mendukung satu database per link. Untuk mereplikasi beberapa database di instans, buat link untuk setiap database individu. Misalnya, untuk mereplikasi 10 database ke SQL Managed Instance, buat 10 link individu.
<DatabaseName>dengan nama database yang ingin Anda replikasi.<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)
FOR database [<DatabaseName>]
REPLICA ON
'<SQLServerName>' WITH
(
ENDPOINT_URL = 'TCP://<SQLServerIP>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC
);
GO
Pertimbangkan skenario berikut:
- Link saat ini mendukung replikasi satu database per grup ketersediaan. Anda dapat mereplikasi beberapa database ke SQL Managed Instance dengan menyiapkan beberapa link.
- 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 menunjukkan bahwa Anda perlu memulai rantai cadangan baru dengan membuat cadangan penuh tanpa opsi
COPY ONLY.
Dalam kode berikut, ganti:
<DAGName>dengan nama grup ketersediaan terdistribusi Anda. Saat mereplikasi beberapa database, Anda memerlukan satu grup ketersediaan dan satu grup ketersediaan terdistribusi untuk setiap database. Pertimbangkan untuk menamai setiap item yang sesuai - misalnya,DAG_<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 host SQL Server sebagai alternatif, namun pastikan bahwa nama tersebut dapat diselesaikan dari jaringan virtual SQL Managed Instance.<ManagedInstanceName>dengan nama pendek instans terkelola Anda.<ManagedInstnaceFQDN>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
'<AGName>' WITH
(
LISTENER_URL = 'TCP://<SQLServerIP>:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC,
SESSION_TIMEOUT = 20
),
'<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 akan dipindahkan ke connected hanya jika telah digabungkan 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.
Membuat link
Langkah terakhir dari proses penyiapan adalah membuat link. Saat ini, Anda menyelesaikan hal ini dengan melakukan panggilan REST API.
Anda dapat memanggil panggilan API langsung ke Azure dengan menggunakan berbagai klien API. Untuk menyederhanakan proses, masuk ke portal Azure dan jalankan skrip PowerShell berikut dari Azure Cloud Shell. Ganti:
<SubscriptionID>dengan ID langganan Azure Anda.<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.<SQLServerAddress>dengan alamat instans SQL Server. Hal ini dapat berupa nama DNS, alamat IP publik, atau bahkan alamat IP pribadi. Alamat yang disediakan harus dapat diselesaikan dari node back-end yang menghosting instans terkelola.
# Run in Azure Cloud Shell
# =============================================================================
# POWERSHELL SCRIPT FOR CREATING MANAGED INSTANCE LINK
# USER CONFIGURABLE VALUES
# (C) 2021-2022 SQL Managed Instance product group
# =============================================================================
# Enter your Azure subscription ID
$SubscriptionID = "<SubscriptionID>"
# 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 address
$SQLServerAddress = "<SQLServerAddress>"
# =============================================================================
# INVOKING THE API CALL -- THIS PART IS NOT USER CONFIGURABLE
# =============================================================================
# Log in to the subscription if needed
if ((Get-AzContext ) -eq $null)
{
echo "Logging to Azure subscription"
Login-AzAccount
}
Select-AzSubscription -SubscriptionName $SubscriptionID
# -----------------------------------
# Build the URI for the API call
# -----------------------------------
echo "Building API URI"
$miRG = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName
$uriFull = "https://management.azure.com/subscriptions/" + $SubscriptionID + "/resourceGroups/" + $miRG+ "/providers/Microsoft.Sql/managedInstances/" + $ManagedInstanceName + "/distributedAvailabilityGroups/" + $DAGName + "?api-version=2021-05-01-preview"
echo $uriFull
# -----------------------------------
# Build the API request body
# -----------------------------------
echo "Buildign API request body"
$bodyFull = @"
{
"properties":{
"TargetDatabase":"$DatabaseName",
"SourceEndpoint":"TCP://$SQLServerAddress`:5022",
"PrimaryAvailabilityGroupName":"$AGName",
"SecondaryAvailabilityGroupName":"$ManagedInstanceName",
}
}
"@
echo $bodyFull
# -----------------------------------
# Get the authentication token and build the header
# -----------------------------------
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$currentAzureContext = Get-AzContext
$profileClient = New-Object Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient($azProfile)
$token = $profileClient.AcquireAccessToken($currentAzureContext.Tenant.TenantId)
$authToken = $token.AccessToken
$headers = @{}
$headers.Add("Authorization", "Bearer "+"$authToken")
# -----------------------------------
# Invoke the API call
# -----------------------------------
echo "Invoking API call to have Managed Instance join DAG on SQL Server"
$response = Invoke-WebRequest -Method PUT -Headers $headers -Uri $uriFull -ContentType "application/json" -Body $bodyFull
echo $response
Hasil operasi ini akan menjadi stempel waktu keberhasilan eksekusi permintaan untuk membuat link.
Memverifikasi link
Untuk memverifikasi bahwa koneksi telah dibuat antara SQL Managed Instance dan SQL Server, jalankan kueri berikut di SQL Server. Koneksi tidak akan terjadi secara instan setelah Anda melakukan panggilan API. Diperlukan waktu hingga satu menit agar DMV mulai menunjukkan koneksi yang berhasil. Terus segarkan DMV hingga koneksi muncul sebagai CONNECTED 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, tampilan Database Instans Terkelola di Management Studio awalnya menunjukkan database yang direplikasi dalam status Memulihkan saat fase seeding awal bergerak dan memulihkan pencadangan penuh database. Setelah database dipulihkan, replikasi harus mengejar ketertinggalan untuk membawa dua database ke status yang disinkronkan. Database tidak akan berstatus Pemulihan lagi setelah seeding 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 yang dijelaskan dalam Menguji konektivitas jaringan dua arah.
- 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.
Langkah berikutnya
Untuk informasi lebih lanjut tentang fitur link, baca artikel berikut:
- Managed Instance Link – Menyambungkan SQL Server ke Azure yang dirancang ulang
- Menyiapkan lingkungan Anda untuk link Instans Terkelola
- Menggunakan link Instans Terkelola dengan skrip untuk mereplikasi database
- Menggunakan link Managed Instance melalui SQL Server Management Studio untuk mereplikasi database
- Menggunakan link Managed Instance melalui SQL Server Management Studio untuk memigrasikan database