Udostępnij za pośrednictwem


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

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 możesz zachować łącze i wrócić do trybu failover między dwiema replikami — ta funkcja jest obecnie dostępna w wersji zapoznawczej.

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

Uwaga

Niektóre funkcje linku są ogólnie dostępne, a niektóre są obecnie dostępne w wersji zapoznawczej. Przejrzyj możliwość obsługi wersji, aby dowiedzieć się więcej.

Do replikowania baz danych potrzebne są następujące wymagania wstępne:

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ątkowego wystąpienia podstawowego jest obecnie w wersji zapoznawczej i obsługiwane tylko w programie 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. podstawowy

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 pełnej kopii zapasowej bazy danych.

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:

  1. Wygeneruj certyfikat na serwerze SQL Server i uzyskaj jego klucz publiczny.
  2. Uzyskaj klucz publiczny certyfikatu usługi SQL Managed Instance.
  3. Wymiana kluczy publicznych między programem SQL Server i usługą SQL Managed Instance.
  4. 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ę od 0x.
  • <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 0xwymaganiami 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. 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 od 0x). 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

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 CERTIFICATEjest adresem lub encryption_algorthm_desc nie AESjest , 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ą. 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:

  • <AGName> z nazwą grupy dostępności. 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ład AG_<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 [<AGName>]
WITH (CLUSTER_TYPE = NONE) -- <- Delete this line for SQL Server 2016 only. Leave as-is for all higher versions.
    FOR database [<DatabaseName>]  
    REPLICA ON   
        N'<SQLServerName>' WITH   
            (  
            ENDPOINT_URL = 'TCP://<SQLServerIP>:5022',
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            FAILOVER_MODE = MANUAL,
            SEEDING_MODE = AUTOMATIC
            );
GO

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ład DAG1_<db_name>, DAG2_<db_name>.
  • <AGName> z nazwą grupy dostępności utworzonej w poprzednim kroku.
  • <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'<AGName>' WITH 
    (
      LISTENER_URL = 'TCP://<SQLServerIP>:5022',
      AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
      FAILOVER_MODE = MANUAL,
      SEEDING_MODE = AUTOMATIC,
      SESSION_TIMEOUT = 20
    ),
    N'<ManagedInstanceName>' WITH
    (
      LISTENER_URL = 'tcp://<ManagedInstanceFQDN>:5022;Server=[<ManagedInstanceName>]',
      AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
      FAILOVER_MODE = MANUAL,
      SEEDING_MODE = AUTOMATIC
    );
GO

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.

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.
  • <AGName> z nazwą grupy dostępności utworzonej w programie SQL Server.
  • <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.
#  Run in Azure Cloud Shell (select PowerShell console)
# =============================================================================
# POWERSHELL SCRIPT TO CREATE MANAGED INSTANCE LINK
# Instructs Managed Instance to join distributed availability group on SQL Server
# ===== Enter user variables here ====

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

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

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

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

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

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

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

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

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

Wynikiem tej operacji jest sygnatura czasowa pomyślnego wykonania żądania łącza .

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.

Rozwiązywanie problemów

Sekcja zawiera wskazówki dotyczące rozwiązywania problemów z konfigurowaniem i używaniem linku.

Błędy

Jeśli podczas tworzenia linku lub przełączenia bazy danych w tryb failover wystąpi komunikat o błędzie, przejrzyj komunikat o błędzie w oknie danych wyjściowych zapytania, aby uzyskać więcej informacji.

Jeśli podczas pracy z linkiem wystąpi błąd, zapytanie przestanie działać w kroku, które zakończyło się niepowodzeniem. Po rozwiązaniu warunku błędu ponownie uruchom polecenie, aby kontynuować akcję.

Niespójny stan po wymuszonym przejściu w tryb failover

Użycie wymuszonego trybu failover może spowodować niespójny stan między replikami podstawowymi i pomocniczymi, co powoduje podzielenie scenariusza mózgu z obu replik w tej samej roli. Replikacja danych kończy się niepowodzeniem w tym stanie, dopóki użytkownik nie rozwiąże sytuacji, ręcznie określając jedną replikę jako podstawową i drugą replikę jako pomocniczą.

Aby uzyskać więcej informacji na temat funkcji linku, zobacz następujące zasoby: