Replizieren von Datenbanken über mehrere Konten

Unter diesem Thema werden die Schritte beschrieben, die zum Replizieren von Datenbanken über mehrere Snowflake-Konten hinweg und zum Synchronisieren der Datenbankobjekte und gespeicherten Daten erforderlich sind. Die Datenbankreplikation kann über Snowflake-Konten in derselben oder in verschiedenen Regionen erfolgen.

Bemerkung

Snowflake empfiehlt die Verwendung des Features Einführung in Replikation und Failover zum Replizieren von Datenbanken. Replikations- und Failover-Gruppen ermöglichen die Replikation von mehreren Datenbanken und anderen Kontoobjekten mit zeitpunktbezogener Konsistenz für Objekte in der Gruppe. Eine vollständige Liste der Feature-Verfügbarkeit und der unterstützten Objekte finden Sie unter Einführung in Replikation und Failover.

Unter diesem Thema:

Unterstützung von Datenbankreplikation und Failover/Failback in den Regionen

Alle Snowflake Regionen auf Amazon Web Services, Google Cloud Platform und Microsoft Azure unterstützen Datenbankreplikation und Failover/Failback.

Beachten Sie, dass Konten Datenbanken zwischen Regionsgruppen (z. B. zwischen Virtual Private Snowflake (VPS) und Regionen mit mehreren Mandanten) replizieren können, wodurch das Data Sharing und die Migration von Konten zwischen diesen Regionen vereinfacht werden. Diese Fähigkeit ist standardmäßig deaktiviert. Sie können sich an den Snowflake-Support wenden, um den Zugriff zu aktivieren.

Weboberfläche für Datenbankreplikation und Failover/Failback

Kontoadministratoren (Benutzer mit der Rolle ACCOUNTADMIN) können Replikations- und Failover/Failback-Aktionen über Snowsight oder die klassischen Weboberfläche verwalten.

Snowsight

Navigation:

Data » Databases

Heraufstufen einer lokalen Datenbank

  1. Melden Sie sich bei einem Snowflake-Konto an, das eine lokale Datenbank enthält, die Sie in ein oder mehrere andere Konten replizieren möchten.

  2. Klicken Sie im Dropdown-Menü oben links (neben Ihrem Anmeldenamen) auf » Switch Role » ACCOUNTADMIN.

  3. Klicken Sie links auf der Seite Databases im Datenbankobjekt-Explorer auf eine lokale Datenbank. Die Datenbank-Detailseite wird geöffnet.

  4. Klicken Sie in der oberen rechten Ecke der Seite » Enable Replication auf die Aktionsschaltfläche (). Das Dialogfenster Enable replication wird geöffnet.

    In diesem Dialogfeld können Sie die folgenden Aktionen durchführen:

    • Heraufstufen einer lokalen Datenbank zur primären Datenbank

    • Erstellen einer sekundären Datenbank in einem oder mehreren Zielkonten

    • Aktualisieren jeder sekundären Datenbank einmal, nachdem sie erstellt wurde

  5. Aktivieren Sie für jedes Zielkonto dieser Datenbank die Optionen zum Erstellen einer sekundären Datenbank und zum Aktualisieren der Datenbank.

  6. Melden Sie sich beim Zielkonto als Benutzer an, dem zuvor die Rolle ACCOUNTADMIN in diesem Konto zugewiesen wurde.

    Snowflake führt die angeforderten Aktionen aus und zeigt einen Erfolgsdialog an.

    Verwalten Sie die Replikation für diese Datenbank auf der Registerkarte Replication der Datenbankdetails.

Verwalten einer sekundären Datenbank

  1. Melden Sie sich bei einem Konto an, das eine sekundäre Datenbank enthält.

  2. Klicken Sie im Dropdown-Menü oben links (neben Ihrem Anmeldenamen) auf » Switch Role » ACCOUNTADMIN.

  3. Klicken Sie links auf der Seite Databases im Datenbankobjekt-Explorer auf eine sekundäre Datenbank. Die Datenbank-Detailseite wird geöffnet.

  4. Klicken Sie auf die Registerkarte Replication.

    Die folgenden Aktionen sind über die Aktionsschaltfläche () in der oberen rechten Ecke der Seite verfügbar:

    • Heraufstufen der sekundären Datenbank zur primären Datenbank. Dieses Feature erfordert Business Critical (oder höher).

    • Aktualisieren Sie die sekundäre Datenbank.

    • Kopieren Sie eine Vorlage, um eine Aufgabe zu erstellen, mit der die sekundäre Datenbank nach einem Zeitplan aktualisiert wird. Fügen Sie die Vorlage in ein Snowsight-Arbeitsblatt ein, und bearbeiten Sie sie, um den gewünschten Zeitplan festzulegen.

Klassische Konsole

Die meisten Aktionen zum Konfigurieren und Verwalten der Datenbankreplikation können Sie auf der klassischen Weboberfläche über den Bereich Replication der Registerkarte Databases Databases tab ausführen, einschließlich der folgenden Aktionen:

  • Heraufstufen einer lokalen Datenbank zur Primärdatenbank

  • Aktivieren des Failover für eine primäre Datenbank (Business Critical Edition-Konten oder höher)

  • Aktualisieren einer sekundären Datenbank entweder einmal (manuell) oder wiederholt (nach Zeitplan unter Verwendung einer Aufgabe)

  • Heraufstufen einer sekundären Datenbanken als primäre Datenbank (Business Critical Edition-Konten oder höher)

  • Deaktivieren der Replikation und/oder des Failover einer Primärdatenbank

Replizieren einer Datenbank in ein anderes Konto

In den Anweisungen in diesem Abschnitt wird erläutert, wie Sie Ihre Konten für die Replikation vorbereiten, eine lokale Datenbank als Primärdatenbank heraufstufen, die erstmalige Replikation dieser Primärdatenbank auf ein anderes Konto durchführen und die Aktualisierung der Sekundärdatenbank planen.

Wichtig

Bei Zielkonten ist standardmäßig weder Tri-Secret Secure noch private Konnektivität zum Snowflake-Dienst (z. B. AWS PrivateLink) aktiviert. Wenn Sie Tri-Secret Secure oder private Konnektivität zum Snowflake-Dienst aus Compliance-, Sicherheits- oder anderen Gründen benötigen, liegt es in Ihrer Verantwortung, diese Features im Zielkonto zu konfigurieren und zu aktivieren.

Voraussetzung: Aktivieren Sie die Replikation für Konten der Organisation

Der Organisationsadministrator (Rolle ORGADMIN) muss die Replikation für die Quell- und Zielkonten aktivieren, bevor eine Datenbank repliziert wird. Detaillierte Anweisungen finden Sie unter Voraussetzung: Aktivieren Sie die Replikation für Konten der Organisation.

Aktivieren von Datenbankreplikation und Failover sowie Aktualisieren von Sekundärdatenbanken

Bemerkung

Wenn nicht anders angegeben muss die SQL-Anweisung in diesem Abschnitt von Kontoadministratoren (Benutzer mit der Rolle ACCOUNTADMIN) ausgeführt werden.

Schritt 1: Anzeigen aller Konten Ihrer Organisation

Rufen Sie die Liste der Konten in Ihrer Organisation anzuzeigen, in der die Replikation aktiviert wurde. Jede in diesen Konten vorhandene permanente oder temporäre Datenbank kann so geändert werden, dass sie als Primärdatenbank dient. Replikate einer Primärdatenbank (d. h. Sekundärdatenbanken) können nur in diesen Konten erstellt werden.

Fragen Sie SHOW REPLICATION ACCOUNTS ab, um die Liste der Konten in Ihrer Organisation anzuzeigen.

SHOW REPLICATION ACCOUNTS;

+------------------+---------------------------------+---------------+------------------+---------+-------------------+
| snowflake_region | created_on                      | account_name  | account_locator  | comment | organization_name |
|------------------+---------------------------------+---------------+------------------+---------+-------------------|
| AWS_US_WEST_2    | 2018-11-19 16:11:12.720 -0700   | ACCOUNT1      | MYACCOUNT1       |         | MYORG             |
| AWS_US_EAST_1    | 2019-06-02 14:12:23.192 -0700   | ACCOUNT2      | MYACCOUNT2       |         | MYORG             |
+------------------+---------------------------------+---------------+------------------+---------+-------------------+
Copy

Verwenden Sie auch die vollständige Liste der Regions-IDs.

Schritt 2: Heraufstufen einer lokalen Datenbank zur Verwendung als primäre Datenbank

Ändern Sie eine vorhandene permanente oder transiente Datenbank, um sie als Primärdatenbank zu verwenden. Verwenden Sie dafür die Anweisung ALTER DATABASE … ENABLE REPLICATION TO ACCOUNTS. Stellen Sie eine durch Kommas getrennte Liste der Konten Ihrer Organisation bereit, in denen ein Replikat dieser Datenbank (d. h. eine sekundäre Datenbank) gespeichert werden kann, sodass Benutzer in diesen Konten Objekte der sekundären Datenbank abfragen können.

Beispiel

Heraufstufen der lokalen Datenbank mydb1 (in Konto account1) zur Primärdatenbank und Festlegen, dass die Konten account2 und account3 jeweils ein Replikat dieser Datenbank speichern können:

ALTER DATABASE mydb1 ENABLE REPLICATION TO ACCOUNTS myorg.account2, myorg.account3;
Copy

Schritt 3: Aktivieren des Failovers für eine Primärdatenbank

Bemerkung

Failover/Failback erfordert Business Critical (oder höher). Wenden Sie sich für ein Upgrade direkt an den Snowflake-Support.

Aktivieren Sie das Failover einer Primärdatenbank für ein oder mehrere Konten Ihrer Organisation mithilfe einer ALTER DATABASE … ENABLE FAILOVER TO ACCOUNTS-Anweisung. Das Replikat dieser Primärdatenbank in einem der Konten (d. h. eine Sekundärdatenbank) kann heraufgestuft werden, um als Primärdatenbank zu dienen.

Beachten Sie, dass das Aktivieren des Failovers für eine Primärdatenbank entweder vor oder nach dem Erstellen des Replikats der Primärdatenbank in einem angegebenen Konto erfolgen kann.

Beispiel

Aktivieren Sie das Failover der Primärdatenbank mydb1 in die Konten account2 und account3.

-- Executed from primary account
ALTER DATABASE mydb1 ENABLE FAILOVER TO ACCOUNTS myorg.account2, myorg.account3;
Copy

Schritt 4: Erstellen einer Sekundärdatenbank

Erstellen Sie ein Replikat einer vorhandenen Primärdatenbank entweder in demselben Konto, in dem die Primärdatenbank gespeichert ist, oder in einem anderen Konto (in derselben oder in einer anderen Region). Beachten Sie, dass Sie eine sekundäre Datenbank nur in einem Konto erstellen können, das in der Anweisung ALTER DATABASE … ENABLE REPLICATION TO ACCOUNTS in Schritt 2: Heraufstufen einer lokalen Datenbank zur Verwendung als primäre Datenbank angegeben ist.

Bemerkung

Replikationsbefehle (z. B. das Heraufstufen einer Datenbank zur Primärdatenbank in einem Quellkonto) lösen in der Regel regionsübergreifende Operationen aus und können einige Sekunden dauern, bis sie wirksam werden. Wenn Sie z. B. eine Datenbank programmgesteuert zur Primärdatenbank in einem Quellkonto heraufstufen und eine Sekundärdatenbank in einem Zielkonto erstellen, kann es einige Sekunden dauern, bis Sie die Sekundärdatenbank erstellen können.

Führen Sie eine CREATE DATABASE … AS REPLICA OF-Anweisung in jedem Zielkonto aus, um ein Replikat der angegebenen Primärdatenbank zu erstellen.

Wichtig

Als bewährte Methode empfehlen wir, jeder sekundären Datenbank denselben Namen wie ihrer primären Datenbank zu geben. Diese Vorgehensweise unterstützt das Verweisen auf vollständig qualifizierte Objekte (d. h. '<Datenbank>.<Schema>.<Objekt>') durch andere Objekte in derselben Datenbank, z. B. das Abfragen eines vollständig qualifizierten Tabellennamens in einer Ansicht.

Wenn eine sekundäre Datenbank einen anderen Namen als die primäre Datenbank hat, werden diese Objektreferenzen in der sekundären Datenbank unterbrochen.

Verwenden Sie die Funktion SHOW REPLICATION DATABASES, um die Liste der primären und sekundären Datenbanken Ihrer Organisation abzufragen. Nachdem eine Sekundärdatenbank erstellt wurde, kann ein Kontoadministrator die Eigentümerschaft der Datenbank auf eine andere Rolle übertragen (mithilfe von GRANT OWNERSHIP).

Beispiel

Im folgenden Beispiel wird ein Replikat der Primärdatenbank myorg.account1.mydb1 im Konto myorg.account2 erstellt:

-- Log into the ACCOUNT2 account.

-- Query the set of primary and secondary databases in your organization.
-- In this example, the MYORG.ACCOUNT1 primary database is available to replicate.
SHOW REPLICATION DATABASES;

+------------------+-------------------------------+-----------------+----------+---------+------------+----------------------------+---------------------------------+------------------------------+-------------------+-----------------+
| snowflake_region | created_on                    | account_name    | name     | comment | is_primary | primary                    | replication_allowed_to_accounts | failover_allowed_to_accounts | organization_name | account_locator |
|------------------+-------------------------------+-----------------+----------+---------+------------+----------------------------+---------------------------------+------------------------------+-------------------+-----------------|
| AWS_US_WEST_2    | 2019-11-15 00:51:45.473 -0700 | ACCOUNT1        | MYDB1    | NULL    | true       | MYORG.ACCOUNT1.MYDB1       | MYORG.ACCOUNT2, MYORG,ACCOUNT1  | MYORG.ACCOUNT1               | MYORG             | MYACCOUNT1      |
+------------------+-------------------------------+-----------------+----------+---------+------------+----------------------------+---------------------------------+------------------------------+-------------------+-----------------+

-- Create a replica of the 'mydb1' primary database
-- If the primary database has the DATA_RETENTION_TIME_IN_DAYS parameter set to a value other than the default value,
-- set the same value for the parameter on the secondary database.
CREATE DATABASE mydb1
  AS REPLICA OF myorg.account1.mydb1
  DATA_RETENTION_TIME_IN_DAYS = 10;

-- Verify the secondary database
SHOW REPLICATION DATABASES;

+------------------+-------------------------------+---------------+----------+---------+------------+-------------------------+---------------------------------+------------------------------+-------------------+-----------------+
| snowflake_region | created_on                    | account_name  | name     | comment | is_primary | primary                 | replication_allowed_to_accounts | failover_allowed_to_accounts | organization_name | account_locator |
|------------------+-------------------------------+---------------+----------+---------+------------+------------------------------------------+----------------+------------------------------+-------------------------------------|
| AWS_US_WEST_2    | 2019-11-15 00:51:45.473 -0700 | ACCOUNT1      | MYDB1    | NULL    | true       | MYORG.ACCOUNT1.MYDB1    | MYORG.ACCOUNT2, MYORG.ACCOUNT1  | MYORG.ACCOUNT1               | MYORG             | MYACCOUNT1      |
| AWS_US_EAST_1    | 2019-08-15 15:51:49.094 -0700 | ACCOUNT2      | MYDB1    | NULL    | false      | MYORG.ACCOUNT1.MYDB1    |                                 |                              | MYORG             | MYACCOUNT2      |
+------------------+-------------------------------+---------------+----------+---------+------------+-------------------------+---------------------------------+------------------------------+-------------------+-----------------+
Copy

Schritt 5: Aktualisieren jeder sekundären Datenbank

In den Anweisungen in diesem Abschnitt wird erläutert, wie eine sekundäre Datenbank aus einem Snapshot ihrer primären Datenbank aktualisiert wird (mithilfe von ALTER DATABASE … REFRESH). Ein Snapshot enthält Änderungen an den Objekten und Daten. Für die erste Replikation einer sehr großen Primärdatenbank empfehlen wir das Erhöhen des Anweisungstimeouts.

Beachten Sie, dass der Eigentümer der sekundären Datenbank (Rolle mit der Berechtigung OWNERSHIP für die Datenbank) alle neuen Objekte besitzt, die infolge einer Datenbankaktualisierung hinzugefügt wurden.

Bemerkung

Um eine sekundäre Datenbank zu aktualisieren, muss die zum Ausführen der Operation verwendete Rolle über die Berechtigung OWNERSHIP für die Datenbank verfügen.

Verwenden Sie nach der Anmeldung bei einem Konto die Funktion CURRENT_REGION, um die aktuelle Region abzufragen.

ALTER DATABASE mydb1 REFRESH;
Copy

Sie können auch eine sekundäre Datenbank über die Weboberfläche aktualisieren.

Schritt 6: Aktualisieren einer sekundären Datenbank nach einem Zeitplan

Als bewährte Methode empfehlen wir, die Aktualisierung Ihrer sekundären Datenbank zu planen. Dieser Abschnitt enthält Anweisungen zum automatischen Starten einer Datenbankaktualisierung nach einem festgelegten Zeitplan.

Die Häufigkeit, mit der Sie eine sekundäre Datenbank aktualisieren, hängt vom Wiederanlaufzeitpunkt nach einem Ausfall (Recovery Point Objective, RPO) für die Daten in der sekundären Datenbank ab. Wenn beispielsweise Anwendungen, die auf den Daten basieren, Datenverluste von bis zu 1 Stunden tolerieren können, müssen Sie die Daten mindestens stündlich aktualisieren. Wenn die Datenverlusttoleranz 5 Minuten beträgt, aktualisieren Sie die sekundäre Datenbank mindestens alle 5 Minuten.

Bemerkung

  • Es wird empfohlen, die erstmalige Replikation einer Primärdatenbank manuell auszuführen (mit ALTER DATABASE … REFRESH) und nur nachfolgende Aktualisierungen zu planen.

  • Derzeit gibt es eine Beschränkung von 60 Minuten für die einzelne Ausführung einer Aufgabe. Diese Beschränkung wurde als Schutz gegen nicht abschließende Aufgaben implementiert. In seltenen Fällen kann eine Aktualisierung einer sehr großen Datenbank das Standardlimit für die Ausführung von Aufgaben überschreiten. Um festzustellen, ob dies aufgetreten ist, fragen Sie die Tabellenfunktion TASK_HISTORY ab. Alternativ können Sie den Timeoutwert für die Aufgabe erhöhen, indem Sie ALTER TASK … SET USER_TASK_TIMEOUT_MS = <Zahl> ausführen.

Führen Sie die Schritte in diesem Abschnitt aus, um eine Datenbankaktualisierung nach einem festgelegten Zeitplan automatisch zu starten.

Voraussetzungen

Die folgenden Snowflake-Objekte sind in dem Konto erforderlich, in dem die sekundäre Datenbank gespeichert ist:

  • Die sekundäre Datenbank.

  • Eine separate Datenbank zum Speichern der in diesem Abschnitt erstellten neuen Objekte. Da Sekundärdatenbanken schreibgeschützt sind, muss diese Datenbank von der Sekundärdatenbank getrennt sein. Diese Datenbank muss auch die folgenden Objekte enthalten:

    • Schema. Verwenden Sie das Schema PUBLIC, oder erstellen Sie mit CREATE SCHEMA ein neues Schema.

    • Warehouse. Hier kann ein beliebiges Warehouse bereitgestellt werden, um die Syntaxanforderung zu erfüllen, das aber nicht für die Datenbankaktualisierung verwendet wird. Erstellen Sie ein neues Warehouse mit CREATE WAREHOUSE.

    • Aufgabe, die die sekundäre Datenbank nach einem Zeitplan aktualisiert.

Erforderliche Berechtigungen

Für die Schritte in diesem Abschnitt ist eine Rolle erforderlich, die in dem Konto, in dem die sekundäre Datenbank aktualisiert wird, die folgenden Berechtigungen aufweist:

Objekttyp

Objekt

Berechtigung

Anmerkungen

Konto

Konto, in dem die sekundäre Datenbank gespeichert ist

EXECUTE TASK

Erforderlich, um die neue Aufgabe auszuführen.

Datenbank

Sekundäre Datenbank

OWNERSHIP

Erforderlich, um die sekundäre Datenbank zu aktualisieren.

Datenbank

Datenbank, in der die neue Aufgabe gespeichert wird.

USAGE

Schema

Schema, in dem die neue Aufgabe gespeichert wird.

USAGE, CREATE TASK

Aufgabe

OWNERSHIP

Die Rolle, die die Aufgabe erstellt, besitzt standardmäßig das Objekt. Die Eigentümerschaft kann mit GRANT privileges … TO ROLE auf eine andere Rolle übertragen werden.

Warehouse

Warehouse, das zur Konfiguration der Aufgabe verwendet wird

USAGE

Die Angabe eines Warehouses ist für die Konfiguration der Aufgabe erforderlich, auch wenn das Warehouse nicht für die Ausführung der Aufgabe oder für die Aktualisierungsoperation verwendet wird.

Schritte

Führen Sie die folgenden Schritte für jede sekundäre Datenbank aus, die Sie nach einem Zeitplan aktualisieren möchten:

  1. Erstellen Sie eine Aufgabe, mit der die Datenbankaktualisierung nach einem Zeitplan gestartet wird (mithilfe von CREATE TASK). Beachten Sie, dass obwohl die CREATETASK-Syntax zur Angabe eines Replikationsplans ein Warehouse erfordert, das Warehouse nicht für die Replikation verwendet wird.

    Erstellen Sie beispielsweise eine Aufgabe mit dem Namen refresh_mydb1_task, die alle 10 Minuten und einem Timeout von 4 Stunden eine sekundäre Datenbank mit dem Namen mydb1 aktualisiert. Die Aufgabe wird mit dem vorhandenen Warehouse mywh konfiguriert:

    CREATE TASK refresh_mydb1_task
      WAREHOUSE = mywh
      SCHEDULE = '10 minute'
      USER_TASK_TIMEOUT_MS = 14400000
    AS
      ALTER DATABASE mydb1 REFRESH;
    
    Copy
  2. Eine Aufgabe wird bei ihrer Erstellung standardmäßig angehalten. Setzen Sie die Aufgabe fort, um sie auf Grundlage der in der Aufgabendefinition angegebenen Parameter auszuführen:

ALTER TASK refresh_mydb1_task RESUME;
Copy

Beispiel

Führen Sie die folgenden SQL-Anweisungen in Ihrem bevorzugten Snowflake-Client aus, um Replikation und Failover zu aktivieren, eine erste Datenbankaktualisierung durchzuführen und geplante Aktualisierungen einzurichten.

Von Quellkonto ausführen
-- The commands below are executed from the source account

-- View replication enabled accounts
SHOW REPLICATION ACCOUNTS;

ALTER DATABASE mydb ENABLE REPLICATION TO ACCOUNTS myorg.account2, myorg.account3;
ALTER DATABASE mydb ENABLE FAILOVER TO ACCOUNTS myorg.account2, myorg.account3;
Copy
Von jedem Zielkonto ausführen
-- The commands below are executed from each target account

-- View replication enabled databases
-- Note the primary column of the source database for the CREATE DATABASE statement below
SHOW REPLICATION DATABASES;

-- If the primary database has the DATA_RETENTION_TIME_IN_DAYS parameter set to a value other than the default value,
-- set the same value for the parameter on the secondary database.
CREATE DATABASE mydb
  AS REPLICA OF myorg.account1.mydb
  DATA_RETENTION_TIME_IN_DAYS = 10;

-- Increase statement timeout for initial refresh
-- Optional but recommended for initial refresh of a large database
ALTER SESSION SET STATEMENT_TIMEOUT_IN_SECONDS = 604800;
-- If you have an active warehouse in current session, update warehouse statement timeout
SELECT CURRENT_WAREHOUSE();
ALTER WAREHOUSE my_wh SET STATEMENT_TIMEOUT_IN_SECONDS = 604800;
-- Reset warehouse statement timeout after initial refresh
ALTER WAREHOUSE my_wh UNSET STATEMENT_TIMEOUT_IN_SECONDS;

-- Refresh a secondary database
ALTER DATABASE mydb REFRESH;

-- Create task
-- Set up refresh schedule for each secondary database using a separate database
USE DATABASE my_db2;

-- Create a task and RESUME the task for each secondary database
-- Edit the task schedule and timeout for your specific use case
CREATE TASK my_refresh_task
  WAREHOUSE = my_wh
  SCHEDULE = '10 minute'
  USER_TASK_TIMEOUT_MS = 14400000
AS
  ALTER DATABASE mydb REFRESH;

-- Start task
ALTER TASK my_refresh_task RESUME;
Copy

Verwenden des alten Konto-Locators

Obwohl das alte Format snowflake_region.account_locator derzeit bei der Identifizierung eines Kontos in Replikations- und Failover-Befehlen unterstützt wird, wird von seiner Verwendung abgeraten, da es in Zukunft nicht mehr funktionieren könnte.

Erhöhen des Anweisungstimeouts für die erstmalige Replikation

Bei der Datenbankreplikation werden zum Kopieren von Objekten und Daten die von Snowflake bereitgestellten Computeressourcen anstelle Ihres eigenen virtuellen Warehouse verwendet. Der Sitzungs-/Objektparameter STATEMENT_TIMEOUT_IN_SECONDS steuert jedoch weiterhin, wie lange eine Anweisung ausgeführt wird, bevor sie abgebrochen wird. Der Standardwert ist 172800 (2 Tage). Da die erstmalige Replikation einer sehr großen Primärdatenbank länger als 2 Tage dauern kann (abhängig von der Menge der Metadaten in der Datenbank sowie der Menge der Daten in den Datenbankobjekten), empfehlen wir, den Wert STATEMENT_TIMEOUT_IN_SECONDS für die Sitzung, in der Sie den Replikationsoperation ausführen, auf 604800 (7 Tage, Maximalwert) zu erhöhen.

Führen Sie die folgende ALTER SESSION-Anweisung aus, bevor Sie in derselben Sitzung die Anweisung ALTER DATABASE secondary_db_name REFRESH (Name_der_Sekundärdatenbank) ausführen:

ALTER SESSION SET STATEMENT_TIMEOUT_IN_SECONDS = 604800;
Copy

Beachten Sie, dass der Parameter STATEMENT_TIMEOUT_IN_SECONDS auch für das aktive Warehouse einer Sitzung gilt. Der Parameter berücksichtigt den niedrigeren Wert, der auf Sitzungs- oder Warehouse-Ebene festgelegt wurde. Wenn Sie in der aktuellen Sitzung ein aktives Warehouse haben, setzen Sie STATEMENT_TIMEOUT_IN_SECONDS auch für dieses Warehouse auf 604800 (mithilfe von ALTER WAREHOUSE).

Beispiel:

-- determine the active warehouse in the current session (if any)
SELECT CURRENT_WAREHOUSE();

+---------------------+
| CURRENT_WAREHOUSE() |
|---------------------|
| MY_WH               |
+---------------------+

-- change the STATEMENT_TIMEOUT_IN_SECONDS value for the active warehouse

ALTER WAREHOUSE my_wh SET STATEMENT_TIMEOUT_IN_SECONDS = 604800;
Copy

Sie können den Parameterwert nach Abschluss der Replikationsoperation auf den Standardwert zurücksetzen:

ALTER WAREHOUSE my_wh UNSET STATEMENT_TIMEOUT_IN_SECONDS;
Copy

Überwachen des Fortschritts einer Datenbankaktualisierung

Um den aktuellen Status der erstmaligen Datenbankreplikation oder einer anschließenden Aktualisierung der sekundären Datenbank zu ermitteln, rufen Sie die Tabellenfunktion DATABASE_REFRESH_PROGRESS , DATABASE_REFRESH_PROGRESS_BY_JOB (im Snowflake Information Schema) ab.

Eine Datenbankaktualisierungsoperation kann je nach zu replizierender Datenmenge mehrere Stunden oder länger dauern.

Rufen Sie eine der beiden folgenden Funktionen ab, um den Replikationsverlauf für eine angegebene Datenbank innerhalb eines angegebenen Datumsbereichs anzuzeigen:

Beispiel

Überwachen Sie den Fortschritt der Aktualisierung der sekundären Datenbank mydb1:

select *
  from table(information_schema.database_refresh_progress(mydb1));
Copy

Überwachen des Fortschritts einer Datenbankaktualisierung über die klassische Konsole

Starten Sie manuell über die klassische Weboberfläche die Aktualisierung der Sekundärdatenbank, um einen dynamischen Fortschrittsbalken anzuzeigen, der den aktuellen Status der Aktualisierungsoperation mit Statistiken anzeigt.

So starten Sie die Aktualisierungsoperation für eine sekundäre Datenbank:

  1. Klicken Sie auf der klassischen Weboberfläche auf die Registerkarte Databases Databases tab » Replication.

  2. Wählen Sie die zu aktualisierende sekundäre Datenbank aus.

  3. Klicken Sie auf die Schaltfläche Refresh now. Das Dialogfenster Refresh Database wird geöffnet.

  4. Klicken Sie auf die Schaltfläche Refresh.

In der Spalte Last Refresh Status wird der Status der aktuellen Aktualisierungsoperation angezeigt. Der Fortschrittsbalken wird dynamisch aktualisiert.

