Samouczek: konfigurowanie replikacji transakcyjnej między usługą Azure SQL Managed Instance i programem SQL Server

Dotyczy:Azure SQL Managed Instance

Replikacja transakcyjna umożliwia replikowanie danych z jednej bazy danych do innej hostowanej w programie SQL Server lub usłudze Azure SQL Managed Instance. Wystąpienie zarządzane SQL może być wydawcą, dystrybutorem lub subskrybentem w topologii replikacji. Aby uzyskać dostępne konfiguracje, zobacz Konfiguracje replikacji transakcyjnej.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Skonfiguruj wystąpienie zarządzane jako wydawcę replikacji.
  • Konfigurowanie wystąpienia zarządzanego jako dystrybutora replikacji.
  • Skonfiguruj program SQL Server jako subskrybenta.

Replication between a managed instance publisher, managed instance distributor, and SQL Server subscriber

Ten samouczek jest przeznaczony dla doświadczonych odbiorców i zakłada, że użytkownik jest zaznajomiony z wdrażaniem i nawiązywaniem połączenia z wystąpieniami zarządzanymi i maszynami wirtualnymi programu SQL Server na platformie Azure.

Uwaga

W tym artykule opisano użycie replikacji transakcyjnej w usłudze Azure SQL Managed Instance. Nie jest to powiązane z grupami trybu failover— funkcją usługi Azure SQL Managed Instance, która umożliwia tworzenie pełnych replik do odczytu poszczególnych wystąpień. Podczas konfigurowania replikacji transakcyjnej z grupami trybu failover należy wziąć pod uwagę dodatkowe zagadnienia.

Wymagania wstępne

Aby ukończyć ten samouczek, upewnij się, że dysponujesz następującymi elementami:

Tworzenie grupy zasobów

Użyj następującego fragmentu kodu programu PowerShell, aby utworzyć nową grupę zasobów:

# set variables
$ResourceGroupName = "SQLMI-Repl"
$Location = "East US 2"

# Create a new resource group
New-AzResourceGroup -Name  $ResourceGroupName -Location $Location

Tworzenie dwóch wystąpień zarządzanych

Utwórz dwa wystąpienia zarządzane w tej nowej grupie zasobów przy użyciu witryny Azure Portal.

  • Nazwa wystąpienia zarządzanego wydawcy powinna mieć sql-mi-publisher wartość (wraz z kilkoma znakami dla losowania), a nazwa sieci wirtualnej powinna mieć wartość vnet-sql-mi-publisher.

  • Nazwa wystąpienia zarządzanego dystrybutora powinna być sql-mi-distributor (wraz z kilkoma znakami losowości) i powinna znajdować się w tej samej sieci wirtualnej co wystąpienie zarządzane wydawcy.

    Use the publisher VNet for the distributor

Aby uzyskać więcej informacji na temat tworzenia wystąpienia zarządzanego, zobacz Tworzenie wystąpienia zarządzanego w portalu.

Uwaga

Ze względu na prostotę i ponieważ jest to najbardziej typowa konfiguracja, ten samouczek sugeruje umieszczenie wystąpienia zarządzanego dystrybutora w tej samej sieci wirtualnej co wydawca. Można jednak utworzyć dystrybutora w oddzielnej sieci wirtualnej. W tym celu należy skonfigurować komunikację równorzędną sieci wirtualnych między sieciami wirtualnymi wydawcy i dystrybutora, a następnie skonfigurować komunikację równorzędną sieci wirtualnych między sieciami wirtualnymi dystrybutora i subskrybenta.

Tworzenie maszyny wirtualnej z programem SQL Server

Utwórz maszynę wirtualną z programem SQL Server przy użyciu witryny Azure Portal. Maszyna wirtualna programu SQL Server powinna mieć następujące cechy:

  • Nazwa: sql-vm-sub
  • Obraz: SQL Server 2016 lub nowszy
  • Grupa zasobów: taka sama jak wystąpienie zarządzane
  • Sieć wirtualna: sql-vm-sub-vnet

Aby uzyskać więcej informacji na temat wdrażania maszyny wirtualnej z programem SQL Server na platformie Azure, zobacz Szybki start: tworzenie maszyny wirtualnej z programem SQL Server.

Zarządzanie komunikacją równorzędną sieci wirtualnych

Skonfiguruj komunikację równorzędną sieci wirtualnych, aby umożliwić komunikację między siecią wirtualną dwóch wystąpień zarządzanych i siecią wirtualną programu SQL Server. W tym celu użyj tego fragmentu kodu programu PowerShell:

# Set variables
$SubscriptionId = '<SubscriptionID>'
$resourceGroup = 'SQLMI-Repl'
$pubvNet = 'sql-mi-publisher-vnet'
$subvNet = 'sql-vm-sub-vnet'
$pubsubName = 'Pub-to-Sub-Peer'
$subpubName = 'Sub-to-Pub-Peer'

$virtualNetwork1 = Get-AzVirtualNetwork `
  -ResourceGroupName $resourceGroup `
  -Name $pubvNet

 $virtualNetwork2 = Get-AzVirtualNetwork `
  -ResourceGroupName $resourceGroup `
  -Name $subvNet  

# Configure VNet peering from publisher to subscriber
Add-AzVirtualNetworkPeering `
  -Name $pubsubName `
  -VirtualNetwork $virtualNetwork1 `
  -RemoteVirtualNetworkId $virtualNetwork2.Id

# Configure VNet peering from subscriber to publisher
Add-AzVirtualNetworkPeering `
  -Name $subpubName `
  -VirtualNetwork $virtualNetwork2 `
  -RemoteVirtualNetworkId $virtualNetwork1.Id

# Check status of peering on the publisher VNet; should say connected
Get-AzVirtualNetworkPeering `
 -ResourceGroupName $resourceGroup `
 -VirtualNetworkName $pubvNet `
 | Select PeeringState

# Check status of peering on the subscriber VNet; should say connected
Get-AzVirtualNetworkPeering `
 -ResourceGroupName $resourceGroup `
 -VirtualNetworkName $subvNet `
 | Select PeeringState

Po ustanowieniu komunikacji równorzędnej sieci wirtualnych przetestuj łączność, uruchamiając program SQL Server Management Studio (SSMS) w programie SQL Server i łącząc się z obydwoma wystąpieniami zarządzanymi. Aby uzyskać więcej informacji na temat nawiązywania połączenia z wystąpieniem zarządzanym przy użyciu programu SSMS, zobacz Nawiązywanie połączenia z usługą SQL Managed Instance przy użyciu programu SSMS.

Test connectivity to the managed instances

Tworzenie prywatnej strefy DNS

Prywatna strefa DNS umożliwia routing DNS między wystąpieniami zarządzanymi i programem SQL Server.

Tworzenie prywatnej strefy DNS

  1. Zaloguj się do Azure Portal.

  2. Wybierz pozycję Utwórz zasób, aby utworzyć nowy zasób platformy Azure.

  3. Wyszukaj ciąg private dns zone w witrynie Azure Marketplace.

  4. Wybierz zasób strefy Prywatna strefa DNS opublikowany przez firmę Microsoft, a następnie wybierz pozycję Utwórz, aby utworzyć strefę DNS.

  5. Wybierz subskrypcję i grupę zasobów z listy rozwijanej.

  6. Podaj dowolną nazwę strefy DNS, taką jak repldns.com.

    Create private DNS zone

  7. Wybierz pozycję Przejrzyj i utwórz. Przejrzyj parametry prywatnej strefy DNS, a następnie wybierz pozycję Utwórz , aby utworzyć zasób.

Tworzenie rekordu A

  1. Przejdź do nowej strefy Prywatna strefa DNS i wybierz pozycję Przegląd.

  2. Wybierz pozycję + Zestaw rekordów, aby utworzyć nowy rekord A.

  3. Podaj nazwę maszyny wirtualnej z programem SQL Server, a także prywatny wewnętrzny adres IP.

    Configure an A record

  4. Wybierz przycisk OK , aby utworzyć rekord A.

  1. Przejdź do nowej strefy Prywatna strefa DNS i wybierz pozycję Łącza sieci wirtualnej.

  2. Wybierz + Dodaj.

  3. Podaj nazwę linku, na przykład Pub-link.

  4. Wybierz swoją subskrypcję z listy rozwijanej, a następnie wybierz sieć wirtualną dla wystąpienia zarządzanego wydawcy.

  5. Zaznacz pole wyboru obok pozycji Włącz automatyczną rejestrację.

    Create VNet link

  6. Wybierz przycisk OK , aby połączyć sieć wirtualną.

  7. Powtórz te kroki, aby dodać link dla sieci wirtualnej subskrybenta z nazwą taką jak Sub-link.

Tworzenie konta usługi Azure Storage

Utwórz konto usługi Azure Storage dla katalogu roboczego, a następnie utwórz udział plików na koncie magazynu.

Skopiuj ścieżkę udziału plików w formacie: \\storage-account-name.file.core.windows.net\file-share-name

Przykład: \\replstorage.file.core.windows.net\replshare

Skopiuj klucz dostępu do magazynu parametry połączenia w formacie:DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net

Przykład: DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=dYT5hHZVu9aTgIteGfpYE64cfis0mpKTmmc8+EP53GxuRg6TCwe5eTYWrQM4AmQSG5lb3OBskhg==;EndpointSuffix=core.windows.net

Aby uzyskać więcej informacji, zobacz Zarządzanie kluczami dostępu do konta magazynu.

Utwórz bazę danych

Utwórz nową bazę danych w wystąpieniu zarządzanym wydawcy. W tym celu wykonaj następujące kroki:

  1. Uruchom program SQL Server Management Studio w programie SQL Server.
  2. Połączenie do wystąpienia zarządzanegosql-mi-publisher.
  3. Otwórz okno Nowe zapytanie i wykonaj następujące zapytanie T-SQL, aby utworzyć bazę danych.
-- Create the databases
USE [master]
GO

-- Drop database if it exists
IF EXISTS (SELECT * FROM sys.sysdatabases WHERE name = 'ReplTutorial')
BEGIN
    DROP DATABASE ReplTutorial
END
GO

-- Create new database
CREATE DATABASE [ReplTutorial]
GO

-- Create table
USE [ReplTutorial]
GO
CREATE TABLE ReplTest (
   ID INT NOT NULL PRIMARY KEY,
   c1 VARCHAR(100) NOT NULL,
   dt1 DATETIME NOT NULL DEFAULT getdate()
)
GO

-- Populate table with data
USE [ReplTutorial]
GO

INSERT INTO ReplTest (ID, c1) VALUES (6, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (2, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (3, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (4, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (5, 'pub')
GO
SELECT * FROM ReplTest
GO

Konfigurowanie dystrybucji

Po nawiązaniu łączności i utworzeniu przykładowej bazy danych można skonfigurować dystrybucję w wystąpieniu sql-mi-distributor zarządzanym. W tym celu wykonaj następujące kroki:

  1. Uruchom program SQL Server Management Studio w programie SQL Server.

  2. Połączenie do wystąpienia zarządzanegosql-mi-distributor.

  3. Otwórz okno Nowe zapytanie i uruchom następujący kod Języka Transact-SQL, aby skonfigurować dystrybucję w wystąpieniu zarządzanym dystrybutora:

    EXEC sp_adddistributor @distributor = 'sql-mi-distributor.b6bf57.database.windows.net', @password = '<distributor_admin_password>'
    
    EXEC sp_adddistributiondb @database = N'distribution'
    
    EXEC sp_adddistpublisher @publisher = 'sql-mi-publisher.b6bf57.database.windows.net', -- primary publisher
         @distribution_db = N'distribution',
         @security_mode = 0,
         @login = N'azureuser',
         @password = N'<publisher_password>',
         @working_directory = N'\\replstorage.file.core.windows.net\replshare',
         @storage_connection_string = N'<storage_connection_string>'
         -- example: @storage_connection_string = N'DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=dYT5hHZVu9aTgIteGfpYE64cfis0mpKTmmc8+EP53GxuRg6TCwe5eTYWrQM4AmQSG5lb3OBskhg==;EndpointSuffix=core.windows.net'
    
    

    Uwaga

    Pamiętaj, aby użyć tylko ukośników odwrotnych (\) dla parametru @working_directory . Użycie ukośnika (/) może spowodować błąd podczas nawiązywania połączenia z udziałem plików.

  4. Połączenie do wystąpienia zarządzanegosql-mi-publisher.

  5. Otwórz okno Nowe zapytanie i uruchom następujący kod języka Transact-SQL, aby zarejestrować dystrybutora w wydawcy:

    Use MASTER
    EXEC sys.sp_adddistributor @distributor = 'sql-mi-distributor.b6bf57.database.windows.net', @password = '<distributor_admin_password>'
    

Tworzenie publikacji

Po skonfigurowaniu dystrybucji można teraz utworzyć publikację. W tym celu wykonaj następujące kroki:

  1. Uruchom program SQL Server Management Studio w programie SQL Server.

  2. Połączenie do wystąpienia zarządzanegosql-mi-publisher.

  3. W Eksplorator obiektów rozwiń węzeł Replikacja i kliknij prawym przyciskiem myszy folder Publikacja lokalna. Wybierz pozycję Nowa publikacja....

  4. Wybierz przycisk Dalej , aby przejść obok strony powitalnej.

  5. Na stronie Baza danych publikacji wybierz utworzoną ReplTutorial wcześniej bazę danych. Wybierz Dalej.

  6. Na stronie Typ publikacji wybierz pozycję Publikacja transakcyjna. Wybierz Dalej.

  7. Na stronie Artykuły zaznacz pole wyboru obok pozycji Tabele. Wybierz Dalej.

  8. Na stronie Filtrowanie wierszy tabeli wybierz pozycję Dalej bez dodawania filtrów.

  9. Na stronie Agent migawek zaznacz pole wyboru obok pozycji Utwórz migawkę natychmiast i zachowaj migawkę dostępną do inicjowania subskrypcji. Wybierz Dalej.

  10. Na stronie Zabezpieczenia agenta wybierz pozycję Zabezpieczenia Ustawienia.... Podaj poświadczenia logowania programu SQL Server do użycia dla agenta migawek i połącz się z wydawcą. Wybierz przycisk OK , aby zamknąć stronę Zabezpieczenia agenta migawek. Wybierz Dalej.

    Configure Snapshot Agent security

  11. Na stronie Akcje kreatora wybierz pozycję Utwórz publikację, a (opcjonalnie) wybierz pozycję Wygeneruj plik skryptu z krokami tworzenia publikacji, jeśli chcesz zapisać ten skrypt do późniejszego użycia.

  12. Na stronie Zakończ pracę kreatora nadaj publikacji nazwę i ReplTest wybierz przycisk Dalej, aby utworzyć publikację.

  13. Po utworzeniu publikacji odśwież węzeł Replikacja w Eksplorator obiektów i rozwiń węzeł Publikacje lokalne, aby zobaczyć nową publikację.

Tworzenie subskrypcji

Po utworzeniu publikacji możesz utworzyć subskrypcję. W tym celu wykonaj następujące kroki:

  1. Uruchom program SQL Server Management Studio w programie SQL Server.
  2. Połączenie do wystąpienia zarządzanegosql-mi-publisher.
  3. Otwórz okno Nowe zapytanie i uruchom następujący kod języka Transact-SQL, aby dodać subskrypcję i agenta dystrybucji. Użyj dns jako części nazwy subskrybenta.
use [ReplTutorial]
exec sp_addsubscription
@publication = N'ReplTest',
@subscriber = N'sql-vm-sub.repldns.com', -- include the DNS configured in the private DNS zone
@destination_db = N'ReplSub',
@subscription_type = N'Push',
@sync_type = N'automatic',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0

exec sp_addpushsubscription_agent
@publication = N'ReplTest',
@subscriber = N'sql-vm-sub.repldns.com', -- include the DNS configured in the private DNS zone
@subscriber_db = N'ReplSub',
@job_login = N'azureuser',
@job_password = '<Complex Password>',
@subscriber_security_mode = 0,
@subscriber_login = N'azureuser',
@subscriber_password = '<Complex Password>',
@dts_package_location = N'Distributor'
GO

Testowanie replikacji

Po skonfigurowaniu replikacji można ją przetestować, wstawiając nowe elementy wydawcy i obserwując propagację zmian do subskrybenta.

Uruchom następujący fragment kodu T-SQL, aby wyświetlić wiersze dla subskrybenta:

Use ReplSub
select * from dbo.ReplTest

Uruchom poniższy fragment kodu T-SQL, aby wstawić dodatkowe wiersze do wydawcy, a następnie ponownie sprawdź wiersze na subskrybenta.

Use ReplTutorial
INSERT INTO ReplTest (ID, c1) VALUES (15, 'pub')

Czyszczenie zasobów

  1. Przejdź do grupy zasobów w witrynie Azure Portal.
  2. Wybierz wystąpienia zarządzane, a następnie wybierz pozycję Usuń. Wpisz yes w polu tekstowym, aby potwierdzić, że chcesz usunąć zasób, a następnie wybierz pozycję Usuń. Ukończenie tego procesu w tle może zająć trochę czasu i dopóki nie zostanie to zrobione, nie będzie można usunąć klastra wirtualnego ani żadnych innych zasobów zależnych. Monitoruj usuwanie na karcie Działanie , aby potwierdzić, że wystąpienie zarządzane zostało usunięte.
  3. Po usunięciu wystąpienia zarządzanego usuń klaster wirtualny, wybierając go w grupie zasobów, a następnie wybierając pozycję Usuń. Wpisz yes w polu tekstowym, aby potwierdzić, że chcesz usunąć zasób, a następnie wybierz pozycję Usuń.
  4. Usuń wszystkie pozostałe zasoby. Wpisz yes w polu tekstowym, aby potwierdzić, że chcesz usunąć zasób, a następnie wybierz pozycję Usuń.
  5. Usuń grupę zasobów, wybierając pozycję Usuń grupę zasobów, wpisując nazwę grupy zasobów , myResourceGroupa następnie wybierając pozycję Usuń.

Znane błędy

Identyfikatory logowania systemu Windows nie są obsługiwane

Exception Message: Windows logins are not supported in this version of SQL Server.

Agent został skonfigurowany przy użyciu nazwy logowania systemu Windows i musi zamiast tego użyć nazwy logowania programu SQL Server. Użyj strony Zabezpieczenia agenta właściwości publikacji, aby zmienić poświadczenia logowania na identyfikator logowania programu SQL Server.

Nie można nawiązań połączenia z usługą Azure Storage

Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare' Failed to connect to Azure Storage '' with OS error: 53.

2019-11-19 02:21:05.07 Uzyskany ciąg Połączenie ion usługi Azure Storage dla repozytorium 2019-11-19 02:21:05.07 Połączenie do usługi Azure Files Storage "\replstorage.file.core.windows.net\replshare" 2019-11-19 02:21:31.21 Nie można nawiązać połączenia z usługą Azure Storage "" z błędem systemu operacyjnego: 53.

Prawdopodobnie jest to spowodowane zamknięciem portu 445 w zaporze platformy Azure, zaporze systemu Windows lub obu tych portach.

Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare' Failed to connect to Azure Storage '' with OS error: 55.

Użycie ukośnika zamiast ukośnika odwrotnego w ścieżce pliku udziału plików może spowodować ten błąd.

  • To jest w porządku: \\replstorage.file.core.windows.net\replshare
  • Może to spowodować błąd systemu operacyjnego 55: '\\replstorage.file.core.windows.net/replshare'

Nie można nawiązać połączenia z subskrybentem

The process could not connect to Subscriber 'SQL-VM-SUB Could not open a connection to SQL Server [53]. A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections.

Możliwe rozwiązania:

  • Upewnij się, że port 1433 jest otwarty.
  • Upewnij się, że protokół TCP/IP jest włączony dla subskrybenta.
  • Upewnij się, że nazwa DNS została użyta podczas tworzenia subskrybenta.
  • Sprawdź, czy sieci wirtualne są poprawnie połączone w prywatnej strefie DNS.
  • Sprawdź, czy rekord A jest poprawnie skonfigurowany.
  • Sprawdź, czy komunikacja równorzędna sieci wirtualnych jest poprawnie skonfigurowana.

Brak publikacji, do których można subskrybować

Podczas dodawania nowej subskrypcji przy użyciu kreatora Nowa subskrypcja na stronie Publikacja może się okazać, że nie ma baz danych i publikacji wymienionych jako dostępne opcje i może zostać wyświetlony następujący komunikat o błędzie:

There are no publications to which you can subscribe, either because this server has no publications or because you do not have sufficient privileges to access the publications.

Chociaż jest możliwe, że ten komunikat o błędzie jest dokładny i naprawdę nie ma publikacji dostępnych dla wydawcy, z którym nawiązałeś połączenie, lub brakuje wystarczających uprawnień, ten błąd może być również spowodowany przez starszą wersję programu SQL Server Management Studio. Spróbuj przeprowadzić uaktualnienie do programu SQL Server Management Studio 18.0 lub nowszego, aby wykluczyć to jako główną przyczynę.

Następne kroki

Włączanie funkcji zabezpieczeń.

Zobacz artykuł Co to jest usługa Azure SQL Managed Instance? (Co to jest usługa Azure SQL Managed Instance?), aby uzyskać pełną listę sposobów zabezpieczania bazy danych. Omówione są następujące funkcje zabezpieczeń:

Możliwości usługi SQL Managed Instance

Aby zapoznać się z pełnym omówieniem możliwości wystąpienia zarządzanego, zobacz: