Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:Azure SQL Managed Instance
Mithilfe der Transaktionsreplikation können Sie Daten von einer Datenbank auf eine andere replizieren, die auf SQL Server oder Azure SQL Managed Instance gehostet wird. Sql Managed Instance kann ein Herausgeber, Verteiler oder Abonnent in der Replikationstopologie sein. Unter Konfigurationen für die Transaktionsreplikation finden Sie die verfügbaren Konfigurationen.
In diesem Tutorial lernen Sie Folgendes:
- Konfigurieren Sie eine von SQL verwaltete Instanz als Replikationsherausgeber.
- Konfigurieren Einer SQL-verwalteten Instanz als Replikationsverteiler.
- Konfigurieren von SQL Server als Abonnent.
Dieses Lernprogramm richtet sich an ein erfahrenes Publikum und geht davon aus, dass der Benutzer mit der Bereitstellung und Verbindung mit SQL-verwalteten Instanzen und SQL Server-VMs in Azure vertraut ist.
Hinweis
In diesem Artikel wird die Verwendung der Transaktionsreplikation in einer verwalteten SQL-Datenbank-Instanz beschrieben. Es ist nicht mit Failovergruppen verknüpft, einem Azure SQL Managed Instance-Feature, mit dem Sie vollständige lesbare Replikate einzelner Instanzen erstellen können. Beim Konfigurieren der Transaktionsreplikation mit Failovergruppen sind weitere Aspekte zu berücksichtigen.
Voraussetzungen
Für dieses Tutorial wird Folgendes vorausgesetzt:
- Ein Azure-Abonnement.
- Erfahrung mit der Bereitstellung von zwei SQL-verwalteten Instanzen innerhalb desselben virtuellen Netzwerks.
- Ein SQL Server-Abonnent, entweder lokal oder auf einer Azure-VM. In diesem Tutorial wird eine Azure-VM verwendet.
- SQL Server Management Studio (SSMS) 18.0 oder höher.
- Die neueste Version von Azure PowerShell
- Die Ports 445 und 1433 ermöglichen SQL-Datenverkehr sowohl in der Azure-Firewall als auch in der Windows-Firewall.
Erstellen der Ressourcengruppe
Verwenden Sie den folgenden PowerShell-Codeausschnitt, um eine neue Ressourcengruppe zu erstellen:
# set variables
$ResourceGroupName = "SQLMI-Repl"
$Location = "East US 2"
# Create a new resource group
New-AzResourceGroup -Name $ResourceGroupName -Location $Location
Erstellen von zwei SQL-verwalteten Instanzen
Erstellen Sie zwei SQL-verwaltete Instanzen in dieser neuen Ressourcengruppe mithilfe des Azure-Portals.
Der Name der verwalteten Sql-Instanz des Herausgebers sollte
sql-mi-publisher(zusammen mit einigen Zeichen für die Randomisierung) sein, und der Name des virtuellen Netzwerks sollte seinvnet-sql-mi-publisher.Der Name der von SQL verwalteten Verteilerinstanz sollte
sql-mi-distributor(zusammen mit einigen Zeichen für die Randomisierung) sein und sich im selben virtuellen Netzwerk wie die verwaltete Instanz des Herausgebers SQL befinden.
Weitere Informationen zum Erstellen einer verwalteten SQL-Instanz finden Sie unter Erstellen einer sql-verwalteten Instanz im Portal.
Hinweis
Aus Gründen der Einfachheit und da es sich um die am häufigsten verwendete Konfiguration handelt, schlägt dieses Lernprogramm vor, die sql-verwaltete Distributorinstanz innerhalb desselben virtuellen Netzwerks wie der Herausgeber zu platzieren. Es ist aber auch möglich, den Verteiler in einem separaten virtuellen Netzwerk zu erstellen. Dazu müssen Sie das VNet-Peering zwischen den virtuellen Netzwerken des Herausgebers und Distributors konfigurieren und dann VNet-Peering zwischen den virtuellen Netzwerken des Distributors und Abonnenten konfigurieren.
Erstellen einer SQL Server-VM
Erstellen Sie im Azure-Portal einen virtuellen SQL Server-Computer (SQL Server-VM). Die SQL Server-VM sollte über die folgenden Merkmale verfügen:
- Name:
sql-vm-subscriber - Bild: SQL Server 2016 oder höher
- Ressourcengruppe: identisch mit der sql-verwalteten Instanz
- Virtuelles Netzwerk:
sql-vm-subscriber-vnet
Weitere Informationen zum Bereitstellen einer SQL Server-VM in Azure finden Sie unter Schnellstart: Erstellen einer SQL Server-VM.
Konfigurieren von VNET-Peering
Konfigurieren Sie das VNet-Peering, um die Kommunikation zwischen dem virtuellen Netzwerk der beiden von SQL verwalteten Instanzen und dem virtuellen Netzwerk von SQL Server zu ermöglichen. Verwenden Sie hierzu den folgenden PowerShell-Codeausschnitt:
# Set variables
$SubscriptionId = '<SubscriptionID>'
$resourceGroup = 'SQLMI-Repl'
$pubvNet = 'sql-mi-publisher-vnet'
$subvNet = 'sql-vm-subscriber-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
Nachdem VNet-Peering eingerichtet wurde, testen Sie die Konnektivität, indem Sie SQL Server Management Studio (SSMS) auf dem SQL Server-Host starten und eine Verbindung mit beiden von SQL verwalteten Instanzen herstellen. Weitere Informationen zum Herstellen einer Verbindung mit einer verwalteten SQL-Instanz mit SSMS finden Sie unter Verwenden von SSMS zum Herstellen einer Verbindung mit der verwalteten SQL-Instanz.
Erstellen einer privaten DNS-Zone
Eine private DNS-Zone ermöglicht das DNS-Routing zwischen den von SQL verwalteten Instanzen und SQL Server.
Erstellen einer privaten DNS-Zone
Melden Sie sich beim Azure-Portal an.
Wählen Sie die Option Ressource erstellen aus, um eine neue Azure-Ressource zu erstellen.
Suchen Sie auf dem Azure Marketplace nach
private dns zone.Wählen Sie die private DNS-Zonenressource aus, die von Microsoft veröffentlicht wurde, und wählen Sie dann "Erstellen" aus, um die DNS-Zone zu erstellen.
Wählen Sie in der Dropdownliste die Abonnement- und Ressourcengruppe aus.
Geben Sie einen beliebigen Namen für Ihre DNS-Zone an, z. B.
repldns.com.
Klicken Sie auf Überprüfen + erstellen. Überprüfen Sie die Parameter für Ihre private DNS-Zone, und wählen Sie dann "Erstellen" aus, um Ihre Ressource zu erstellen.
Erstellen eines A-Eintrags
Navigieren Sie zu Ihrer neuen Privaten DNS-Zone, und wählen Sie Übersicht aus.
Wählen Sie + Eintrag aus, um einen neuen A-Eintrag zu erstellen.
Geben Sie den Namen Ihrer SQL Server-VM und die private interne IP-Adresse an.
Wählen Sie OK aus, um den A-Eintrag zu erstellen.
Verknüpfen des virtuellen Networks
Navigieren Sie zu Ihrer neuen Privaten DNS-Zone, und wählen Sie Verknüpfungen virtueller Netzwerke aus.
Wählen Sie + Hinzufügen.
Geben Sie einen Namen für die Verknüpfung an, z. B.
Pub-link.Wählen Sie Ihr Abonnement aus der Dropdownliste aus, und wählen Sie dann das virtuelle Netzwerk für die von Sql verwaltete Instanz Ihres Herausgebers aus.
Aktivieren Sie das Kontrollkästchen neben Automatische Registrierung aktivieren.
Wählen Sie OK aus, um eine Verknüpfung mit Ihrem virtuellen Netzwerk einzurichten.
Wiederholen Sie diese Schritte, um einen Link für das virtuelle Abonnentennetzwerk mit einem Namen wie
Sub-linkhinzuzufügen.
Erstellen eines Azure-Speicherkontos
Erstellen Sie ein Azure-Speicherkonto für das Arbeitsverzeichnis und anschließend im Speicherkonto eine Dateifreigabe.
Kopieren Sie den Dateifreigabepfad im Format: \\storage-account-name.file.core.windows.net\file-share-name
Beispiel: \\replstorage.file.core.windows.net\replshare
Kopieren Sie die Verbindungszeichenfolge für den Speicherzugriffsschlüssel im folgenden Format: DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net
Beispiel: DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net
Weitere Informationen finden Sie unter Verwalten von Speicherkonto-Zugriffsschlüsseln.
Erstellen einer Datenbank
Erstellen Sie eine neue Datenbank in der verwalteten Sql-Instanz des Herausgebers. Gehen Sie dazu folgendermaßen vor:
- Starten Sie SQL Server Management Studio unter on SQL Server.
- Stellen Sie eine Verbindung mit der vom Herausgeber verwalteten SQL-Instanz (
sql-mi-publisher) her. - Öffnen Sie ein Fenster "Neue Abfrage ", und führen Sie die folgende T-SQL-Abfrage aus, um die Datenbank zu erstellen.
-- 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
Konfigurieren der Verteilung
Sobald die Verbindung hergestellt wurde und Sie über eine Beispieldatenbank verfügen, können Sie die Verteilung für die verwaltete SQL-Instanz des Verteilers konfigurieren (sql-mi-distributor). Gehen Sie dazu folgendermaßen vor:
Starten Sie SQL Server Management Studio unter on SQL Server.
Stellen Sie eine Verbindung mit der von SQL verwalteten Verteilerinstanz (
sql-mi-distributor) her.Öffnen Sie ein Fenster "Neue Abfrage ", und führen Sie den folgenden Transact-SQL Code aus, um die Verteilung in der sql-verwalteten Instanz des Verteilers zu konfigurieren:
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=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net'Hinweis
Achten Sie darauf, dass Sie für den Parameter
\nur umgekehrte Schrägstriche (@working_directory) verwenden. Die Verwendung eines regulären Schrägstrichs (/) kann zu einem Fehler führen, wenn die Verbindung mit der Dateifreigabe hergestellt wird.Stellen Sie eine Verbindung mit der vom Herausgeber verwalteten SQL-Instanz (
sql-mi-publisher) her.Öffnen Sie ein Fenster "Neue Abfrage ", und führen Sie den folgenden Transact-SQL Code aus, um den Verteiler beim Herausgeber zu registrieren:
Use MASTER EXEC sys.sp_adddistributor @distributor = 'sql-mi-distributor.b6bf57.database.windows.net', @password = '<distributor_admin_password>'
Erstellen der Veröffentlichung
Nachdem die Verteilung konfiguriert wurde, können Sie die Publikation erstellen. Gehen Sie dazu folgendermaßen vor:
Starten Sie SQL Server Management Studio unter on SQL Server.
Stellen Sie eine Verbindung mit der vom Herausgeber verwalteten SQL-Instanz (
sql-mi-publisher) her.Erweitern Sie im Objekt-Explorer den Knoten Replikation, und klicken Sie mit der rechten Maustaste auf den Ordner Lokale Veröffentlichung. Wählen Sie Neue Veröffentlichung... aus.
Wählen Sie Weiter aus, um die Willkommensseite zu verlassen und den Vorgang fortzusetzen.
Wählen Sie auf der Seite Veröffentlichungsdatenbank die Datenbank
ReplTutorialaus, die Sie zuvor erstellt haben. Wählen Sie Weiter aus.Wählen Sie auf der Seite Publikationstyp die Option Transaktionsveröffentlichung aus. Wählen Sie Weiter aus.
Aktivieren Sie auf der Seite Artikel das Kontrollkästchen neben Tabellen. Wählen Sie Weiter aus.
Wählen Sie auf der Seite Tabellenzeilen filtern die Option Weiter aus, ohne Filter hinzuzufügen.
Aktivieren Sie auf der Seite Momentaufnahme-Agent das Kontrollkästchen neben der Option Create snapshot immediately and keep the snapshot available to initialize subscriptions (Momentaufnahme sofort erstellen und zum Initialisieren von Abonnements vorhalten). Wählen Sie Weiter aus.
Wählen Sie auf der Seite "Agent-Sicherheit " die Option "Sicherheitseinstellungen" aus. Stellen Sie SQL Server-Anmeldeinformationen bereit, die für den Snapshot-Agent und zum Herstellen einer Verbindung mit dem Herausgeber verwendet werden sollen. Wählen Sie OK aus, um die Seite Sicherheit für den Momentaufnahme-Agent zu schließen. Wählen Sie Weiter aus.
Wählen Sie auf der Seite Aktionen des Assistenten die Option Veröffentlichung erstellen und (optional) Skriptdatei mit Schritten zur Veröffentlichungserstellung generieren aus, wenn Sie dieses Skript zur späteren Verwendung speichern möchten.
Benennen Sie auf der Seite "Assistent abschließen" Ihre Publikation
ReplTest, und wählen Sie "Weiter" aus, um Ihre Publikation zu erstellen.Aktualisieren Sie nach der Erstellung der Veröffentlichung im Objekt-Explorer den Knoten Replikation, und erweitern Sie Lokale Veröffentlichungen, um Ihre neue Veröffentlichung anzuzeigen.
Erstellen des Abonnements
Nachdem die Veröffentlichung erstellt wurde, können Sie das Abonnement erstellen. Gehen Sie dazu folgendermaßen vor:
- Starten Sie SQL Server Management Studio unter on SQL Server.
- Stellen Sie eine Verbindung mit der vom Herausgeber verwalteten SQL-Instanz (
sql-mi-publisher) her. - Öffnen Sie ein Fenster vom Typ Neue Abfrage, und führen Sie den folgenden Transact-SQL-Code aus, um das Abonnement und den Verteilungs-Agent hinzuzufügen. Verwenden Sie den DNS als Teil des Abonnentennamens.
use [ReplTutorial]
exec sp_addsubscription
@publication = N'ReplTest',
@subscriber = N'sql-vm-subscriber.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-subscriber.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
Testen der Replikation
Nachdem die Replikation konfiguriert wurde, können Sie sie testen, indem Sie neue Elemente auf dem Verleger einfügen und beobachten, wie die Änderungen an den Abonnenten weitergegeben werden.
Führen Sie den folgenden T-SQL-Codeausschnitt aus, um die Zeilen auf dem Abonnenten anzuzeigen:
Use ReplSub
select * from dbo.ReplTest
Führen Sie den folgenden T-SQL-Codeausschnitt aus, um zusätzliche Zeilen auf dem Verleger einzufügen. Überprüfen Sie dann die Zeilen erneut auf dem Abonnenten.
Use ReplTutorial
INSERT INTO ReplTest (ID, c1) VALUES (15, 'pub')
Bereinigen von Ressourcen
- Navigieren Sie im Azure-Portal zu Ihrer Ressourcengruppe.
- Wählen Sie die verwalteten SQL-Instanzen und dann "Löschen" aus. Geben Sie
yesdas Textfeld ein, um zu bestätigen, dass Sie die Ressource löschen möchten, und wählen Sie dann "Löschen" aus. Dieser Vorgang kann einige Zeit in Anspruch nehmen, bis er im Hintergrund abgeschlossen ist, und bis er abgeschlossen ist, können Sie den virtuellen Cluster oder andere abhängige Ressourcen nicht löschen. Überwachen Sie den Löschvorgang auf der Registerkarte "Aktivität ", um zu bestätigen, dass Ihre verwaltete SQL-Instanz gelöscht wurde. - Nachdem die von SQL verwaltete Instanz gelöscht wurde, löschen Sie den virtuellen Cluster , indem Sie ihn in Ihrer Ressourcengruppe auswählen und dann "Löschen" auswählen. Geben Sie
yesdas Textfeld ein, um zu bestätigen, dass Sie die Ressource löschen möchten, und wählen Sie dann "Löschen" aus. - Löschen Sie alle verbleibenden Ressourcen. Geben Sie
yesdas Textfeld ein, um zu bestätigen, dass Sie die Ressource löschen möchten, und wählen Sie dann "Löschen" aus. - Löschen Sie die Ressourcengruppe, indem Sie " Ressourcengruppe löschen" auswählen, den Namen der Ressourcengruppe
myResourceGroupeingeben und dann "Löschen" auswählen.
Bekannte Fehler
Windows-Anmeldungen werden nicht unterstützt
Exception Message: Windows logins are not supported in this version of SQL Server.
Der Agent wurde mit einer Windows-Anmeldung konfiguriert, aber stattdessen muss eine SQL Server-Anmeldung verwendet werden. Nutzen Sie die Seite Agentsicherheit unter Veröffentlichungseigenschaften, um die Anmeldeinformationen auf eine SQL Server-Anmeldung umzustellen.
Fehler beim Herstellen der Verbindung mit 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 Obtained Azure Storage Connection String for replstorage
2019-11-19 02:21:05.07 Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare'
2019-11-19 02:21:31.21 Failed to connect to Azure Storage '' with OS error: 53.
Dies liegt wahrscheinlich daran, dass Port 445 entweder in der Azure-Firewall, der Windows-Firewall oder beidem geschlossen ist.
Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare' Failed to connect to Azure Storage '' with OS error: 55.
Die Verwendung eines Schrägstrichs anstelle eines umgekehrten Schrägstrichs im Dateipfad für die Dateifreigabe kann auch diesen Fehler verursachen.
- Dies ist akzeptabel:
\\replstorage.file.core.windows.net\replshare - Dies kann zum Betriebssystemfehler 55 führen:
\\replstorage.file.core.windows.net/replshare
Verbindung mit Abonnenten konnte nicht hergestellt werden
The process could not connect to Subscriber 'SQL-VM-SUBSCRIBER
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.
T Mögliche Lösungen:
- Stellen Sie sicher, dass Port 1433 geöffnet ist.
- Stellen Sie sicher, dass TCP/IP für den Abonnenten aktiviert ist.
- Vergewissern Sie sich, dass der DNS-Name beim Erstellen des Abonnenten verwendet wurde.
- Vergewissern Sie sich, dass Ihre virtuellen Netzwerke in der privaten DNS-Zone richtig verknüpft sind.
- Vergewissern Sie sich, dass Ihr A-Eintrag richtig konfiguriert ist.
- Vergewissern Sie sich, dass Ihr VNET-Peering richtig konfiguriert ist.
Keine Veröffentlichungen vorhanden, die Sie abonnieren können
Wenn Sie ein neues Abonnement mithilfe des Assistenten " Neues Abonnement " hinzufügen, stellen Sie möglicherweise auf der Seite " Publikation " fest, dass keine Datenbanken und Publikationen als verfügbare Optionen aufgeführt sind, und möglicherweise wird die folgende Fehlermeldung angezeigt:
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.
Es ist zwar möglich, dass diese Fehlermeldung korrekt ist und es wirklich keine Publikationen für den Herausgeber gibt, mit dem Sie eine Verbindung hergestellt haben, oder Sie verfügen über ausreichende Berechtigungen, eine ältere Version von SQL Server Management Studio könnte diesen Fehler auch verursachen. Versuchen Sie, ein Upgrade auf SQL Server Management Studio 18.0 oder höher durchzuführen, um dies als Grundursache auszuschließen.