Die Refresh History-Statistik im Seitenfenster zeigt auch den aktuellen Aktualisierungsstatus zusammen mit der Aktualisierungsstartzeit, der Anzahl der übertragenen Bytes und anderen Statistiken an.

Secondary refresh operation in the Classic Console

Anzeigen des Verlaufs der Datenbankaktualisierung

Fragen Sie die Tabellenfunktion DATABASE_REFRESH_HISTORY (im Snowflake Information Schema) ab, um den Verlauf der Aktualisierungsoperationen der sekundären Datenbank anzuzeigen. Diese Funktion gibt die Datenbankaktualisierungsaktivitäten der letzten 14 Tage zurück.

oder

Fragen Sie die Ansicht DATABASE_REPLICATION_USAGE_HISTORY (im Schema Account Usage der freigegebenen Snowflake-Datenbank) ab. Diese Ansicht gibt die Nutzung durch die Datenbankreplikation der letzten 365 Tage (1 Jahr) zurück.

Beispiel

Zeigen Sie den Verlauf der Aktualisierungsoperation der sekundären Datenbank mydb1 an:

select *
  from table(information_schema.database_refresh_history(mydb1));
Copy

Vergleichen von Datasets in primären und sekundären Datenbanken

Verwenden Sie optional die Funktion HASH_AGG, um die Zeilen in einer zufälligen Menge von Tabellen einer primären und sekundären Datenbank zu vergleichen und die Datenkonsistenz zu überprüfen. Die HASH_AGG-Funktion gibt einen aggregierten, signierten 64-Bit-Hash-Wert für die (ungeordnete) Menge von Eingabezeilen zurück. Fragen Sie diese Funktion für alle oder eine zufällige Teilmenge von Tabellen einer sekundären Datenbank und in der primären Datenbank ab (ab dem Zeitstempel des Snapshots der primären Datenbank), und vergleichen Sie die Ausgabe.

Beispiel

Ausgeführt auf der Sekundärdatenbank

  1. Fragen Sie auf der Sekundärdatenbank die Tabellenfunktion DATABASE_REFRESH_PROGRESS ab (im Snowflake Information Schema). Beachten Sie den snapshot_transaction_timestamp in der Spalte DETAILS für die Phase PRIMARY_UPLOADING_DATA. Dies ist der Zeitstempel für den neuesten Snapshot der Primärdatenbank.

    select parse_json(details)['snapshot_transaction_timestamp']
    from table(information_schema.database_refresh_progress(mydb))
    where phase_name = 'PRIMARY_UPLOADING_DATA';
    
    Copy
  2. Fragen Sie die Funktion HASH_AGG für eine angegebene Tabelle ab. Die folgende Abfrage gibt einen Hashwert für alle Zeilen der Tabelle mytable zurück:

    SELECT HASH_AGG( * ) FROM mytable;
    
    Copy

Ausgeführt auf der Primärdatenbank

  1. Fragen Sie in der Primärdatenbank auf derselben Tabelle die Funktion HASH_AGG ab. Geben Sie mithilfe von Time Travel den Zeitstempel an, zu dem der letzte Snapshot der sekundären Datenbank erstellt wurde:

    SELECT HASH_AGG( * ) FROM mytable AT(TIMESTAMP => '<snapshot_transaction_timestamp>'::TIMESTAMP);
    
    Copy
  2. Vergleichen Sie die Ergebnisse der beiden Abfragen. Die Ausgabe sollte identisch sein.

Löschen einer sekundären Datenbank

Sie können eine sekundäre Datenbank jederzeit mit dem Befehl DROP DATABASE löschen. Nur der Datenbankeigentümer (d. h. die Rolle mit der Berechtigung OWNERSHIP für die Datenbank) kann die Datenbank löschen.

Löschen einer primären Datenbank

Eine primäre Datenbank kann nicht gelöscht werden, wenn eine oder mehrere Replikate dieser Datenbank (d. h. sekundäre Datenbanken) vorhanden sind. Um die Primärdatenbank zu löschen, müssen Sie zuerst eine Sekundärdatenbank zur Primärdatenbank heraufstufen, erst danach können Sie die bisherige Primärdatenbank löschen. Löschen Sie alternativ alle sekundären Datenbanken der primären Datenbank, und löschen Sie dann die primäre Datenbank.

Beachten Sie, dass nur der Datenbankeigentümer die Datenbank löschen kann.