Replizieren von Freigaben über Regionen und Cloudplattformen hinweg¶
Bei der Freigabe von Daten in Snowflake Marketplace oder über ein Data Exchange-Angebot erhalten die Anbieter Anfragen aus Remoteregionen. Unter diesem Thema wird eine Anleitung zur Verwendung der Kontoreplikation zum Replizieren von Datenfreigaben zwischen Regionen und Cloudplattformen bereitgestellt.
Die Kontoreplikation ermöglicht die Replikation von Objekten von einem Quellkonto in ein oder mehrere Zielkonten derselben Organisation. Replizierte Objekte in jedem Zielkonto werden als sekundäre Objekte bezeichnet und sind Replikate der primären Objekte im Quellkonto.
Wichtig
Wenn Sie eine Datenbank in eine geografische Region oder ein Land replizieren, die/das sich von der Region/dem Land unterscheidet, in der/dem sich Ihr Snowflake-Quellkonto befindet, sollten Sie sicherstellen, dass Ihre Organisation keinen rechtlichen oder behördlichen Einschränkungen hinsichtlich des Speicherorts Ihrer Daten unterliegt.
Unter diesem Thema:
Umstellen von Datenbankreplikation auf gruppenbasierte Replikation
Replikationsgruppe¶
Eine Replikationsgruppe ist eine definierte Sammlung von Objekten in einem Quellkonto, die als Einheit in ein oder mehrere Zielkonten repliziert wird. Replikationsgruppen bieten einen Nur-Lese-Zugriff auf die replizierten Objekte. Replikationsgruppen bieten zeitpunktbezogene Konsistenz für die Objekte (z. B. Datenbanken und Freigaben) in der Sammlung.
Ein Anbieter erstellt eine primäre Replikationsgruppe in einem Quellkonto und aktiviert für Verbraucher die Replikation in Zielkonten. Bei Standardfreigaben müssen Datenanbieter anstelle von Kopien der Freigabe für jeden Verbraucher nur eine Kopie pro Region erstellen.
Bemerkung
Dieses Thema ist ein Unterabschnitt der Features, die für die Kontoreplikation verfügbar sind. Die Kontoreplikation ermöglicht die Replikation von Datenbanken und Freigaben sowie Replikation und Failover von Kontoobjekten.
Replizierte Objekte¶
Datenbankreplikation¶
Dieses Feature unterstützt das Replizieren von Datenbanken. Ein Snapshot enthält Änderungen an den Objekten und Daten. Bei der Aktualisierung einer Sekundärdatenbank werden die Berechtigungszuweisungen zur Datenbank und zu den Objekten in der Datenbank (Schemas, Tabellen, Ansichten usw.) synchronisiert. Berechtigungen, die den Rollen dieser Objekte erteilt werden, werden vom Quellkonto auf das Zielkonto synchronisiert. Beachten Sie, dass nur Berechtigungszuweisungen zu Objekten synchronisiert werden, die von der Datenbankreplikation unterstützt werden. Eine Liste der Objekte finden Sie unter Replizierte Datenbankobjekte.
Zukünftige Berechtigungszuweisungen zu unterstützten und nicht unterstützten Datenbankobjekten werden auf Datenbank- und Schemaebene synchronisiert. Nachdem eine Sekundärdatenbank zur Primärdatenbank heraufgestuft wurde, werden beim Erstellen von Objekten eines bestimmten Typs Berechtigungen automatisch Rollen zugewiesen und zwar gemäß den Definitionen für zukünftige Berechtigungszuweisungen. Weitere Informationen zu zukünftigen Berechtigungszuweisungen finden Sie unter Vereinfachen der Berechtigungsverwaltung mithilfe von zukünftigen Zuweisungen.
Freigabereplikation¶
Dieses Feature unterstützt das Replizieren von Freigabeobjekten sowie von Zugriffsrechten, die Freigaben für Datenbankobjekte erteilt wurden.
Benutzer, der Objekte in einem Zielkonto aktualisiert¶
Ein Benutzer, der den Befehl ALTER REPLICATION GROUP … REFRESH ausführt, um Objekte in einem Zielkonto aus einem Quellkonto zu aktualisieren, muss eine Rolle mit der Berechtigung REPLICATE für die Replikationsgruppe haben. Snowflake schützt diesen Benutzer im Zielkonto, indem folgende Szenarios fehlschlagen:
Wenn der Benutzer im Quellkonto nicht vorhanden ist, schlägt die Aktualisierungsoperation fehl.
Wenn der Benutzer im Quellkonto vorhanden ist, ihm aber keine Rolle mit der Berechtigung REPLICATE zugewiesen wurde, schlägt die Aktualisierungsoperation fehl.
Replikationsberechtigungen¶
Eine Liste der Replikationsberechtigungen, die Rollen erteilt werden können, um die Operationen festzulegen, die Benutzer mit Objekten im System durchführen können, finden Sie unter Replikationsberechtigungen.
Replikationsplan¶
Als Best Practice empfiehlt Snowflake das Erstellen eines Zeitplans für automatische Aktualisierungen unter Verwendung des Parameters REPLICATION_SCHEDULE. Der Zeitplan kann beim Erstellen einer neuen Replikationsgruppe mit CREATE REPLICATION GROUP oder später (mit ALTER REPLICATION GROUP) definiert werden.
Wenn eine sekundäre Replikationsgruppe erstellt wird, wird automatisch eine erste Aktualisierung ausgeführt. Die nächste Aktualisierung wird dann auf Grundlage des Startzeitpunkts der vorherigen Aktualisierung und des Planungsintervalls oder des nächsten gültigen Zeitpunkts auf Grundlage des Cron-Ausdrucks geplant. Wenn beispielsweise das Aktualisierungsintervall 10 Minuten beträgt und die vorherige Aktualisierungsoperation (entweder eine geplante Aktualisierung oder eine manuell ausgelöste Aktualisierung) um 12:01 Uhr beginnt, ist die nächste Aktualisierung für 12:11 Uhr geplant.
Snowflake stellt sicher, dass zu jedem Zeitpunkt nur eine Aktualisierung ausgeführt wird. Wenn eine Aktualisierung noch ausgeführt wird, wenn die nächste Aktualisierung geplant ist, wird der Start der nächsten Aktualisierung so lange verzögert, bis die in Ausführung befindliche Aktualisierung abgeschlossen ist. Wenn z. B. eine Aktualisierung so geplant ist, dass sie jede Stunde 15 Minuten nach der vollen Stunde ausgeführt wird, und die vorherige Aktualisierung um 12:16 abgeschlossen ist, wird die nächste Aktualisierung so geplant, dass die Ausführung nach Abschluss der vorhergehende Aktualisierung erfolgt.
Einschränkungen für Replikationsgruppen¶
Datenbanken und Freigaben sind an die Mitgliedschaft in Replikationsgruppen gebunden und die Replikation in Zielkonten muss eindeutig sein.
Die folgenden Einschränkungen gelten für Datenbank- und Freigabeobjekte:
Ein Objekt kann in mehreren Replikationsgruppen enthalten sein, solange jede Gruppe in ein anderes Zielkonto repliziert wird.
Sekundäre (Replikat-)Objekte können nicht zu einer primären Replikationsgruppe hinzugefügt werden.
Umstellen von Datenbankreplikation auf gruppenbasierte Replikation¶
Wenn Sie für eine Datenbank die Datenbankreplikation bereits gemäß der Anleitung unter Sichere Datenfreigabe über Regionen und Cloudplattformen hinweg aktiviert hatten, müssen Sie erst diese Datenbankreplikation deaktivieren, bevor Sie die Datenbank zu einer Replikationsgruppe hinzufügen können.
Bemerkung
Führen Sie die SQL-Anweisungen in diesem Abschnitt mit der Rolle ACCOUNTADMIN aus.
Schritt 1: Replikation bei einer replikationsfähige Datenbank deaktivieren¶
Verwenden Sie die Funktion SYSTEM$DISABLE_DATABASE_REPLICATION, um die Datenbankreplikation bei einer Primärdatenbank und bei allen mit ihr verknüpften Sekundärdatenbanken zu deaktivieren, um sie zu einer Replikations- oder Failover-Gruppe hinzufügen zu können.
Führen Sie die folgende SQL-Anweisung von dem Quellkonto aus, das die Primärdatenbank enthält:
SELECT SYSTEM$DISABLE_DATABASE_REPLICATION('mydb');
Schritt 2: Datenbanken und Freigaben zu primärer Replikationsgruppe hinzufügen und sekundäre Replikationsgruppe erstellen¶
Nachdem Sie die Datenbankreplikation erfolgreich deaktiviert haben, können Sie nun die primären Datenbanken und Freigaben zu einer Replikationsgruppe im Quellkonto hinzufügen.
Erstellen Sie dann in jedem Zielkonto eine sekundäre Replikationsgruppe. Wenn die sekundäre Replikationsgruppe in jedem Zielkonto aktualisiert wird, werden alle bisherigen Sekundärdatenbanken automatisch als Mitglieder der sekundären Replikationsgruppe hinzugefügt und mit den Änderungen des primären Objekts aktualisiert.
Weitere Informationen zum Erstellen von primären und sekundären Replikationsgruppen und zum Planen der automatischen Aktualisierung von Objekten in Zielkonten finden Sie unter Workflow.
Bemerkung
Wenn Sie eine zuvor replizierte Datenbank zu einer Replikationsgruppe hinzufügen, führt Snowflake keine erneute Replikation der Daten durch, die bereits für diese Datenbank repliziert wurden. Beim Aktualisieren der Gruppe werden nur die Änderungen seit der letzten Aktualisierung repliziert.
Workflow¶
Die folgenden SQL-Anweisungen demonstrieren den Workflow für das Aktivieren der Datenbank- und Freigabereplikation und das Aktualisieren der Objekte. Jeder Schritt wird im Folgenden ausführlich erläutert.
Beispiel¶
Führen Sie die folgenden SQL-Anweisungen in Ihrem bevorzugten Snowflake-Client aus, um die Datenbank- und Freigabereplikation zu aktivieren und Objekte nach einem Zeitplan zu aktualisieren.
Von Quellkonto ausführen¶
Erstellen Sie eine Rolle, und erteilen Sie dieser Rolle die Berechtigung CREATE REPLICATION GROUP. Der folgende Schritt ist optional:
-- Execute the following SQL statements using the ACCOUNTADMIN role: USE ROLE ACCOUNTADMIN; CREATE ROLE myrole; GRANT CREATE REPLICATION GROUP ON ACCOUNT TO ROLE myrole;
CopyErstellen Sie eine Replikationsgruppe im Quellkonto, und aktivieren Sie die Replikation in bestimmte Zielkonten:
Bemerkung
Wenn Sie einer Replikationsgruppe Datenbanken hinzufügen möchten, die zuvor bereits für die Replikation aktiviert wurden, befolgen Sie die Anweisungen unter Umstellen von Datenbankreplikation auf gruppenbasierte Replikation (unter diesem Thema), um die Objekte vor dem Hinzufügen zu einer Replikationsgruppe so zu konvertieren, dass sie für Replikationsgruppen kompatibel sind.
Um eine Datenbank zu einer Replikationsgruppe hinzuzufügen, muss die aktive Rolle über die MONITOR-Berechtigung für die Datenbank verfügen. Weitere Informationen zu Berechtigungen für Datenbanken finden Sie unter Datenbankberechtigungen (untere einem anderen Thema).
Um eine Freigabe zu einer Replikationsgruppe hinzuzufügen, muss die aktive Rolle über die OWNERSHIP-Berechtigung für die Freigabe verfügen.
USE ROLE myrole; -- Execute the following SQL statement using a role with the CREATE REPLICATION GROUP privilege: CREATE REPLICATION GROUP myrg OBJECT_TYPES = DATABASES, SHARES ALLOWED_DATABASES = db1, db2 ALLOWED_SHARES = s1 ALLOWED_ACCOUNTS = myorg.myaccount2, myorg.myaccount3 REPLICATION_SCHEDULE = '10 MINUTE';
Copy
Von Zielkonto ausführen¶
Erstellen Sie eine Rolle im Zielkonto, und erteilen Sie dieser Rolle die Berechtigung CREATE REPLICATION GROUP. Der folgende Schritt ist optional:
-- Execute the following SQL statements using the ACCOUNTADMIN role: USE ROLE ACCOUNTADMIN; CREATE ROLE myrole; GRANT CREATE REPLICATION GROUP ON ACCOUNT TO ROLE myrole;
CopyErstellen Sie eine Replikationsgruppe im Zielkonto als Replikat der Replikationsgruppe im Quellkonto:
USE ROLE myrole; -- Execute the following SQL statement using a role with the CREATE REPLICATION GROUP privilege: CREATE REPLICATION GROUP myrg AS REPLICA OF myorg.myaccount1.myrg;
Copy
Sekundäre Replikationsgruppe manuell aktualisieren¶
Als Best Practice empfiehlt Snowflake das Erstellen eines Zeitplans für automatische Aktualisierungen unter Verwendung des Parameters REPLICATION_SCHEDULE. Weitere Details dazu finden Sie unter Replikationsplan (unter diesem Thema). Um alle Objekte in einer sekundären Replikationsgruppe manuell zu aktualisieren, führen Sie die folgenden SQL-Anweisungen im Zielkonto aus:
Um die Objekte in einem Zielkonto manuell zu aktualisieren, führen Sie den Befehl ALTER REPLICATION GROUP … REFRESH aus.
Bemerkung
Wenn der Benutzer, der die Funktion im Zielkonto aufruft, im Quellkonto gelöscht wurde, schlägt die Aktualisierungsoperation fehl.
Rolle REPLICATE-Berechtigung für Replikationsgruppe erteilen – Optional¶
Die REPLICATE-Berechtigung wird derzeit nicht repliziert und muss für eine Replikationsgruppe sowohl im Quell- als auch im Zielkonto erteilt werden.
Von Quellkonto ausführen:
-- Execute the following SQL statements using a role with the OWNERSHIP privilege on the group: GRANT REPLICATE ON REPLICATION GROUP myrg TO ROLE my_replication_role;CopyVon Zielkonto ausführen:
-- Execute the following SQL statements using a role with the OWNERSHIP privilege on the group: GRANT REPLICATE ON REPLICATION GROUP myrg TO ROLE my_replication_role;Copy
Manuelles Aktualisieren der sekundären Replikationsgruppe¶
Um beispielsweise die Objekte in der Replikationsgruppe myrg
zu aktualisieren, führen Sie die folgende Anweisung über das Zielkonto aus:
USE ROLE my_replication_role; -- Execute the following SQL statements using a role with the REPLICATE privilege: ALTER REPLICATION GROUP myrg REFRESH;Copy
Replizieren von Datenbanken und Freigaben¶
Voraussetzungen¶
Replikation für Ihre Konten aktivieren¶
Ein Benutzer mit der Rolle ORGADMIN muss die Replikation für zwei oder mehr Konten in Ihrer Organisation aktivieren. Eine Anleitung dazu finden Sie unter Voraussetzung: Aktivieren Sie die Replikation für Konten der Organisation.
Bemerkung
Bevor Sie die Datenreplikation konfigurieren, müssen Sie ein Konto in einer Region haben oder erstellen, in der Sie Daten freigeben möchten, und dieses Konto mit Ihrem lokalen Konto verknüpfen. Weitere Informationen zum Erstellen von Konten finden Sie unter Erstellen eines Kontos.
Freigabe im Quellkonto erstellen¶
Wenn Sie zuvor eine Freigabe in Ihrem (lokalen) Quellkonto erstellt haben, können Sie diesen Schritt überspringen.
So erstellen Sie eine neue Freigabe:
Melden Sie sich als Benutzer mit der Rolle ACCOUNTADMIN bei der klassischen Snowflake-Weboberfläche an.
Erstellen Sie eine Freigabe, und fügen Sie der Freigabe Objekte hinzu. Eine Anleitung dazu finden Sie unter Erste Schritte für sichere Datenfreigaben.
Schritt 1: Rolle mit CREATE REPLICATION GROUP-Berechtigung im Quellkonto erstellen – Optional¶
Erstellen Sie eine Rolle, und erteilen Sie dieser Rolle die Berechtigung CREATE REPLICATION GROUP. Dieser Schritt ist optional. Wenn Sie diese Rolle bereits erstellt haben, fahren Sie mit Schritt 2: Primäre Replikationsgruppe in einem Quellkonto erstellen fort.
-- Execute the following SQL statements using the ACCOUNTADMIN role:
USE ROLE ACCOUNTADMIN;
CREATE ROLE myrole;
GRANT CREATE REPLICATION GROUP ON ACCOUNT
TO ROLE myrole;
Schritt 2: Primäre Replikationsgruppe in einem Quellkonto erstellen¶
Erstellen Sie eine primäre Replikationsgruppe, und aktivieren Sie die Replikation der angegebenen Datenbanken und Freigaben vom aktuellen (Quell-)Konto in ein oder mehrere Zielkonten derselben Organisation.
Alle für Replikation aktivierten Konten anzeigen¶
Um die Liste der Konten in Ihrer Organisation abzurufen, die für die Replikation aktiviert sind, verwenden Sie SHOW REPLICATION ACCOUNTS.
SHOW REPLICATION ACCOUNTS;
+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+
| snowflake_region | created_on | account_name | account_locator | comment | organization_name |
+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+
| AWS_US_WEST_2 | 2020-07-15 21:59:25.455 | myaccount1 | myacctlocator1 | | myorg |
+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+
| AWS_US_EAST_1 | 2020-07-23 14:12:23.573 | myaccount2 | myacctlocator2 | | myorg |
+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+
| AWS_US_EAST_2 | 2020-07-25 19:25:04.412 | myaccount3 | myacctlocator3 | | myorg |
+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+
Mitgliedschaft von Replikationsgruppen anzeigen¶
Für Datenbank- und Freigabeobjekte gibt es Einschränkungen für Replikationsgruppen hinsichtlich der Mitgliedschaft in den Gruppen. Bevor Sie neue Gruppen erstellen oder Objekte zu bestehenden Gruppen hinzufügen, können Sie die Liste der bestehenden Replikationsgruppen und der Objekte in jeder Gruppe überprüfen.
Bemerkung
Nur ein Kontoadministrator (Benutzer mit der Rolle ACCOUNTADMIN) oder der Gruppeneigentümer (Rolle mit OWNERSHIP-Berechtigung für die Gruppe) kann die SQL-Anweisungen in diesem Abschnitt ausführen.
Anzeigen aller Replikationsgruppen, die mit dem aktuellen Konto verknüpft sind, sowie die Objekttypen in jeder Gruppe:
SHOW REPLICATION GROUPS;Copy
Anzeigen aller Datenbanken in der Replikationsgruppe myrg
:
SHOW DATABASES IN REPLICATION GROUP myrg;Copy
Anzeigen aller Freigaben in der Replikationsgruppe myrg
:
SHOW SHARES IN REPLICATION GROUP myrg;Copy
Datenbank- und Freigabereplikation von einem Quellkonto zum Zielkonto aktivieren¶
Erstellen Sie eine Replikationsgruppe mit den angegebenen Datenbanken und Freigaben im Quellkonto, und aktivieren Sie die Replikation für eine Liste von Zielkonten. Weitere Informationen zur Syntax finden Sie unter CREATE REPLICATION GROUP.
Aktivieren Sie beispielsweise die Replikation der Datenbanken db1
und db2
, und geben Sie s1
vom Quellkonto für das Konto myaccount2
in derselben Organisation frei.
Auf dem Quellkonto ausführen:
USE ROLE myrole;
-- Execute the following SQL statement using a role with the CREATE REPLICATION GROUP privilege:
CREATE REPLICATION GROUP myrg
OBJECT_TYPES = databases, shares
ALLOWED_DATABASES = db1, db2
ALLOWED_SHARES = s1
ALLOWED_ACCOUNTS = myorg.myaccount2;
Schritt 3: Rolle mit CREATE REPLICATION GROUP-Berechtigung Privileg im Zielkonto erstellen – Optional¶
Erstellen Sie eine Rolle im Zielkonto, und erteilen Sie dieser Rolle die Berechtigung CREATE REPLICATION GROUP. Dieser Schritt ist optional. Wenn Sie diese Rolle bereits erstellt haben, fahren Sie mit Schritt 4: Sekundäre Replikationsgruppe im Zielkonto erstellen fort.
-- Execute the following SQL statements using the ACCOUNTADMIN role:
USE ROLE ACCOUNTADMIN;
CREATE ROLE myrole;
GRANT CREATE REPLICATION GROUP ON ACCOUNT
TO ROLE myrole;
Schritt 4: Sekundäre Replikationsgruppe im Zielkonto erstellen¶
Erstellen Sie eine sekundäre Replikationsgruppe im Zielkonto als Replikat der primären Replikationsgruppe aus dem Quellkonto.
Führen Sie eine CREATE REPLICATION GROUP … AS REPLICA OF-Anweisung in jedem Zielkonto aus, für das Sie die Replikation in Schritt 2: Primäre Replikationsgruppe in einem Quellkonto erstellen (unter diesem Thema) aktiviert haben.
Von jedem Zielkonto ausführen:
USE ROLE myrole;
-- Execute the following SQL statement using a role with the CREATE REPLICATION GROUP privilege:
CREATE REPLICATION GROUP myrg
AS REPLICA OF myorg.myaccount1.myrg;
Sekundäre Replikationsgruppe manuell aktualisieren¶
Aktualisieren Sie manuell eine sekundäre Replikationsgruppe im Zielkonto. Dadurch werden alle Objekte in der Replikationsgruppe aktualisiert.
Bemerkung
Als Best Practice empfiehlt Snowflake das Erstellen eines Zeitplans für automatische Aktualisierungen unter Verwendung des Parameters REPLICATION_SCHEDULE. Weitere Informationen dazu finden Sie unter Replikationsplan (unter diesem Thema).
Aktualisieren Sie eine sekundäre Replikationsgruppe.
Um beispielsweise die Objekte in der Replikationsgruppe
myrg
zu aktualisieren, führen Sie die folgende Anweisung über das Zielkonto aus:-- Only a user with the ACCOUNTADMIN role can execute the following SQL statement: ALTER REPLICATION GROUP myrg REFRESH;Copy
Replikationsgruppen anzeigen¶
Für die Anzeige der Replikationsgruppen verwenden Sie SHOW REPLICATION GROUPS:
Um alle primären und sekundären Replikationsgruppen anzuzeigen, die mit dem aktuellen Konto verbunden sind, führen Sie die folgende SQL-Anweisung aus:
SHOW REPLICATION GROUPS;Copy
Befehlsausgabe:
+------------------+-------------------------------+--------------+------+-------------+---------+------------+------------------+--------------------------------------+------------------------------------------+--------------------+-----------------+----------------------+-----------------+------------+
| snowflake_region | created_on | account_name | name | type | comment | is_primary | primary | object_types | allowed_accounts | organization_name | account_locator | replication_schedule | secondary_state | owner |
+------------------+-------------------------------+--------------+------+-------------+---------+------------+------------------+--------------------------------------+------------------------------------------+--------------------+-----------------+----------------------+-----------------+------------+
| AWS_US_EAST_1 | 2022-01-14 16:59:01.462 -0800 | MYACCOUNT2 | MYRG | REPLICATION | NULL | false | MYORG.MYACCOUNT1 | | | MYORG | MYACCTLOCATOR2 | 15 MINUTE | SUSPENDED | NULL |
| AWS_US_WEST_2 | 2022-01-14 16:56:10.497 -0800 | MYACCOUNT1 | MYRG | REPLICATION | NULL | true | MYORG.MYACCOUNT1 | DATABASES, SHARES | MYORG.MYACCOUNT2 | MYORG | MYACCTLOCATOR1 | 15 MINUTE | NULL | MYROLE |
+------------------+-------------------------------+--------------+------+-------------+---------+------------+------------------+--------------------------------------+------------------------------------------+--------------------+-----------------+----------------------+-----------------+------------+