Konfigurowanie linku za pomocą skryptów — Azure SQL Managed Instance
Dotyczy: Azure SQL Managed Instance
W tym artykule przedstawiono sposób konfigurowania połączenia między programem SQL Server i usługą Azure SQL Managed Instance za pomocą skryptów języka Transact-SQL i programu PowerShell lub interfejsu wiersza polecenia platformy Azure. Za pomocą linku bazy danych z początkowego podstawowego serwera są replikowane do repliki pomocniczej niemal w czasie rzeczywistym.
Po utworzeniu linku można przejść w tryb failover do repliki pomocniczej w celu migracji lub odzyskiwania po awarii.
Uwaga
- Istnieje również możliwość skonfigurowania linku za pomocą programu SQL Server Management Studio (SSMS).
- Konfigurowanie usługi Azure SQL Managed Instance jako początkowej podstawowej jest obsługiwane od programu SQL Server 2022 CU10.
Omówienie
Użyj funkcji linku, aby replikować bazy danych z początkowej repliki podstawowej do repliki pomocniczej. W przypadku programu SQL Server 2022 początkowy podstawowy może być sql Server lub Azure SQL Managed Instance. W przypadku programu SQL Server 2019 i starszych wersji początkowy podstawowy musi być programem SQL Server. Po skonfigurowaniu łącza baza danych z początkowego podstawowego serwera jest replikowana do repliki pomocniczej.
Możesz pozostawić łącze w miejscu na potrzeby ciągłej replikacji danych w środowisku hybrydowym między repliką podstawową i pomocniczą. Możesz też przestawić bazę danych w tryb failover do repliki pomocniczej, przeprowadzić migrację na platformę Azure lub na potrzeby odzyskiwania po awarii. W przypadku programu SQL Server 2019 i starszych wersji przełączenie w tryb failover do usługi Azure SQL Managed Instance powoduje przerwanie łącza i powrót po awarii nie jest obsługiwany. W programie SQL Server 2022 istnieje możliwość obsługi łącza i awarii między dwiema replikami.
Jeśli planujesz używać pomocniczego wystąpienia zarządzanego tylko do odzyskiwania po awarii, możesz zaoszczędzić na kosztach licencjonowania, aktywując korzyść użycia hybrydowego trybu failover.
Skorzystaj z instrukcji w tym artykule, aby ręcznie skonfigurować link między programem SQL Server i usługą Azure SQL Managed Instance. Po utworzeniu linku źródłowa baza danych pobiera kopię tylko do odczytu w docelowej repliki pomocniczej.
Napiwek
Aby uprościć korzystanie ze skryptów języka T-SQL z poprawnymi parametrami środowiska, zdecydowanie zalecamy użycie kreatora linku wystąpienia zarządzanego w programie SQL Server Management Studio (SSMS) w celu wygenerowania skryptu w celu utworzenia linku. Na stronie Podsumowanie okna linku Nowe wystąpienie zarządzane wybierz pozycję Skrypt zamiast zakończ.
Wymagania wstępne
Do replikowania baz danych potrzebne są następujące wymagania wstępne:
- Aktywna subskrypcja platformy Azure. Jeśli jej nie masz, utwórz bezpłatne konto.
- Obsługiwana wersja programu SQL Server z zainstalowaną wymaganą aktualizacją usługi.
- Usługa Azure SQL Managed Instance. Rozpocznij pracę , jeśli jej nie masz.
- Moduł programu PowerShell Az.SQL 3.9.0 lub nowszy albo interfejs wiersza polecenia platformy Azure w wersji 2.47.0 lub nowszej. Najlepiej, aby uruchamiać polecenia za pomocą usługi Azure Cloud Shell w trybie online z przeglądarki internetowej, ponieważ jest ona zawsze aktualizowana przy użyciu najnowszych wersji modułów.
- Prawidłowo przygotowane środowisko.
Rozważ następujące źródła:
- Funkcja linku obsługuje jedną bazę danych na łącze. Aby replikować wiele baz danych w wystąpieniu, utwórz link dla każdej pojedynczej bazy danych. Aby na przykład replikować 10 baz danych do usługi SQL Managed Instance, utwórz 10 pojedynczych łączy.
- Sortowanie między programem SQL Server i usługą SQL Managed Instance powinno być takie samo. Niezgodność sortowania może spowodować niezgodność wielkości liter nazwy serwera i uniemożliwić pomyślne połączenie z programu SQL Server do usługi SQL Managed Instance.
- Błąd 1475 w początkowej podstawowej wersji programu SQL Server wskazuje, że należy uruchomić nowy łańcuch kopii zapasowych, tworząc pełną kopię zapasową bez
COPY ONLY
opcji . - Aby ustanowić link lub tryb failover, z usługi SQL Managed Instance do programu SQL Server 2022, wystąpienie zarządzane musi być skonfigurowane przy użyciu zasad aktualizacji programu SQL Server 2022. Replikacja danych i tryb failover z usługi SQL Managed Instance do programu SQL Server 2022 nie są obsługiwane przez wystąpienia skonfigurowane przy użyciu zawsze aktualnych zasad aktualizacji.
- Chociaż można ustanowić link z programu SQL Server 2022 do wystąpienia zarządzanego SQL skonfigurowanego przy użyciu zawsze aktualnych zasad aktualizacji, po przejściu w tryb failover do usługi SQL Managed Instance nie będzie już można replikować danych ani wracać po awarii do programu SQL Server 2022.
Uprawnienia
W przypadku programu SQL Server należy mieć uprawnienia administratora systemu .
W przypadku usługi Azure SQL Managed Instance należy być członkiem współautora usługi SQL Managed Instance lub mieć następujące uprawnienia roli niestandardowej:
Microsoft.Sql/ zasób | Wymagane uprawnienia |
---|---|
Microsoft.Sql/managedInstances | /read, /write |
Microsoft.Sql/managedInstances/hybridCertificate | /akcję |
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 | /czytać |
Microsoft.Sql/managedInstances/hybridLink | /read, /write, /delete |
Microsoft.Sql/managedInstances/serverTrustCertificates | /write, /delete, /read |
Terminologia i konwencje nazewnictwa
Podczas uruchamiania skryptów z tego przewodnika użytkownika ważne jest, aby nie błędnie nazw programu SQL Server i wystąpienia zarządzanego SQL dla ich w pełni kwalifikowanych nazw domen (FQDN). W poniższej tabeli wyjaśniono, jakie nazwy dokładnie reprezentują i jak uzyskać ich wartości:
Terminologia | opis | Jak dowiedzieć się |
---|---|---|
Początkowy podstawowy 1 | Program SQL Server lub wystąpienie zarządzane SQL, w którym początkowo utworzysz link, aby replikować bazę danych do repliki pomocniczej. | |
Replika podstawowa | Program SQL Server lub wystąpienie zarządzane SQL, które obecnie hostuje podstawową bazę danych. | |
Replika pomocnicza | Program SQL Server lub wystąpienie zarządzane SQL, które odbiera niemal w czasie rzeczywistym zreplikowane dane z bieżącej repliki podstawowej. | |
SQL Server name (nazwa serwera SQL) | Krótka, pojedyncza nazwa programu SQL Server. Na przykład: sqlserver1. | Uruchom polecenie SELECT @@SERVERNAME z języka T-SQL. |
SQL Server FQDN | W pełni kwalifikowana nazwa domeny (FQDN) programu SQL Server. Na przykład: sqlserver1.domain.com. | Sprawdź konfigurację sieci (DNS) lokalnie lub nazwę serwera, jeśli używasz maszyny wirtualnej platformy Azure. |
Nazwa wystąpienia zarządzanego SQL | Krótka, pojedyncza nazwa wystąpienia zarządzanego SQL. Na przykład: managedinstance1. | Zobacz nazwę wystąpienia zarządzanego w witrynie Azure Portal. |
Nazwa FQDN wystąpienia zarządzanego SQL | W pełni kwalifikowana nazwa domeny (FQDN) wystąpienia zarządzanego SQL. Na przykład: managedinstance1.6d710bcf372b.database.windows.net. | Zobacz nazwę hosta na stronie przeglądu usługi SQL Managed Instance w witrynie Azure Portal. |
Rozpoznawalna nazwa domeny | Nazwa DNS, którą można rozpoznać jako adres IP. Na przykład uruchomienie nslookup sqlserver1.domain.com polecenia powinno zwrócić adres IP, taki jak 10.0.0.1. |
Uruchom nslookup polecenie w wierszu polecenia. |
SQL Server IP | Adres IP programu SQL Server. W przypadku wielu adresów IP w programie SQL Server wybierz adres IP dostępny z platformy Azure. | Uruchom ipconfig polecenie w wierszu polecenia systemu operacyjnego hosta z uruchomionym programem SQL Server. |
1 Konfigurowanie usługi Azure SQL Managed Instance jako początkowej podstawowej jest obsługiwane od programu SQL Server 2022 CU10.
Konfigurowanie odzyskiwania i tworzenia kopii zapasowej bazy danych
Jeśli program SQL Server jest podstawowym elementem podstawowym, bazy danych, które będą replikowane za pośrednictwem linku, muszą znajdować się w modelu pełnego odzyskiwania i mieć co najmniej jedną kopię zapasową. Ponieważ usługa Azure SQL Managed Instance automatycznie wykonuje kopie zapasowe, pomiń ten krok, jeśli wystąpienie zarządzane SQL jest podstawowym elementem podstawowym.
Uruchom następujący kod w programie SQL Server dla wszystkich baz danych, które chcesz replikować. Zastąp <DatabaseName>
wartość rzeczywistą nazwą bazy danych.
-- 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
Aby uzyskać więcej informacji, zobacz Tworzenie udostępnionej skrzynki pocztowej.
Uwaga
Link obsługuje tylko replikację baz danych użytkowników. Replikacja systemowych baz danych nie jest obsługiwana. Aby replikować obiekty na poziomie wystąpienia (przechowywane w bazach danych lub msdb
bazach master
danych), zalecamy wykonanie skryptów języka T-SQL i uruchomienie ich w wystąpieniu docelowym.
Ustanawianie zaufania między wystąpieniami
Najpierw należy ustanowić relację zaufania między dwoma wystąpieniami i zabezpieczyć punkty końcowe używane do komunikowania się i szyfrowania danych w sieci. Rozproszone grupy dostępności używają istniejącego punktu końcowego dublowania bazy danych grupy dostępności zamiast mieć własny dedykowany punkt końcowy. W związku z tym zabezpieczenia i zaufanie należy skonfigurować między dwoma wystąpieniami za pośrednictwem punktu końcowego dublowania bazy danych grupy dostępności.
Uwaga
Link jest oparty na technologii zawsze włączonej grupy dostępności. Punkt końcowy dublowania bazy danych to specjalny punkt końcowy, który jest używany wyłącznie przez grupy dostępności do odbierania połączeń z innych wystąpień. Punkt końcowy dublowania bazy danych nie powinien być mylony ze starszą funkcją dublowania bazy danych programu SQL Server.
Zaufanie oparte na certyfikatach to jedyny obsługiwany sposób zabezpieczania punktów końcowych dublowania bazy danych dla programu SQL Server i usługi SQL Managed Instance. Jeśli masz istniejące grupy dostępności korzystające z uwierzytelniania systemu Windows, musisz dodać zaufanie oparte na certyfikatach do istniejącego punktu końcowego dublowania jako opcję uwierzytelniania pomocniczego. Możesz to zrobić przy użyciu instrukcji ALTER ENDPOINT
, jak pokazano w dalszej części tego artykułu.
Ważne
Certyfikaty są generowane z datą i godziną wygaśnięcia. Należy je odnowić i obrócić przed ich wygaśnięciem.
Poniżej przedstawiono omówienie procesu zabezpieczania punktów końcowych dublowania bazy danych dla programu SQL Server i wystąpienia zarządzanego SQL:
- Wygeneruj certyfikat na serwerze SQL Server i uzyskaj jego klucz publiczny.
- Uzyskaj klucz publiczny certyfikatu usługi SQL Managed Instance.
- Wymiana kluczy publicznych między programem SQL Server i usługą SQL Managed Instance.
- Importowanie zaufanych kluczy głównego urzędu certyfikacji platformy Azure do programu SQL Server
W poniższych sekcjach szczegółowo opisano te kroki.
Tworzenie certyfikatu w programie SQL Server i importowanie jego klucza publicznego do usługi SQL Managed Instance
Najpierw utwórz klucz główny bazy danych w master
bazie danych, jeśli jeszcze nie istnieje. Wstaw hasło zamiast <strong_password>
w poniższym skrypcie i zachowaj je w bezpiecznym miejscu. Uruchom ten skrypt języka T-SQL w programie 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
Następnie wygeneruj certyfikat uwierzytelniania w programie SQL Server. W poniższym skrypcie zastąp:
@cert_expiry_date
z żądaną datą wygaśnięcia certyfikatu (data przyszła).
Zarejestruj tę datę i ustaw przypomnienie o rotacji (aktualizacji) certyfikatu serwera SQL przed datą wygaśnięcia, aby zapewnić ciągłą obsługę łącza.
Ważne
Zdecydowanie zaleca się użycie nazwy certyfikatu wygenerowanego automatycznie na podstawie tego skryptu. Podczas dostosowywania własnej nazwy certyfikatu w programie SQL Server jest dozwolone, nazwa nie powinna zawierać żadnych \
znaków.
-- 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
Następnie użyj następującego zapytania T-SQL w programie SQL Server, aby sprawdzić, czy certyfikat został utworzony:
-- Run on SQL Server
USE MASTER
GO
SELECT * FROM sys.certificates WHERE pvt_key_encryption_type = 'MK'
W wynikach zapytania zobaczysz, że certyfikat został zaszyfrowany przy użyciu klucza głównego.
Teraz możesz uzyskać klucz publiczny wygenerowanego certyfikatu w programie 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;
Zapisz wartości i SQLServerPublicKey
z danych wyjściowychSQLServerCertName
, ponieważ będzie potrzebny do następnego kroku podczas importowania certyfikatu.
Najpierw upewnij się, że zalogowano się na platformie Azure i wybrano subskrypcję, w której jest hostowane wystąpienie zarządzane. Wybranie odpowiedniej subskrypcji jest szczególnie ważne, jeśli masz więcej niż jedną subskrypcję platformy Azure na twoim koncie.
Zamień wartość <SubscriptionID>
na identyfikator swojej subskrypcji platformy Azure.
# 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
Następnie użyj polecenia New-AzSqlInstanceServerTrustTrustCertificate PowerShell lub az sql mi partner-cert create interfejsu wiersza polecenia platformy Azure, aby przekazać klucz publiczny certyfikatu uwierzytelniania z programu SQL Server na platformę Azure, na przykład w poniższym przykładzie programu PowerShell.
Wypełnij niezbędne informacje o użytkowniku, skopiuj je, wklej, a następnie uruchom skrypt. Wymiana:
<SQLServerPublicKey>
z publiczną częścią certyfikatu programu SQL Server w formacie binarnym, który został zarejestrowany w poprzednim kroku. Jest to długa wartość ciągu, która zaczyna się od0x
.<SQLServerCertName>
przy użyciu nazwy certyfikatu programu SQL Server zarejestrowanej w poprzednim kroku.<ManagedInstanceName>
z krótką nazwą wystąpienia zarządzanego.
# 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
Wynikiem tej operacji jest podsumowanie przekazanego certyfikatu programu SQL Server na platformę Azure.
Jeśli chcesz wyświetlić wszystkie certyfikaty programu SQL Server przekazane do wystąpienia zarządzanego, użyj polecenia interfejsu wiersza polecenia platformy Azure Get-AzSqlInstanceServerTrustCertificate PowerShell lub az sql mi partner-cert list interfejsu wiersza polecenia platformy Azure w usłudze Azure Cloud Shell. Aby usunąć certyfikat programu SQL Server przekazany do wystąpienia zarządzanego SQL, użyj polecenia Remove-AzSqlInstanceServerTrustCertificate PowerShell lub az sql mi partner-cert usuń interfejs wiersza polecenia platformy Azure w usłudze Azure Cloud Shell.
Pobieranie klucza publicznego certyfikatu z usługi SQL Managed Instance i importowanie go do programu SQL Server
Certyfikat umożliwiający zabezpieczenie punktu końcowego łącza jest generowany automatycznie w usłudze Azure SQL Managed Instance. Pobierz klucz publiczny certyfikatu z usługi SQL Managed Instance i zaimportuj go do programu SQL Server przy użyciu polecenia Get-AzSqlInstanceEndpointCertificate Programu PowerShell lub az sql mi endpoint-cert pokaż polecenie interfejsu wiersza polecenia platformy Azure, takie jak poniższy przykład programu PowerShell.
Uwaga
W przypadku korzystania z interfejsu wiersza polecenia platformy Azure należy ręcznie dodać 0x
element do przodu danych wyjściowych PublicKey podczas korzystania z niego w kolejnych krokach. Na przykład wartość PublicKey będzie wyglądać następująco: "0x3082033E30...".
Uruchom poniższy skrypt. Wymiana:
<SubscriptionID>
przy użyciu identyfikatora subskrypcji platformy Azure.<ManagedInstanceName>
z krótką nazwą wystąpienia zarządzanego.
# 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
Skopiuj całe dane wyjściowe PublicKey (zaczyna się od ) zgodnie z 0x
wymaganiami w następnym kroku.
Alternatywnie, jeśli wystąpią problemy podczas wklejania elementu PublicKey do kopiowania, możesz również uruchomić polecenie EXEC sp_get_endpoint_certificate 4
T-SQL w wystąpieniu zarządzanym, aby uzyskać klucz publiczny dla punktu końcowego łącza.
Następnie zaimportuj uzyskany klucz publiczny certyfikatu zabezpieczeń wystąpienia zarządzanego do programu SQL Server. Uruchom następujące zapytanie w programie SQL Server, aby utworzyć certyfikat punktu końcowego wystąpienia zarządzanego. Wymiana:
<ManagedInstanceFQDN>
z w pełni kwalifikowaną nazwą domeny wystąpienia zarządzanego.<PublicKey>
z wartością PublicKey uzyskaną w poprzednim kroku (od usługi Azure Cloud Shell, zaczynając od0x
). Nie musisz używać cudzysłowów.
Ważne
Nazwa certyfikatu musi być nazwą FQDN usługi SQL Managed Instance i nie powinna być modyfikowana. Łącze nie będzie działać, jeśli używasz nazwy niestandardowej.
-- Run on SQL Server
USE MASTER
CREATE CERTIFICATE [<ManagedInstanceFQDN>]
FROM BINARY = <PublicKey>
Importowanie zaufanych kluczy głównego urzędu certyfikacji platformy Azure do programu SQL Server
Importowanie publicznych kluczy certyfikatów głównych urzędów certyfikacji (CA) firmy Microsoft i DigiCert do programu SQL Server jest wymagane, aby program SQL Server ufał certyfikatom wystawionym przez platformę Azure dla domen database.windows.net.
Uwaga
Upewnij się, że klucz PublicKey zaczyna się od .0x
Może być konieczne ręczne dodanie go na początku elementu PublicKey, jeśli jeszcze go nie ma.
Najpierw zaimportuj certyfikat głównego urzędu PKI firmy Microsoft na serwerze 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
Następnie zaimportuj certyfikat głównego urzędu PKI firmy DigiCert na serwerze 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
Na koniec zweryfikuj wszystkie utworzone certyfikaty przy użyciu następującego dynamicznego widoku zarządzania (DMV):
-- Run on SQL Server
SELECT * FROM sys.certificates
Weryfikowanie certyfikatu
Po utworzeniu certyfikatów sprawdź, czy certyfikat punktu końcowego wystąpienia jest poprawnie skonfigurowany.
Najpierw określ certificate_id
wyeksportowany certyfikat mi, zastępując wartość , <ManagedInstanceFQDN>
a następnie uruchamiając następujące zapytanie w programie SQL Server:
-- 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
Następnie zweryfikuj certyfikat, zastępując wartość <certificate_id>
z wyniku poprzedniego zapytania, a następnie uruchamiając następujące zapytanie w programie SQL Server:
-- Run on SQL Server
USE MASTER
GO
EXEC sp_validate_certificate_ca_chain <certificate_id>
GO
Odpowiedź wskazuje Commands completed successfully. Completion time: …
, że certyfikat punktu końcowego wystąpienia został pomyślnie zweryfikowany.
Jeśli wystąpi błąd, usuń certyfikat i wykonaj kroki opisane w sekcji Pobieranie klucza publicznego certyfikatu z usługi SQL Managed Instance i zaimportuj go do programu SQL Server , aby ponownie zaimportować certyfikat.
Aby usunąć certyfikat, uruchom następujące zapytanie w programie SQL Server:
-- Run on SQL Server
USE MASTER
GO
DROP CERTIFICATE [<ManagedInstanceFQDN>]
GO
Zabezpieczanie punktu końcowego dublowania bazy danych
Jeśli nie masz istniejącej grupy dostępności lub punktu końcowego dublowania bazy danych w programie SQL Server, następnym krokiem jest utworzenie punktu końcowego dublowania bazy danych w programie SQL Server i zabezpieczenie go przy użyciu wcześniej wygenerowanego certyfikatu programu SQL Server. Jeśli masz istniejącą grupę dostępności lub punkt końcowy dublowania, przejdź do sekcji Zmienianie istniejącego punktu końcowego .
Tworzenie i zabezpieczanie punktu końcowego dublowania bazy danych w programie SQL Server
Aby sprawdzić, czy nie masz utworzonego punktu końcowego dublowania bazy danych, użyj następującego skryptu:
-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT * FROM sys.database_mirroring_endpoints WHERE type_desc = 'DATABASE_MIRRORING'
Jeśli poprzednie zapytanie nie pokazuje istniejącego punktu końcowego dublowania bazy danych, uruchom następujący skrypt w programie SQL Server, aby uzyskać nazwę wcześniej wygenerowanego certyfikatu programu 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'
Zapisz element SQLServerCertName z danych wyjściowych, ponieważ będzie on potrzebny w następnym kroku.
Użyj następującego skryptu, aby utworzyć nowy punkt końcowy dublowania bazy danych na porcie 5022 i zabezpieczyć punkt końcowy przy użyciu certyfikatu programu SQL Server. Wymiana:
<SQL_SERVER_CERTIFICATE>
o nazwie SQLServerCertName uzyskanej w poprzednim kroku.
-- 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
Sprawdź, czy punkt końcowy dublowania został utworzony, uruchamiając następujący skrypt w programie 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
Pomyślnie utworzono punkt końcowy state_desc kolumny powinien być w stanie STARTED
.
Utworzono nowy punkt końcowy dublowania z włączonym uwierzytelnianiem certyfikatu i szyfrowaniem AES.
Zmienianie istniejącego punktu końcowego
Uwaga
Pomiń ten krok, jeśli właśnie utworzono nowy punkt końcowy dublowania. Użyj tego kroku tylko wtedy, gdy używasz istniejących grup dostępności z istniejącym punktem końcowym dublowania bazy danych.
Jeśli używasz istniejących grup dostępności dla linku lub istniejącego punktu końcowego dublowania bazy danych, najpierw zweryfikuj, czy spełnia następujące obowiązkowe warunki dla linku:
- Typ musi mieć wartość
DATABASE_MIRRORING
. - Uwierzytelnianie połączenia musi mieć wartość
CERTIFICATE
. - Szyfrowanie musi być włączone.
- Algorytm szyfrowania musi mieć wartość
AES
.
Uruchom następujące zapytanie w programie SQL Server, aby wyświetlić szczegóły istniejącego punktu końcowego dublowania bazy danych:
-- 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
Jeśli dane wyjściowe pokazują, że istniejący DATABASE_MIRRORING
punkt końcowy nie CERTIFICATE
jest adresem lub encryption_algorthm_desc
nie AES
jest , punkt końcowy connection_auth_desc
musi zostać zmieniony, aby spełnić wymagania.
W programie SQL Server ten sam punkt końcowy dublowania bazy danych jest używany zarówno dla grup dostępności, jak i rozproszonych grup dostępności. Jeśli punkt connection_auth_desc
końcowy to NTLM
(uwierzytelnianie systemu Windows) lub KERBEROS
, i potrzebujesz uwierzytelniania systemu Windows dla istniejącej grupy dostępności, można zmienić punkt końcowy tak, aby używał wielu metod uwierzytelniania, przełączając opcję uwierzytelniania na NEGOTIATE CERTIFICATE
. Ta zmiana umożliwia istniejącej grupie dostępności korzystanie z uwierzytelniania systemu Windows podczas korzystania z uwierzytelniania certyfikatu dla usługi SQL Managed Instance.
Podobnie, jeśli szyfrowanie nie obejmuje algorytmów AES i potrzebujesz szyfrowania RC4, można zmienić punkt końcowy tak, aby używał obu algorytmów. Aby uzyskać szczegółowe informacje na temat możliwych opcji zmiany punktów końcowych, zobacz stronę dokumentacji dla sys.database_mirroring_endpoints.
Poniższy skrypt to przykład zmiany istniejącego punktu końcowego dublowania bazy danych w programie SQL Server. Wymiana:
<YourExistingEndpointName>
z istniejącą nazwą punktu końcowego.<SQLServerCertName>
z nazwą wygenerowanego certyfikatu programu SQL Server (uzyskanym w jednym z powyższych kroków).
W zależności od określonej konfiguracji może być konieczne dalsze dostosowanie skryptu. Możesz również użyć SELECT * FROM sys.certificates
polecenia , aby uzyskać nazwę utworzonego certyfikatu w programie 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
Po uruchomieniu ALTER
zapytania punktu końcowego i ustawieniu trybu podwójnego uwierzytelniania na system Windows i certyfikat, użyj tego zapytania ponownie w programie SQL Server, aby wyświetlić szczegóły punktu końcowego dublowania bazy danych:
-- 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
Pomyślnie zmodyfikowano punkt końcowy dublowania bazy danych dla linku usługi SQL Managed Instance.
Tworzenie grupy dostępności w programie SQL Server
Jeśli nie masz istniejącej grupy dostępności, następnym krokiem jest utworzenie jednej w programie SQL Server, niezależnie od tego, która będzie początkową bazą podstawową.
Uwaga
Pomiń tę sekcję, jeśli masz już istniejącą grupę dostępności.
Polecenia do utworzenia grupy dostępności różnią się, jeśli wystąpienie zarządzane SQL jest początkowym podstawowym, które jest obsługiwane tylko w przypadku programu SQL Server 2022 CU10.
Chociaż istnieje możliwość ustanowienia wielu łączy dla tej samej bazy danych, link obsługuje tylko replikację jednej bazy danych na łącze. Jeśli chcesz utworzyć wiele linków dla tej samej bazy danych, użyj tej samej grupy dostępności dla wszystkich łączy, ale następnie utwórz nową rozproszoną grupę dostępności dla każdej bazy danych między programem SQL Server i usługą SQL Managed Instance.
Jeśli program SQL Server jest podstawowym elementem podstawowym, utwórz grupę dostępności z następującymi parametrami linku:
- Początkowa nazwa serwera podstawowego
- Nazwa bazy danych
- Tryb trybu failover dla
MANUAL
- Tryb rozmieszczania
AUTOMATIC
Najpierw znajdź nazwę programu SQL Server, uruchamiając następującą instrukcję języka T-SQL:
-- Run on the initial primary
SELECT @@SERVERNAME AS SQLServerName
Następnie użyj następującego skryptu, aby utworzyć grupę dostępności w programie SQL Server. Wymiana:
<AGNameOnSQLServer>
z nazwą grupy dostępności w programie SQL Server. Link wystąpienia zarządzanego wymaga jednej bazy danych na grupę dostępności. W przypadku wielu baz danych należy utworzyć wiele grup dostępności. Rozważ nadanie każdej grupie dostępności nazw, tak aby jej nazwa odzwierciedlała odpowiednią bazę danych — na przykładAG_<db_name>
.<DatabaseName>
z nazwą bazy danych, którą chcesz replikować.<SQLServerName>
przy użyciu nazwy wystąpienia programu SQL Server uzyskanego w poprzednim kroku.<SQLServerIP>
z adresem IP programu SQL Server. Alternatywnie można użyć rozpoznawalnej nazwy maszyny hosta programu SQL Server, ale należy się upewnić, że nazwa jest rozpoznawalna z sieci wirtualnej usługi 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
Ważne
W przypadku programu SQL Server 2016 usuń WITH (CLUSTER_TYPE = NONE)
z powyższej instrukcji języka T-SQL. Pozostaw wartość tak jak w przypadku wszystkich nowszych wersji programu SQL Server.
Następnie utwórz rozproszoną grupę dostępności w programie SQL Server. Jeśli planujesz utworzyć wiele linków, musisz utworzyć rozproszoną grupę dostępności dla każdego linku, nawet jeśli ustanawiasz wiele linków dla tej samej bazy danych.
Zastąp następujące wartości, a następnie uruchom skrypt języka T-SQL, aby utworzyć rozproszoną grupę dostępności.
<DAGName>
z nazwą rozproszonej grupy dostępności. Ponieważ można skonfigurować wiele linków dla tej samej bazy danych, tworząc rozproszoną grupę dostępności dla każdego linku, rozważ odpowiednie nazewnictwo każdej rozproszonej grupy dostępności — na przykładDAG1_<db_name>
,DAG2_<db_name>
.<AGNameOnSQLServer>
z nazwą grupy dostępności utworzonej w poprzednim kroku.<AGNameOnSQLMI>
z nazwą grupy dostępności w usłudze SQL Managed Instance. Nazwa musi być unikatowa w usłudze SQL MI. Rozważ nadanie każdej grupie dostępności nazw, tak aby jej nazwa odzwierciedlała odpowiednią bazę danych — na przykładAG_<db_name>_MI
.<SQLServerIP>
przy użyciu adresu IP programu SQL Server z poprzedniego kroku. Alternatywnie można użyć rozpoznawalnej nazwy maszyny hosta programu SQL Server, ale upewnij się, że nazwa jest rozpoznawalna z sieci wirtualnej usługi SQL Managed Instance (która wymaga skonfigurowania niestandardowej usługi Azure DNS dla podsieci wystąpienia zarządzanego).<ManagedInstanceName>
z krótką nazwą wystąpienia zarządzanego.<ManagedInstanceFQDN>
z w pełni kwalifikowaną nazwą domeny wystąpienia zarządzanego.
-- 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
Weryfikowanie grup dostępności
Użyj poniższego skryptu, aby wyświetlić listę wszystkich grup dostępności i rozproszonych grup dostępności w wystąpieniu programu SQL Server. W tym momencie stan grupy dostępności musi mieć wartość connected
, a stan rozproszonych grup dostępności musi mieć wartość disconnected
. Stan rozproszonej grupy dostępności jest zmieniany connected
tylko po dołączeniu do usługi 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
Alternatywnie można użyć programu SSMS Eksplorator obiektów do znajdowania grup dostępności i rozproszonych grup dostępności. Rozwiń folder Zawsze włączona wysoka dostępność , a następnie folder Grupy dostępności.
Utwórz łącze
Na koniec możesz utworzyć link. Polecenia różnią się w zależności od tego, które wystąpienie jest początkowym podstawowym wystąpieniem. Użyj polecenia New-AzSqlInstanceLink PowerShell lub az sql mi link create interfejsu wiersza polecenia platformy Azure, aby utworzyć link, taki jak przykład programu PowerShell w tej sekcji. Tworzenie linku z usługi SQL Managed Instance podstawowego nie jest obecnie obsługiwane za pomocą interfejsu wiersza polecenia platformy Azure.
Jeśli chcesz wyświetlić wszystkie linki w wystąpieniu zarządzanym, użyj polecenia Get-AzSqlInstanceLink PowerShell lub az sql mi link pokaż polecenie interfejsu wiersza polecenia platformy Azure w usłudze Azure Cloud Shell.
Aby uprościć ten proces, zaloguj się do witryny Azure Portal i uruchom następujący skrypt z usługi Azure Cloud Shell. Wymiana:
<ManagedInstanceName>
z krótką nazwą wystąpienia zarządzanego.<AGNameOnSQLServer>
z nazwą grupy dostępności utworzonej w programie SQL Server.<AGNameOnSQLMI>
z nazwą grupy dostępności utworzonej w usłudze SQL Managed Instance.<DAGName>
z nazwą rozproszonej grupy dostępności utworzonej w programie SQL Server.<DatabaseName>
w bazie danych replikowanej w grupie dostępności w programie SQL Server.<SQLServerIP>
przy użyciu adresu IP programu SQL Server. Podany adres IP musi być dostępny dla wystąpienia zarządzanego.
Uwaga
Jeśli chcesz ustanowić link do grupy dostępności, która już istnieje, podaj adres IP odbiornika podczas podawania parametru <SQLServerIP>
.
# 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
Wynikiem tej operacji jest sygnatura czasowa pomyślnego wykonania żądania łącza .
Weryfikowanie linku
Aby sprawdzić połączenie między usługą SQL Managed Instance i programem SQL Server, uruchom następujące zapytanie w programie SQL Server. Połączenie nie będzie natychmiastowe. Wyświetlenie pomyślnego połączenia może potrwać do minuty. Odśwież widok DMV, dopóki połączenie nie zostanie wyświetlone jako POŁĄCZONE dla repliki usługi 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
Po nawiązaniu połączenia Eksplorator obiektów w programie SSMS może początkowo pokazać replikowane bazy danych w replice pomocniczej w stanie Przywracania, ponieważ początkowa faza rozmieszczania przenosi i przywraca pełną kopię zapasową bazy danych. Po przywróceniu bazy danych replikacja musi nadrobić zaległości w celu przywrócenia dwóch baz danych do stanu zsynchronizowanego. Baza danych nie będzie już w przywracaniu po zakończeniu początkowego rozmieszczania. Rozmieszczanie małych baz danych może być wystarczająco szybkie, aby nie zobaczyć początkowego stanu przywracania w programie SSMS.
Ważne
- Łącze nie będzie działać, chyba że istnieje łączność sieciowa między programem SQL Server i usługą SQL Managed Instance. Aby rozwiązać problemy z łącznością sieciową, wykonaj kroki opisane w artykule Testowanie łączności sieciowej.
- Wykonaj regularne kopie zapasowe pliku dziennika w programie SQL Server. Jeśli używana przestrzeń dziennika osiągnie 100 procent, replikacja do usługi SQL Managed Instance zostanie zatrzymana do momentu zmniejszenia użycia miejsca. Zdecydowanie zalecamy automatyzowanie kopii zapasowych dzienników przez skonfigurowanie codziennego zadania. Aby uzyskać szczegółowe informacje, zobacz Tworzenie kopii zapasowych plików dziennika w programie SQL Server.
Tworzenie pierwszej kopii zapasowej dziennika transakcji
Jeśli program SQL Server jest podstawowym elementem podstawowym, należy wykonać pierwszą kopię zapasową dziennika transakcji w programie SQL Server po zakończeniu początkowego rozmieszczania, gdy baza danych nie jest już w stanie Przywracanie... w usłudze Azure SQL Managed Instance. Następnie regularnie twórz kopie zapasowe dziennika transakcji programu SQL Server, aby zminimalizować nadmierny wzrost dziennika, podczas gdy program SQL Server jest w roli głównej.
Jeśli usługa SQL Managed Instance jest podstawowa, nie musisz wykonywać żadnych działań, ponieważ usługa Azure SQL Managed Instance automatycznie wykonuje kopie zapasowe dzienników.
Usuwanie linku
Jeśli chcesz usunąć link, ponieważ nie jest już potrzebny lub ponieważ jest w stanie nieodwracalnym i należy go ponownie utworzyć, możesz to zrobić za pomocą programu PowerShell i języka T-SQL.
Najpierw użyj polecenia Remove-AzSqlInstanceLink PowerShell, aby usunąć link, na przykład w poniższym przykładzie:
Remove-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $managedInstanceName -Name $DAGName -Force
Następnie uruchom następujący skrypt języka T-SQL w programie SQL Server, aby usunąć rozproszoną grupę dostępności. Zastąp <DAGName>
ciąg nazwą rozproszonej grupy dostępności użytej do utworzenia linku:
USE MASTER
GO
DROP AVAILABILITY GROUP <DAGName>
GO
Opcjonalnie możesz usunąć grupę dostępności, jeśli nie masz już do niej użycia. W tym celu zastąp element <AGName>
nazwą grupy dostępności, a następnie uruchom go w odpowiednim wystąpieniu:
DROP AVAILABILITY GROUP <AGName>
GO
Rozwiązywanie problemów
Jeśli podczas tworzenia linku wystąpi komunikat o błędzie, przejrzyj komunikat o błędzie w oknie danych wyjściowych zapytania, aby uzyskać więcej informacji.
Powiązana zawartość
Aby użyć linku:
- Link Przygotowanie środowiska do wystąpienia zarządzanego
- Konfigurowanie połączenia między programem SQL Server i wystąpieniem zarządzanym SQL za pomocą programu SSMS
- Przełącz łącze w tryb failover
- Migrowanie za pomocą linku
- Najlepsze rozwiązania dotyczące obsługi linku
Aby dowiedzieć się więcej na temat linku:
- Omówienie linku wystąpienia zarządzanego
- Połączenie odzyskiwania po awarii z wystąpieniem zarządzanym
W przypadku innych scenariuszy replikacji i migracji należy wziąć pod uwagę następujące kwestie: