Externe Replikate konfigurieren

Auf dieser Seite wird beschrieben, wie Sie eine Cloud SQL-Instanz einrichten, um sie in einem Abonnenten außerhalb von Cloud SQL oder in Cloud SQL zu veröffentlichen. Die externe Replikation in Cloud SQL for SQL Server verwendet die Transaktionsreplikation, bei der Cloud SQL als Publisher für einen Abonnenten fungiert.

Die Transaktionsreplikation unterstützt die Veröffentlichung mehrerer Objekttypen, wie von Microsoft dokumentiert. Darüber hinaus ähneln die Features in Cloud SQL den von Microsoft dokumentierten Einschränkungen.

Die folgenden Objekte werden unterstützt:

  • Tabellen
  • Gespeicherte Prozeduren
  • Aufrufe
  • Indexansichten
  • Benutzerdefinierte Funktionen

Beispiele für die Veröffentlichung finden Sie auf dieser Seite unter Daten und Datenbankobjekte veröffentlichen in der Microsoft-Dokumentation. Erwägen Sie in Ihrem Veröffentlichungsprozess die Verwendung von SQL Server Management Studio (SSMS), da Ihre verfügbaren Optionen in SSMS besser sichtbar sein können.

Weitere Informationen finden Sie unter Informationen zur Replikation in Cloud SQL.

Transaktionsreplikation implementieren

Eine Cloud SQL-Instanz kann über die Transaktionsreplikation als Publisher und Verteiler für einen externen Abonnenten fungieren.

Zum Einrichten der Transaktionsreplikation haben Sie folgende Möglichkeiten:

  • Gespeicherte Prozeduren von Cloud SQL verwenden. Diese haben das Präfix gcloudsql_transrepl_.
  • Replikation mit gespeicherten Prozeduren von Microsoft optimieren

Beschränkungen und Voraussetzungen

Lesen Sie bei der Planung der Transaktionsreplikation diesen Abschnitt.

Beschränkungen

Instanzen, die hohe Verfügbarkeit (High Availability, HA) verwenden, haben keine konsistente ausgehende IP-Adresse. Solche Instanzen können keine Publisher sein, wenn sie öffentliche IP-Verbindungen verwenden. Wenn eine Instanz HA verwendet, muss sie also eine private IP-Verbindung verwenden.

Die Definition eines Artikels finden Sie einschließlich der Einschränkungen in der Microsoft-Dokumentation unter Artikel definieren.

Die von Cloud SQL bereitgestellten gespeicherten Prozeduren unterstützen nur Push-Abos.

Vorbereitung

Bidirektionale Netzwerkverbindung muss zwischen einer Cloud SQL-Instanz und der Abonnenteninstanz eingerichtet werden. Der Abonnent kann extern sein, z. B. ein lokaler Abonnent, oder der Abonnent kann intern in Cloud SQL sein.

Bei Cloud SQL-Instanzen, die öffentliche IP-Adressen verwenden, verwendet Cloud SQL für ausgehenden und eingehenden Traffic eine andere IP-Adresse. Das Replikat muss die ausgehende IP-Adresse der primären Instanz zulassen. Diese können Sie mit dem Befehl gcloud abrufen:

gcloud sql instances describe [PRIMARY_NAME] --format="default(ipAddresses)"

Wenn Sie eine private IP-Adresse für Cloud SQL mit einer lokalen Instanz verwenden möchten, müssen Sie den Zugriff auf private Dienste einrichten. Dies erfordert Peering zwischen der Cloud SQL-VPC und der VPC des Kunden über einen benutzerdefinierten IP-Bereich, der beworben werden muss.

Wenn Sie eine lokale Verbindung herstellen, muss die lokale Firewall eingehende und ausgehende Verbindungen zulassen. Insbesondere muss die lokale Firewall solche Verbindungen über Port 1433 zum Subnetzbereich des privaten Dienstes zulassen, der für den spezifischen Google Cloud-Dienst verwendet wird (in diesem Fall für Cloud SQL). Ziehen Sie in Betracht, für jede erstellte Instanz einen Subnetzbereich anstelle einer bestimmten IP-Adresse zuzulassen.

Weitere Informationen finden Sie hier:

Berechtigungen und Rollen

Paket-Berechtigungen

Die von Cloud SQL bereitgestellten gespeicherten Prozeduren enthalten die für die Transaktionsreplikation erforderlichen Berechtigungen. Dies sind gespeicherte Wrapper-Verfahren, die manchmal eine oder mehrere von Microsoft gespeicherte Prozeduren aufrufen. Informationen zu den gespeicherten Verfahren von Microsoft finden Sie in der Microsoft-Dokumentation.

Erforderliche Rolle

Die verwendeten Konten benötigen einschließlich des Logreader-Agents die Rolle db_owner, wie im Fall des Nutzers sqlserver. Weitere Informationen finden Sie im Sicherheitsmodell für Replikations-Agents.

Gespeicherte Prozeduren zum Veröffentlichen, Verteilen und Abonnieren verwenden

Dieser Abschnitt enthält Schritte zur Einrichtung der Transaktionsreplikation.

Der sqlserver-Nutzer hat Prozeduren gespeichert, mit denen die Cloud SQL-Instanz als Publisher eingerichtet wird. Referenzinformationen finden Sie unter Gespeicherte Cloud SQL-Verfahren.

Transaktionsreplikation mit einer Testdatenbank vorbereiten

Vor dem Einrichten der Transaktionsreplikation für eine Produktionsdatenbank können Sie Ihre Instanz als Publisher von Testdatenbankobjekten einrichten. Auf dieser Seite wird die Testdatenbank als Datenbank pub_demo bezeichnet.

Stellen Sie mit dem Nutzer sqlserver eine Verbindung zu Ihrer Cloud SQL-Instanz her und erstellen Sie eine Datenbank zu Testzwecken. Beispiel:

Create Database pub_demo;
GO
USE pub_demo;
CREATE TABLE Employee(employeeId INT primary key);
INSERT INTO Employee([employeeId]) VALUES (1);
INSERT INTO Employee([employeeId]) VALUES (2);

-- Add procedure
CREATE OR ALTER PROCEDURE dbo.p_GetDate
AS
SELECT getdate()

-- Add view
CREATE OR ALTER VIEW dbo.v_GetDbs
AS
SELECT name from sys.databases

-- Function
CREATE OR ALTER FUNCTION dbo.fn_ListDbFiles(@id int)
RETURNS TABLE
AS
RETURN
(
select * from sys.master_files where database_id = @id
)

Distributionsdatenbank einrichten

Für die Distributionsdatenbank können Sie msdb.dbo.gcloudsql_transrepl_setup_distribution verwenden, ein als Wrapper gespeichertes Verfahren für diese von Microsoft gespeicherten Verfahren:

Beispiel:

EXEC msdb.dbo.gcloudsql_transrepl_setup_distribution @login='sqlserver', @password='<password>'

Datenbank für Veröffentlichung aktivieren

Zum Aktivieren oder Deaktivieren der Veröffentlichungsoption einer Datenbank können Sie msdb.dbo.gcloudsql_transrepl_replicationdboption verwenden. Diese gespeicherte Prozedur gilt für die Veröffentlichungsoption für den Publisher, der sp_replicationdboption verwendet.

Beispiel:

EXEC msdb.dbo.gcloudsql_transrepl_replicationdboption @db='pub_demo', @value='true'

Logreader-Agent hinzufügen

Sie können einen Log-Reader-Agent für eine Datenbank einrichten, die sp_addlogreader_agent verwendet.

Beispiel:

EXEC msdb.dbo.gcloudsql_transrepl_addlogreader_agent @db='pub_demo', @login='sqlserver', @password='<password>'

Publikation für die Datenbank erstellen

Sie können msdb.dbo.gcloudsql_transrepl_addpublication verwenden, um eine Transaktionsveröffentlichung für die von Ihnen angegebene Datenbank zu erstellen. Diese gespeicherte Prozedur umschließt sp_addpublication.

Beispiel:

EXEC msdb.dbo.gcloudsql_transrepl_addpublication @db='pub_demo', @publication='pub1'

Snapshot-Agent für die angegebene Publikation erstellen

Zum Erstellen eines Snapshot-Agents für die Publisher-Datenbank können Sie msdb.dbo.gcloudsql_transrepl_addpublication_snapshot verwenden, das sp_addpublication_snapshot umschließt.

Beispiel:

EXEC msdb.dbo.gcloudsql_transrepl_addpublication_snapshot @db='pub_demo',  @publication='pub1', @login='sqlserver', @password='<password>'

Artikel erstellen und der Publikation hinzufügen

Sie können einen Artikel aus der Publisher-Datenbank erstellen und der Veröffentlichung hinzufügen. Verwenden Sie als sqlserver-Nutzer sp_addarticle.

Sie können auch Artikel über SSMS hinzufügen. Weitere Informationen finden Sie unter Artikel zu einer Publikation hinzufügen und von ihr entfernen.

Beispiel:

USE pub_demo;
GO

EXEC sp_addarticle @publication = 'pub1',
                   @article = 'csql_dbo.employee',
                   @source_owner = 'dbo',
                   @source_object = 'Employee',
                   @description = N'cloudsql_article_table',
                   @schema_option = 0x000000000903409D,
                   @identityrangemanagementoption = N'manual',
                   @destination_table = 'Employee',
                   @destination_owner = 'dbo';

-- add function
use [pub_demo]
exec sp_addarticle  @publication = N'pub1',
                   @article = N'fn_ListDbFiles',
                   @source_owner = N'dbo',
                   @source_object = N'fn_ListDbFiles',
                   @type = N'func schema only',
                   @description = N'',
                   @creation_script = N'',
                   @pre_creation_cmd = N'drop',
                   @schema_option = 0x0000000008000001,
                   @destination_table = N'fn_ListDbFiles',
                   @destination_owner = N'dbo',
                   @status = 16

-- add procedure
use [pub_demo]
exec sp_addarticle  @publication = N'pub1',
                   @article = N'p_GetDate',
                   @source_owner = N'dbo',
                   @source_object = N'p_GetDate',
                   @type = N'proc schema only',
                   @description = N'',
                   @creation_script = N'',
                   @pre_creation_cmd = N'drop',
                   @schema_option = 0x0000000008000001,
                   @destination_table = N'p_GetDate',
                   @destination_owner = N'dbo',
                   @status = 16

-- add view
use [pub_demo]
exec sp_addarticle  @publication = N'pub1',
                   @article = N'v_GetDbs',
                   @source_owner = N'dbo',
                   @source_object = N'v_GetDbs',
                   @type = N'view schema only',
                   @description = N'',
                   @creation_script = N'',
                   @pre_creation_cmd = N'drop',
                   @schema_option = 0x0000000008000001,
                   @destination_table = N'v_GetDbs',
                   @destination_owner = N'dbo',
                   @status = 16

Abo zur Publikation hinzufügen

Sie können das Abo in der Datenbank der Publikation hinzufügen. Legen Sie als sqlserver-Nutzer den Abonnentenstatus mithilfe von sp_addsubscription fest.

Beispiel:

Use pub_demo;
GO
EXEC sp_addsubscription @publication ='pub1',
                        @subscriber = N'10.10.100.1,1433',
                        @destination_db = pub_demo,
                        @subscription_type = N'Push',
                        @sync_type = N'automatic',
                        @article = N'all',
                        @update_mode = N'read only',
                        @subscriber_type = 0

Verbindung zum Abonnenten herstellen und Datenbank für Abos erstellen

Sie können eine Verbindung zum Abonnenten herstellen und eine Abo-Datenbank für die replizierten Daten erstellen.

Beispiel:

 Create Database pub_demo

Neuen geplanten Agent-Job hinzufügen, um das Push-Abo zu synchronisieren

Sie können einen neuen geplanten Agent-Job hinzufügen, um das Push-Abo mit der Publikation zu synchronisieren. Führen Sie in der Publisher-Datenbank beispielsweise einen Befehl ähnlich dem folgenden aus. Dieser Befehl verwendet msdb.dbo.gcloudsql_transrepl_addpushsubscription_agent, ein für den Wrapper gespeichertes Verfahren für sp_addpushsubscription_agent:

EXEC msdb.dbo.gcloudsql_transrepl_addpushsubscription_agent
@db='pub_demo',
@publication = 'pub1',
@subscriber_db= 'pub_demo',
@subscriber_login='sqlserver',
@subscriber_password='<password>',
@subscriber='11.11.111.1,1433'

Job eines Veröffentlichungs-Snapshot-Agents starten

So können Sie einen Job für einen Veröffentlichungs-Snapshot-Agent starten:

USE pub_demo;
EXEC sp_startpublication_snapshot
@publication = 'pub1'

Zugriff auf ein Konto gewähren, um den Replikationsmonitor zu verwenden

Verwenden Sie msdb.dbo.gcloudsql_transrepl_addmonitoraccess, um

  • Zugriff auf den Replikationsmonitor in SSMS zu gewähren
  • Tabellen in der Distributionsdatenbank abzufragen

Auf diese Weise können Sie mit dieser gespeicherten Prozedur die SELECT-Anweisung für die replikationsbezogenen Tabellen der Verteilerdatenbank wie die Tabelle MSrepl_errors verwenden:

EXEC msdb.dbo.gcloudsql_transrepl_addmonitoraccess
@login = 'sqlserver'

Attribut einer Distributionsdatenbank ändern

Sie können das heartbeat_interval ändern. Verwenden Sie das Verfahren msdb.dbo.gcloudsql_transrepl_changedistributor_property, das sp_changedistributor_property einschließt.

Weitere Informationen finden Sie in der Dokumentation zu sp_changedistributor_property. Weitere Informationen zum Wert heartbeat_interval erhalten Sie in dieser Dokumentation.

Beispiel:

EXEC msdb.dbo.gcloudsql_transrepl_changedistributor_property
@property = N'heartbeat_interval',
@value = 90

Replikationsmonitor verwenden

Klicken Sie mit der rechten Maustaste auf den Replikationsknoten in SSMS und wählen Sie Replication Monitor starten aus.

Wenn Sie auf den Tab "Agents" klicken, sollte eine Ansicht ähnlich der folgenden angezeigt werden:

Ordner auf dem Tab &quot;Agents&quot;

Gespeicherte Prozeduren zum Entfernen der Replikation verwenden

Dieser Abschnitt enthält Schritte zum Entfernen der Transaktionsreplikation.

Abo löschen

Verwenden Sie die gespeicherte Prozedur sp_dropsubscription, wenn Sie das Abo kündigen möchten:

Hier sind ein Beispiel für die Befehle zum Löschen des Abos:

USE  pub_demo;
GO
EXEC sp_dropsubscription
          @publication = 'csql_pub_pub_demo',
          @article     = N'all',
          @subscriber  = N'11.11.111.1,1433'

Abonnent verwerfen

So löschen Sie den Abonnenten mit der gespeicherten Prozedur msdb.dbo.gcloudsql_transrepl_dropsubscriber:

EXEC msdb.dbo.gcloudsql_transrepl_dropsubscriber
 @subscriber  = N'11.11.111.1,1433'

Publikation löschen

Verwenden Sie das gespeicherte Verfahren msdb.dbo.gcloudsql_transrepl_droppublication, wenn Sie die Veröffentlichung löschen möchten:

EXEC msdb.dbo.gcloudsql_transrepl_droppublication
  @db = 'pub_demo', @publication='pub1'

Veröffentlichungsdatenbank deaktivieren

So deaktivieren Sie die Veröffentlichungsdatenbank mit dem gespeicherten Verfahren msdb.dbo.gcloudsql_transrepl_replicationdboption:

EXEC msdb.dbo.gcloudsql_transrepl_replicationdboption
@db='pub_demo',
@value=N'false'

Distributionsdatenbank entfernen

So entfernen Sie die Distributionsdatenbank mit dem gespeicherten Verfahren msdb.dbo.gcloudsql_transrepl_remove_distribution:

EXEC msdb.dbo.gcloudsql_transrepl_remove_distribution

Tipps und Schritte zur Fehlerbehebung

Gespeicherte Prozeduren aus der richtigen Datenbank ausführen

Der folgende Fehler kann auftreten, wenn Sie sp_addarticle, sp_addsubscription oder sp_startpublication_snapshot ausführen:

Only members of the sysadmin fixed server role or db_owner fixed database role can perform this operation.

Außerdem kann der folgende Fehler auftreten, wenn Sie sp_dropsubscription ausführen:

This database is not enabled for publication.

Wenn diese Fehler auftreten, müssen Sie die gespeicherten Prozeduren innerhalb der Datenbank ausführen, für die sie gelten. Mit dem folgenden Befehl können Sie prüfen, ob sie von der richtigen Datenbank ausgeführt werden:

USE <database_name>;
GO
<Run stored proc>

Replikation

Replikationsfehler werden in SQL-Fehlerlogs und an anderen Stellen bereitgestellt. Sie können einige Tabellen in der Verteilungsdatenbank direkt auf Replikationsfehler abfragen. Beispiel:

select * from [cloudsql_distribution]..msrepl_errors
select * from [cloudsql_distribution]..MSreplication_monitordata

Microsoft hat weitere Beispiele zum Ermitteln von Fehlern mit dem Replikationsmonitor. Der Nutzer sqlserver hat beispielsweise möglicherweise keinen Zugriff auf einen Befehl.

Replikations-Agent-Jobs

Nachdem die Replikation eingerichtet wurde, sind die neuen SQL-Agent-Jobs in SSMS für den Nutzer sqlserver nicht sichtbar. Sie können sie jedoch so anzeigen:

USE msdb
select * from dbo.sysjobs

Publisher fehlen im Replikationsmonitor

Mit dem Replikationsmonitor können Sie den Status der Replikation aufrufen und Replikationsprobleme beheben.

Wenn Sie beispielsweise die Replikation einrichten und Ihre Cloud SQL-Instanz des Publishers eine IP-Adresse verwendet, kann SSMS den Publisher möglicherweise nicht finden. Dies liegt daran, dass die Zuordnung zwischen dem Hostnamen und der IP-Adresse nicht bekannt ist.

Der Replikationsmonitor enthält einen leeren Publikationstab:

Der Tab &quot;Publikationen&quot; enthält keine Zeilen

Führen Sie zur Umgehung dieses Problems Folgendes aus: Erstellen Sie Aliasse in dem SQL Server-Konfigurations-Manager zwischen dem SQL Server-Hostnamen des Publishers und der IP-Adresse, die für die Verbindung von SSMS verwendet wird:

  1. Starten Sie den SQL Server-Konfigurations-Manager.

    SQL Server Configuration Manager

  2. Suchen Sie den Knoten Aliasse und wählen Sie ihn aus.

    Alias-Knoten ausgewählt

  3. Klicken Sie mit der rechten Maustaste auf das Feld unter Aliasname, um einen neuen Alias zu erstellen. Das gleiche Verfahren gilt sowohl für einen 32-Bit-Alias als auch für einen 64-Bit-Alias:

    Drop-down unter &quot;Aliasname&quot;

  4. Rufen Sie mit dieser Abfrage den tatsächlichen Hostnamen der Publisher-Instanz ab:

    Abfrage des tatsächlichen Hostnamens Ihrer Publisher-Instanz

  5. Geben Sie im Aliasfenster diese Felder ein, bevor Sie OK auswählen:

    Alias Name (Aliasname): Geben Sie den Servernamen aus der Abfrage in Schritt 4 an.

    Portnummer: Geben Sie Port 1433 an.

    Protokoll: Übernehmen Sie für den Wert die Standardeinstellung "TCP/IP".

    Server: Geben Sie die IP-Adresse der Publisher-Instanz an.

    Werte für Alias-Name, Server usw.

  6. Stellen Sie eine Verbindung über den neuen Alias her und starten Sie den Replikationsmonitor:

    Dialogfeld &quot;Mit Server verbinden&quot;

Die Veröffentlichungsinformationen sollten in etwa so aussehen:

Replikationsmonitor zeigt jetzt eine Zeile auf dem Tab &quot;Publikationen&quot; an

Weitere Informationen zur Fehlerbehebung bei Replikationen finden Sie unter Fehlerbehebung: Fehler bei der SQL Server-Transaktionsreplikation finden.

Größe der für die Replikation erforderlichen Artikel schätzen

Wenn Sie eine Cloud SQL-Instanz als Publisher verwenden, ist ein erster Snapshot der zu generierenden Artikel erforderlich, um mit der Replikation zu beginnen. Dieser Snapshot wird lokal gespeichert. Abhängig von der Anzahl der Artikel, deren Größe und der Art der Daten können sich die Speicheranforderungen erhöhen. Die gespeicherte Prozedur sp_spaceused bietet nur eine grobe Schätzung des Speicherplatzes, der für einen Artikel erforderlich ist.

Der Snapshot enthält Dateien, die Schemas und Daten speichern.

Nächste Schritte