스크립트를 사용하여 링크 구성 - Azure SQL Managed Instance
적용 대상: Azure SQL Managed Instance
이 문서에서는 Transact-SQL과 PowerShell 또는 Azure CLI 스크립트를 사용하여 SQL Server와 Azure SQL Managed Instance 간에 링크를 구성하는 방법을 설명합니다. 이 링크를 사용하면 초기 주 복제본(replica)의 데이터베이스가 거의 실시간으로 보조 복제본으로 복제됩니다.
링크를 만든 다음, 마이그레이션이나 재해 복구를 위해 보조 복제본으로 장애 조치(failover)할 수 있습니다.
참고 항목
- SSMS(SQL Server Management Studio)를 사용하여 링크를 구성할 수도 있습니다.
- Azure SQL Managed Instance를 초기 주 복제본으로 구성하는 것은 SQL Server 2022 CU10부터 지원됩니다.
개요
링크 기능을 사용하면 초기 주 복제본의 데이터베이스를 보조 복제본으로 복제할 수 있습니다. SQL Server 2022의 경우 초기 주 복제본은 SQL Server 또는 Azure SQL Managed Instance일 수 있습니다. SQL Server 2019 이전 버전의 경우 초기 주 복제본은 SQL Server여야 합니다. 링크가 구성되면 초기 주 복제본의 데이터베이스가 보조 복제본으로 복제됩니다.
주 복제본과 보조 복제본 간의 하이브리드 환경에서 연속 데이터 복제를 위해 링크를 그대로 두거나 Azure로 마이그레이션하기 위해 또는 재해 복구를 위해 데이터베이스를 보조 복제본으로 장애 조치(failover)할 수 있습니다. SQL Server 2019 이전 버전의 경우 Azure SQL Managed Instance로 장애 조치(failover)하면 링크가 끊어지고 장애 복구(failback)는 지원되지 않습니다. SQL Server 2022에서는 링크를 유지하고 두 복제본 간에 장애 조치(failback)하는 옵션이 있습니다.
보조 Managed Instance를 재해 복구에만 사용하려면 하이브리드 장애 조치(failover) 혜택을 활성화하여 라이선스 비용을 절약할 수 있습니다.
이 문서의 지침을 수행하여 SQL Server 및 Azure SQL Managed Instance 간에 링크를 수동으로 설정합니다. 링크가 생성되면 원본 데이터베이스는 대상 보조 복제본에서 읽기 전용 복사본을 가져옵니다.
팁
올바른 환경 매개 변수로 T-SQL 스크립트 사용을 간소화하려면 SSMS(SQL Server Management Studio)의 Managed Instance 링크 마법사를 사용하여 링크를 만드는 스크립트를 생성하는 것이 좋습니다. 새 Managed Instance 링크 창의 요약 페이지에서 마침 대신 스크립트를 선택합니다.
필수 조건
데이터베이스를 복제하려면 다음 필수 조건이 필요합니다.
- 활성화된 Azure 구독. 아직 없는 경우 체험 계정을 만들 수 있습니다.
- 필요한 서비스 업데이트가 설치된 지원되는 SQL Server 버전
- Azure SQL Managed Instance. 아직 없는 경우 시작하세요.
- PowerShell 모듈 Az.SQL 3.9.0 이상 또는 Azure CLI 2.47.0 이상 또는 웹 브라우저에서 온라인으로 Azure Cloud Shell로 명령을 실행하는 것이 더 좋습니다. 항상 최신 모듈 버전으로 업데이트되기 때문입니다.
- 제대로 준비된 환경.
다음을 고려하십시오.
- 링크 기능은 링크당 하나의 데이터베이스를 지원합니다. 인스턴스에서 다중 데이터베이스를 복제하려면 각 개별 데이터베이스에 대한 링크를 만듭니다. 예를 들어 10개의 데이터베이스를 SQL Managed Instance에 복제하려면 10개의 개별 링크를 만듭니다.
- SQL Server와 SQL Managed Instance 간의 데이터 정렬은 동일해야 합니다. 데이터 정렬이 일치하지 않는 경우 서버 이름 대/소문자 구분이 일치하지 않을 수 있으며 SQL Server에서 SQL Managed Instance로의 성공적인 연결을 방해할 수 있습니다.
- 초기 SQL Server 주 복제본의 오류 1475는
COPY ONLY
옵션 없이 전체 백업을 만들어 새 백업 체인을 시작해야 함을 나타냅니다. - SQL Managed Instance에서 SQL Server 2022로의 링크 또는 장애 조치(failover)를 설정하려면 SQL Server 2022 업데이트 정책을 사용하여 Managed Instance를 구성해야 합니다. SQL Managed Instance에서 SQL Server 2022로의 데이터 복제 및 장애 조치(failover)는 항상 최신 업데이트 정책으로 구성된 인스턴스에서 지원되지 않습니다.
- SQL Server 2022에서 항상 최신 업데이트 정책을 사용하여 구성된 SQL Managed Instance로의 링크를 설정할 수 있지만 SQL Managed Instance로 장애 조치(failover)를 한 후에는 더 이상 데이터를 복제하거나 SQL Server 2022로 장애 복구할 수 없습니다.
사용 권한
SQL Server의 경우 sysadmin 권한이 있어야 합니다.
Azure SQL Managed Instance의 경우 SQL Managed Instance 기여자 구성원이거나 다음 사용자 지정 역할 권한이 있어야 합니다.
Microsoft.Sql/ 리소스 | 필요한 권한 |
---|---|
Microsoft.Sql/managedInstances | /read, /write |
Microsoft.Sql/managedInstances/hybridCertificate | /작업 |
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 |
용어 및 명명 규칙
이 사용자 가이드에서 스크립트를 실행할 때 SQL Server 및 SQL Managed Instance 이름을 FQDN(정규화된 도메인 이름)으로 혼동하지 않아야 합니다. 다음 표에서는 다양한 이름이 정확히 나타내는 항목과 해당 값을 가져오는 방법을 설명합니다.
용어 | Description | 확인 방법 |
---|---|---|
초기 주 복제본 1 | 초기에 데이터베이스를 보조 복제본으로 복제하는 링크를 만드는 SQL Server 또는 SQL Managed Instance입니다. | |
기본 복제본 | 현재 주 데이터베이스를 호스트하는 SQL Server 또는 SQL Managed Instance입니다. | |
보조 복제본 | 현재 주 복제본에서 거의 실시간으로 복제된 데이터를 수신하는 SQL Server 또는 SQL Managed Instance입니다. | |
SQL Server 이름 | 짧은 단일 단어 SQL Server 이름 예: sqlserver1. | T-SQL에서 SELECT @@SERVERNAME 을 실행합니다. |
SQL Server FQDN | SQL Server의 FQDN(정규화된 도메인 이름) 예: sqlserver1.domain.com. | Azure VM(가상 머신)을 사용하는 경우 네트워크(DNS) 구성 온-프레미스 또는 서버 이름을 참조하세요. |
SQL Managed Instance 이름 | 짧은 단일 단어 SQL Managed Instance 이름 예: managedinstance1. | Azure Portal에서 관리되는 인스턴스의 이름을 참조하세요. |
SQL Managed Instance FQDN | SQL Managed Instance의 FQDN(정규화된 도메인 이름) 예: managedinstance1.6d710bcf372b.database.windows.net. | Azure Portal의 SQL Managed Instance 개요 페이지에서 호스트 이름을 참조하세요. |
확인 가능한 도메인 이름 | IP 주소로 확인할 수 있는 DNS 이름입니다. 예를 들어 nslookup sqlserver1.domain.com 실행은 10.0.0.1과 같은 IP 주소를 반환해야 합니다. |
명령 프롬프트에서 nslookup 명령을 실행합니다. |
SQL Server IP | SQL Server의 IP 주소 SQL Server에 IP가 여러 개인 경우 Azure에서 액세스할 수 있는 IP 주소를 선택합니다. | SQL Server를 실행하는 호스트 OS의 명령 프롬프트에서ipconfig 명령을 실행합니다. |
1 Azure SQL Managed Instance를 초기 주 복제본으로 구성하는 것은 SQL Server 2022 CU10부터 지원됩니다.
데이터베이스 복구 및 백업 설정
SQL Server가 초기 주 복제본인 경우 링크를 통해 복제할 데이터베이스는 전체 복구 모드에 있어야 하며 데이터베이스에는 백업이 최소 하나 이상 있어야 합니다. Azure SQL Managed Instance는 자동으로 백업을 수행하므로 SQL Managed Instance가 초기 주 복제본이면 이 단계를 건너뜁니다.
복제하려는 모든 데이터베이스에 대해 SQL Server에서 다음 코드를 실행합니다. <DatabaseName>
을 실제 데이터베이스 이름으로 바꿉니다.
-- 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
자세한 내용은 전체 데이터베이스 백업 만들기를 참조하세요.
참고 항목
링크는 사용자 데이터베이스의 복제만 지원합니다. 시스템 데이터베이스의 복제는 지원되지 않습니다. master
또는 msdb
데이터베이스에 저장된 인스턴스 수준 개체를 복제하려면 해당 개체를 스크립팅하고 대상 인스턴스에서 T-SQL 스크립트를 실행하는 것이 좋습니다.
인스턴스 간 신뢰 설정
먼저 두 인스턴스 간에 신뢰를 설정하고 네트워크에서 통신하고 데이터를 암호화하는 데 사용된 엔드포인트를 보호해야 합니다. 분산 가용성 그룹은 자체 전용 엔드포인트가 아닌 기존 가용성 그룹 데이터베이스 미러링 엔드포인트를 사용합니다. 따라서 가용성 그룹 데이터베이스 미러링 엔드포인트를 통해 두 인스턴스 간에 보안과 신뢰를 구성해야 합니다.
참고 항목
링크는 Always On 가용성 그룹 기술을 기반으로 합니다. 데이터베이스 미러링 엔드포인트는 가용성 그룹에서 다른 인스턴스로부터 연결을 받는 데만 사용하는 특별한 용도의 엔드포인트입니다. 데이터베이스 미러링 엔드포인트 용어를 레거시 SQL Server 데이터베이스 미러링 기능과 오인해서는 안 됩니다.
인증서 기반 신뢰는 SQL Server 및 SQL Managed Instance의 데이터베이스 미러링 엔드포인트를 보호하기 위해 지원되는 유일한 방법입니다. Windows 인증을 사용하는 기존 가용성 그룹이 있는 경우 보조 인증 옵션으로 기존 미러링 엔드포인트에 인증서 기반 신뢰를 추가해야 합니다. 이 문서의 뒷부분에 나오는 대로 ALTER ENDPOINT
문을 사용하여 이 작업을 수행할 수 있습니다.
Important
인증서는 만료 날짜 및 시간으로 생성됩니다. 만료되기 전에 갱신 및 회전해야 합니다.
다음에서는 SQL Server 및 SQL Managed Instance 모두의 데이터베이스 미러링 엔드포인트를 보호하는 프로세스를 간략하게 설명합니다.
- SQL Server에서 인증서를 생성하고 해당 공개 키를 가져옵니다.
- SQL Managed Instance 인증서의 공개 키를 가져옵니다.
- SQL Server 및 SQL Managed Instance 간에 공개 키를 교환합니다.
- Azure에서 신뢰할 수 있는 루트 인증 기관 키를 SQL Server로 가져오기
다음 섹션에서는 관련 단계를 자세히 설명합니다.
SQL Server에서 인증서를 만들고 해당 공개 키를 SQL Managed Instance로 가져옵니다.
먼저 master
데이터베이스에 데이터베이스 마스터 키를 만듭니다(아직 없는 경우). 다음 스크립트의 <strong_password>
자리에 비밀번호를 삽입하고 안전한 장소에 기밀로 보관합니다. SQL Server에서 다음 T-SQL 스크립트를 실행합니다.
-- 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
그런 다음, SQL Server에서 인증서를 생성합니다. 다음 스크립트에서 다음을 바꿉니다.
@cert_expiry_date
를 원하는 인증서 만료 날짜(이후 날짜)로 바꿉니다.
이 날짜를 기록하고 만료일 전에 SQL Server 인증서를 순환(업데이트)하도록 미리 알림을 설정하여 링크의 연속 작동을 보장합니다.
Important
이 스크립트에서 자동 생성된 인증서 이름을 사용하는 것이 좋습니다. SQL Server에서 고유한 인증서 이름을 사용자 지정할 수 있지만 이름에는 \
문자가 포함되어서는 안 됩니다.
-- 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
그런 다음, SQL Server에서 다음 T-SQL 쿼리를 사용하여 인증서가 생성되었는지 확인합니다.
-- Run on SQL Server
USE MASTER
GO
SELECT * FROM sys.certificates WHERE pvt_key_encryption_type = 'MK'
쿼리 결과에서 인증서가 마스터 키로 암호화되었음을 확인할 수 있습니다.
이제 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;
다음 단계에 필요하므로 인증서를 가져올 때 출력에서 SQLServerCertName
및 SQLServerPublicKey
값을 저장합니다.
먼저 Azure에 로그인하고 관리되는 인스턴스가 호스트되는 구독을 선택했는지 확인합니다. 계정에 Azure 구독이 둘 이상인 경우 적절한 구독을 선택하는 것이 특히 중요합니다.
<SubscriptionID>
를 Azure 구독 ID로 바꿉니다.
# 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
그런 다음, New-AzSqlInstanceServerTrustCertificate PowerShell 또는 az sql mi partner-cert create Azure CLI 명령을 사용하여 다음 PowerShell 샘플과 같이 인증 인증서의 공개 키를 SQL Server에서 Azure로 업로드합니다.
필요한 사용자 정보를 입력하고 복사하여 붙여넣은 다음 스크립트를 실행합니다. 다음을
<SQLServerPublicKey>
를 이전 단계에서 기록된 이진 형식의 SQL Server 인증서 공개 부분으로 바꿉니다.0x
로 시작하는 긴 문자열 값입니다.<SQLServerCertName>
을 이전 단계에서 기록한 SQL Server 인증서 이름으로 바꿉니다.<ManagedInstanceName>
을 관리되는 인스턴스의 짧은 이름으로 바꿉니다.
# 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
이 작업 결과는 Azure에 업로드된 SQL Server 인증서의 요약입니다.
Managed Instance에 업로드된 모든 SQL Server 인증서를 확인하려면 Azure Cloud Shell에서 Get-AzSqlInstanceServerTrustCertificate PowerShell 또는 az sql mi partner-cert list Azure CLI 명령을 사용합니다. SQL Managed Instance에 업로드된 SQL Server 인증서를 제거하려면 Azure Cloud Shell에서 Remove-AzSqlInstanceServerTrustCertificate PowerShell 또는 az sql mi partner-cert delete Azure CLI 명령을 사용합니다.
SQL Managed Instance에서 인증서 공개 키를 받아서 SQL Server로 가져오기
링크 엔드포인트를 보호하는 인증서는 Azure SQL Managed Instance에서 자동으로 생성됩니다. 다음 PowerShell 샘플과 같이 Get-AzSqlInstanceEndpointCertificate PowerShell 또는 az sql mi endpoint-cert show Azure CLI 명령을 사용하여 SQL Managed Instance에서 인증서 공개 키를 가져오고 SQL Server로 가져옵니다.
주의
Azure CLI를 사용하는 경우 후속 단계에서 사용할 때 PublicKey 출력의 맨 앞에 수동으로 0x
를 추가해야 합니다. 예를 들어 PublicKey는 "0x3082033E30..."처럼 표시됩니다.
다음 스크립트를 실행합니다. 다음을
<SubscriptionID>
을(를) Azure 구독 ID로 바꿉니다.<ManagedInstanceName>
을(를) 관리되는 인스턴스의 짧은 이름으로 바꿉니다.
# 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
다음 단계에서 필요하므로 0x
로 시작하는 전체 PublicKey 출력을 복사합니다.
또는 PublicKey를 복사해서 붙여넣을 때 문제가 발생하는 경우 관리되는 인스턴스에서 T-SQL 명령인 EXEC sp_get_endpoint_certificate 4
을(를) 실행하여 링크 엔드포인트에 대한 공개 키를 가져올 수도 있습니다.
다음으로 관리되는 인스턴스 보안 인증서의 획득한 공개 키를 SQL Server에 가져옵니다. SQL Server에서 다음 쿼리를 실행하여 MI 엔드포인트 인증서를 만듭니다. 다음을
<ManagedInstanceFQDN>
을(를) 관리되는 인스턴스의 정규화된 도메인 이름으로 바꿉니다.<PublicKey>
을(를) 이전 단계에서 얻은 PublicKey 값으로 바꿉니다(Azure Cloud Shell에서0x
로 시작). 따옴표를 사용할 필요가 없습니다.
중요
인증서 이름은 SQL Managed Instance FQDN이어야 하며 수정되어서는 안 됩니다. 사용자 지정 이름을 사용하는 경우 링크가 작동되지 않습니다.
-- Run on SQL Server
USE MASTER
CREATE CERTIFICATE [<ManagedInstanceFQDN>]
FROM BINARY = <PublicKey>
Azure에서 신뢰할 수 있는 루트 인증 기관 키를 SQL Server로 가져오기
Azure에서 database.windows.net 도메인에 대해 발급한 인증서를 신뢰하려면 Microsoft 및 DigiCert CA(인증 기관)의 퍼블릭 루트 인증서 키를 SQL Server용으로 가져와야 합니다.
주의
PublicKey가 0x
로 시작하는지 확인합니다. 아직 없으면 PublicKey 시작 부분에 수동으로 추가해야 할 수 있습니다.
먼저 SQL Server에서 Microsoft PKI 루트 인증 기관 인증서를 가져옵니다.
-- 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
그런 다음, SQL Server에서 DigiCert PKI 루트 기관 인증서를 가져옵니다.
-- 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
마지막으로 다음 DMV(동적 관리 뷰)를 사용하여 만든 모든 인증서를 확인합니다.
-- Run on SQL Server
SELECT * FROM sys.certificates
인증서 유효성을 검사합니다.
인증서를 만든 후 MI 엔드포인트 인증서가 올바르게 구성되었는지 확인합니다.
먼저 SQL Server에서 certificate_id
값을 교체한 후 다음 쿼리를 실행하여 내보내기한 MI 인증서의 <ManagedInstanceFQDN>
값을 확인합니다.
-- Run on SQL Server
USE MASTER
GO
SELECT name, subject, certificate_id, start_date, expiry_date
FROM sys.certificates
WHERE issuer_name LIKE '%Microsoft Corporation%' AND name = '<ManagedInstanceFQDN>'
GO
다음으로, 이전 쿼리의 결과에서 <certificate_id>
값을 교체한 다음 SQL Server에서 다음 쿼리를 실행하여 인증서의 유효성을 검사합니다.
-- Run on SQL Server
USE MASTER
GO
EXEC sp_validate_certificate_ca_chain <certificate_id>
GO
Commands completed successfully. Completion time: …
응답은 MI 엔드포인트 인증서의 유효성을 성공적으로 검사했음을 나타냅니다.
오류가 발생하면 인증서를 삭제하고 SQL Managed Instance에서 인증서 공개 키 가져오기의 단계에 따라 SQL Server 섹션으로 가져와서 인증서를 다시 가져옵니다.
인증서를 삭제하려면 SQL 서버에서 다음 쿼리를 실행합니다.
-- Run on SQL Server
USE MASTER
GO
DROP CERTIFICATE [<ManagedInstanceFQDN>]
GO
데이터베이스 미러링 엔드포인트 보호
SQL Server에 기존 가용성 그룹이나 데이터베이스 미러링 엔드포인트가 없는 경우 다음 단계는 SQL Server에서 데이터베이스 미러링 엔드포인트을 만들고 이전에 생성한 SQL Server 인증서로 보호하는 것입니다. 기존 가용성 그룹이나 미러링 엔드포인트가 있으면 기존 엔드포인트 변경 섹션으로 건너뜁니다.
SQL Server에서 데이터베이스 미러 엔드포인트 만들기 및 보호
기존 데이터베이스 미러링 엔드포인트가 생성되지 않았는지 확인하려면 다음 스크립트를 사용합니다.
-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT * FROM sys.database_mirroring_endpoints WHERE type_desc = 'DATABASE_MIRRORING'
위의 쿼리에 기존 데이터베이스 미러링 엔드포인트가 표시되지 않는 경우 SQL Server에서 다음 스크립트를 실행하여 이전에 발급한 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'
SELECT @sqlserver_certificate_name as 'SQLServerCertName'
다음 단계에서 필요하니 출력의 SQLServerCertName을 저장합니다.
다음 스크립트를 사용하여 포트 5022에 새 데이터베이스 미러링 엔드포인트를 만들고 SQL Server 인증서로 엔드포인트를 보호합니다. 다음을
<SQL_SERVER_CERTIFICATE>
을 이전 단계에서 얻은 SQLServerCertName 이름으로 바꿉니다.
-- 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
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
성공적으로 생성된 엔드포인트 state_desc 열은 STARTED
상태여야 합니다.
인증서 인증을 사용하여 새 미러링 엔드포인트를 만들었으며 AES 암호화를 사용하도록 설정했습니다.
기존 엔드포인트 변경
참고
새 미러링 엔드포인트를 방금 만든 경우 이 단계를 건너뜁니다. 기존 데이터베이스 미러링 엔드포인트와 함께 기존 가용성 그룹을 사용하는 경우에만 이 단계를 사용합니다.
링크에 기존 가용성 그룹을 사용하거나 기존 데이터베이스 미러링 엔드포인트가 있는 경우 먼저 링크에 대해 다음 필수 조건을 충족하는지 확인합니다.
- 형식은
DATABASE_MIRRORING
이어야 합니다. - 연결 인증은
CERTIFICATE
여야 합니다. - 암호화를 사용하도록 설정해야 합니다.
- 암호화 알고리즘은
AES
여야 합니다.
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
출력에 기존 DATABASE_MIRRORING
엔드포인트 connection_auth_desc
가 CERTIFICATE
가 아니거나 encryption_algorthm_desc
가 AES
가 아닌 것으로 표시되는 경우 요구 사항에 맞게 엔드포인트를 변경해야 합니다.
SQL Server에서는 가용성 그룹과 분산 가용성 그룹 모두에 동일한 데이터베이스 미러링 엔드포인트가 사용됩니다. connection_auth_desc
엔드포인트가 NTLM
(Windows 인증) 또는 KERBEROS
이고 기존 가용성 그룹에 대한 Windows 인증이 필요한 경우 인증 옵션을 NEGOTIATE CERTIFICATE
로 전환하여 여러 인증 방법을 사용하도록 엔드포인트를 변경할 수 있습니다. 이 변경 내용으로 인해 기존 가용성 그룹에서 Windows 인증을 사용하는 동시에 SQL Managed Instance에 대한 인증서 인증을 사용할 수 있습니다.
마찬가지로 암호화에 AES가 포함되지 않고 RC4 암호화가 필요한 경우 두 알고리즘을 모두 사용하도록 엔드포인트를 변경할 수 있습니다. 엔드포인트를 변경하는 데 사용할 수 있는 옵션에 대한 자세한 내용은 sys.database_mirroring_endpoints에 대한 설명서 페이지를 참조하세요.
다음 스크립트는 SQL Server에서 기존 데이터베이스 미러링 엔드포인트를 변경하는 방법의 예입니다. 다음을
<YourExistingEndpointName>
을 기존 엔드포인트 이름으로 바꿉니다.<SQLServerCertName>
을 발급된 SQL Server 인증서의 이름(위의 이전 단계 중 한 단계에서 얻음)으로 바꿉니다.
특정 구성에 따라 스크립트를 추가로 사용자 지정해야 할 수 있습니다. SELECT * FROM sys.certificates
를 사용하여 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
ALTER
엔드포인트 쿼리를 실행하고 이중 인증 모드를 Windows 및 인증서로 설정한 후 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
SQL Managed Instance 링크에 대한 데이터베이스 미러링 엔드포인트를 성공적으로 수정했습니다.
SQL Server에서 가용성 그룹 만들기
기존 가용성 그룹이 없는 경우 다음 단계는 초기 주 복제본 여부에 관계없이 SQL Server에서 가용성 그룹을 만드는 것입니다.
참고 항목
기존 가용성 그룹이 이미 있는 경우 이 섹션을 건너뛰세요.
SQL Managed Instance가 SQL Server 2022 CU10부터 지원되는 초기 주 복제본인 경우 가용성 그룹을 만드는 명령은 다릅니다.
같은 데이터베이스에 링크 여러 개를 설정할 수 있지만 링크는 링크당 데이터베이스 하나의 복제본(replica)만 지원합니다. 같은 데이터베이스에 링크 여러 개를 만들려면 모든 링크에 같은 가용성 그룹을 사용한 다음, SQL Server 및 SQL Managed Instance 간의 데이터베이스 링크마다 새 분산 가용성 그룹을 만듭니다.
SQL Server가 초기 주 복제본이면 다음 링크 매개 변수를 사용하여 가용성 그룹을 만듭니다.
- 초기 주 서버 이름
- 데이터베이스 이름
MANUAL
의 장애 조치(failover) 모드AUTOMATIC
의 시드 모드
먼저 다음 T-SQL 문을 실행하여 SQL Server 이름을 확인합니다.
-- Run on the initial primary
SELECT @@SERVERNAME AS SQLServerName
그런 후, 다음 스크립트를 사용하여 SQL Server에서 가용성 그룹을 만듭니다. 다음을
<AGNameOnSQLServer>
을 SQL Server의 가용성 그룹 이름으로 바꿉니다. Managed Instance 링크에는 가용성 그룹당 하나의 데이터베이스가 필요합니다. 여러 데이터베이스의 경우 여러 개의 가용성 그룹을 만들어야 합니다. 이름이 해당 데이터베이스를 반영할 수 있도록 각 가용성 그룹의 이름을 지정하는 것이 좋습니다(예:AG_<db_name>
).<DatabaseName>
을 복제할 데이터베이스의 이름으로 바꿉니다.<SQLServerName>
을 이전 단계에서 가져온 SQL Server 인스턴스의 이름으로 바꿉니다.<SQLServerIP>
를 SQL Server IP 주소로 바꿉니다. 확인 가능한 SQL Server 호스트 컴퓨터 이름을 대안으로 사용할 수 있지만 이름이 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>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC
);
GO
중요
SQL Server 2016의 경우 위의 T-SQL 문에서 WITH (CLUSTER_TYPE = NONE)
을 삭제합니다. 모든 이후 SQL Server 버전에 대해 있는 그대로 둡니다.
다음으로, SQL Server에서 분산 가용성 그룹을 만듭니다. 링크를 여러 개 만들려는 경우 같은 데이터베이스에 링크를 여러 개 설정하는 경우에도 링크마다 분산 가용성 그룹을 만들어야 합니다.
다음 값을 바꾼 다음, T-SQL 스크립트를 실행하여 분산 가용성 그룹을 만듭니다.
<DAGName>
을 분산 가용성 그룹의 이름으로 바꿉니다. 링크마다 분산 가용성 그룹을 만들어 같은 데이터베이스에 링크를 여러 개 구성할 수 있으므로 그에 따라 각 분산 가용성 그룹 이름을 지정하는 것이 좋습니다(예:DAG1_<db_name>
,DAG2_<db_name>
).<AGNameOnSQLServer>
을 이전 단계에서 만든 그룹의 이름으로 바꿉니다.<AGNameOnSQLMI>
을 SQL Managed Instance의 가용성 그룹 이름으로 바꿉니다. 이 이름은 SQL MI에서 고유해야 합니다. 이름이 해당 데이터베이스를 반영할 수 있도록 각 가용성 그룹의 이름을 지정하는 것이 좋습니다(예:AG_<db_name>_MI
).<SQLServerIP>
를 이전 단계에서 SQL Server의 IP 주소로 바꿉니다. 확인 가능한 SQL Server 호스트 컴퓨터 이름을 대안으로 사용할 수 있지만 SQL Managed Instance 가상 네트워크에서 이름을 확인할 수 있는지 확인합니다(Managed Instance의 서브넷에 사용자 지정 Azure DNS를 구성해야 함).<ManagedInstanceName>
을 관리되는 인스턴스의 짧은 이름으로 바꿉니다.<ManagedInstanceFQDN>
을 관리되는 인스턴스 이름의 정규화된 도메인 이름으로 바꿉니다.
-- 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>:5022',
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
가용성 그룹 확인
다음 스크립트를 사용하여 SQL Server 인스턴스의 모든 가용성 그룹 및 분산 가용성 그룹을 나열합니다. 이 시점에서 가용성 그룹의 상태는 connected
여야 하며 분산 가용성 그룹의 상태는 disconnected
여야 합니다. 분산 가용성 그룹 상태는 SQL Managed Instance와 조인된 경우에만 connected
로 이동합니다.
-- 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
또는 SSMS 개체 탐색기를 사용하여 가용성 그룹 및 분산 가용성 그룹을 찾을 수 있습니다. Always On 고가용성 폴더를 확장한 다음, 가용성 그룹 폴더를 확장합니다.
링크 만들기
마지막으로, 링크를 만들 수 있습니다. 명령은 초기 주 복제본인 인스턴스에 따라 다릅니다. 이 섹션의 PowerShell 예제와 같이 New-AzSqlInstanceLink PowerShell 또는 az sql mi link create Azure CLI 명령을 사용하여 링크를 만듭니다. SQL Managed Instance 주 복제본에서 링크를 만드는 것은 현재 Azure CLI에서 지원되지 않습니다.
Managed Instance에서 모든 링크를 확인해야 하는 경우 Azure Cloud Shell에서 Get-AzSqlInstanceLink PowerShell 또는 az sql mi link show Azure CLI 명령을 사용합니다.
프로세스를 간소화하려면 Azure Portal에 로그인하고 Azure Cloud Shell에서 다음 스크립트를 실행합니다. 다음을
<ManagedInstanceName>
을 관리되는 인스턴스의 짧은 이름으로 바꿉니다.<AGNameOnSQLServer>
을 SQL Server에 만든 가용성 그룹의 이름으로 바꿉니다.<AGNameOnSQLMI>
을 SQL Managed Instance에 만든 가용성 그룹의 이름으로 바꿉니다.<DAGName>
을 SQL Server에서 만든 분산 가용성 그룹 이름으로 바꿉니다.<DatabaseName>
을 SQL Server에서 가용성 그룹에 복제된 데이터베이스로 바꿉니다.<SQLServerIP>
를 SQL Server IP 주소로 바꿉니다. 제공된 IP 주소는 관리되는 인스턴스에서 액세스할 수 있어야 합니다.
참고 항목
이미 존재하는 가용성 그룹에 대한 링크를 설정하고자 하는 경우, <SQLServerIP>
매개 변수를 제공할 때 수신기의 IP 주소를 입력합니다.
# 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>"
# ==== 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 $AGNameOnSQLServer -SecondaryAvailabilityGroupName $AGNameOnSQLMI |
-TargetDatabase $DatabaseName -SourceEndpoint $SourceIP
이 작업 결과는 링크 만들기 요청을 성공적으로 실행한 타임스탬프입니다.
링크 확인
SQL Managed Instance 및 SQL Server 간의 연결을 확인하려면 SQL Server에서 다음 쿼리를 실행합니다. 연결하는 데 시간이 거릴 수 있습니다. DMV가 성공적인 연결을 표시하기 시작하는 데 최대 1분이 걸릴 수 있습니다. SQL Managed Instance 복제본에 대한 연결이 CONNECTED로 나타날 때까지 DMV를 계속 새로 고칩니다.
-- 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
연결이 설정되면 초기 시드 배정 단계가 이동하고 데이터베이스의 전체 백업을 복원하므로 처음에는 SSMS의 개체 탐색기에 보조 복제본에서 복제된 데이터베이스가 복원 중 상태로 표시됩니다. 데이터베이스가 복원된 후에는 두 데이터베이스를 동기화된 상태로 만들기 위해 복제를 따라야 합니다. 초기 시드 배정이 완료되면 데이터베이스가 더 이상 복원 중 상태가 아닙니다. 작은 데이터베이스를 시드하는 것은 SSMS에서 초기 복원 상태를 볼 수 없을 정도로 빠를 수 있습니다.
중요
- SQL Server와 SQL Managed Instance 간에 네트워크 연결이 없으면 링크가 작동하지 않습니다. 네트워크 연결 문제를 해결하려면 네트워크 연결 테스트 단계를 수행합니다.
- SQL Server에서 로그 파일을 정기적으로 백업합니다. 사용된 로그 공간이 100%에 도달하면 공간 사용이 줄어들 때까지 SQL Managed Instance로의 복제가 중지됩니다. 매일의 작업을 설정하여 로그 백업을 자동화하는 것이 좋습니다. 자세한 내용은 SQL Server에서 로그 파일 백업을 참조하세요.
첫 번째 트랜잭션 로그 백업 수행
SQL Server가 초기 기본 데이터베이스인 경우, 초기 시드가 완료된 후 SQL Server에서 첫 번째 트랜잭션 로그 백업을 수행하는 것이 중요합니다. 단, Azure SQL Managed Instance에서 데이터베이스 상태가 더 이상 복원 중...이 아니어야 합니다. 그런 다음 SQL Server가 기본 역할에 있는 동안 과도한 로그 증가를 최소화하기 위해 SQL Server 트랜잭션 로그 백업을 정기적으로 수행합니다.
SQL Managed Instance가 기본 인스턴스인 경우 Azure SQL Managed Instance가 로그 백업을 자동으로 수행하므로 아무 작업도 수행할 필요가 없습니다.
링크 삭제
링크를 삭제하고자 하는 경우(더 이상 필요하지 않아서, 또는 복구할 수 없는 상태라서 다시 만들어야 하기 때문에) PowerShell과 T-SQL을 사용해 삭제할 수 있습니다.
우선, Remove-AzSqlInstanceLink PowerShell 명령을 사용해 다음 예시와 같이 링크를 삭제합니다.
Remove-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $managedInstanceName -Name $DAGName -Force
그런 다음, SQL Server에서 다음 T-SQL 스크립트를 실행해 분산 가용성 그룹을 삭제합니다. <DAGName>
을 링크를 만드는 데 사용한 분산 가용성 그룹의 이름으로 바꿉니다.
USE MASTER
GO
DROP AVAILABILITY GROUP <DAGName>
GO
마지막으로, 가용성 그룹이 더 이상 쓸모가 없는 경우 제거하면 됩니다(선택 사항). 그렇게 하려면 <AGName>
을(를) 가용성 그룹 이름으로 바꾼 다음 해당 인스턴스에서 실행하세요.
DROP AVAILABILITY GROUP <AGName>
GO
문제 해결
링크를 만들 때 오류 메시지가 표시되면 쿼리 출력 창에서 오류 메시지를 검토하여 자세한 정보를 확인합니다.
관련 콘텐츠
링크를 사용하려면 다음을 수행합니다.
- Managed Instance 링크에 대한 환경 준비
- SSMS를 사용하여 SQL Server와 SQL Managed Instance 간의 링크 구성
- 링크 장애 조치(failover)
- 링크를 사용하여 마이그레이션
- 링크 유지 관리 모범 사례
링크에 대해 자세히 알아보려면 다음을 수행합니다.
다른 복제 및 마이그레이션 시나리오의 경우 다음을 고려합니다.