Hinweise zur Datenbankreplikation

Unter diesem Thema wird das Verhalten bestimmter Snowflake-Features in Sekundärdatenbanken bei Verwendung der Datenbankreplikation erläutert. Weitere Hinweise zur Verwendung replizierter Objekte und Daten finden Sie unter Hinweise zur Replikation.

Bemerkung

Snowflake empfiehlt die Verwendung des Features Einführung in Replikation und Failover über mehrere Konten 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 über mehrere Konten.

Unter diesem Thema:

Datenbankreplikation und Sicherheitsobjekte

In diesem Abschnitt wird das Verhalten der Datenbankreplikation von Sicherheitsrichtlinien und Geheimnissen beschrieben.

Richtlinien für Maskierung und Zeilenzugriff

Die Replikationsoperation schlägt fehl, wenn eine der folgenden Bedingungen erfüllt ist:

  • Die Primärdatenbank befindet sich in einem Enterprise-Konto (oder höher) und enthält eine Richtlinie bzw. ein Tag, aber mindestens eines der zur Replikation genehmigten Konten weist eine niedrigere Edition auf.

  • Ein in der Primärdatenbank enthaltenes Objekt hat eine verwaiste Referenz auf ein Tag in einer anderen Datenbank.

Das Verhalten von verwaisten Referenzen bei der Datenbankreplikation kann umgangen werden, wenn mehrere Datenbanken in einer Replikations- oder Failover-Gruppen repliziert werden.

Tag-basierte Maskierungsrichtlinien

Die Replikationsoperation schlägt fehl, wenn eine der folgenden Bedingungen erfüllt ist:

  • Die Primärdatenbank befindet sich in einem Enterprise-Konto (oder höher) und enthält eine Richtlinie bzw. ein Tag, aber mindestens eines der zur Replikation genehmigten Konten weist eine niedrigere Edition auf.

  • Ein in der Primärdatenbank enthaltenes Objekt hat eine verwaiste Referenz auf ein Tag in einer anderen Datenbank.

Weitere Informationen zu Tag-basierten Maskierungsrichtlinien finden Sie unter Tag-basierte Maskierungsrichtlinien.

Kennwort und Sitzungsrichtlinien

Die Replikationsoperation schlägt fehl, wenn eine der folgenden Bedingungen erfüllt ist:

  • Die Primärdatenbank befindet sich in einem Enterprise-Konto (oder höher) und enthält eine Richtlinie, aber mindestens eines der zur Replikation genehmigten Konten befindet sich in einer niedrigeren Edition.

  • Jedes dieser in der Primärdatenbank enthaltenen Objekte ist mit einem Benutzer desselben Kontos verbunden. In diesem Fall sorgt Snowflake für das Fehlschlagen der Replikationsoperation.

Um das Fehlschlagen einer Datenbankreplikationsoperation aufgrund eines Verweises auf einen Benutzer zu vermeiden, verwenden Sie stattdessen eine Replikations- oder Failover-Gruppe.

Weitere Informationen dazu finden Sie unter Replikation und Sicherheitsrichtlinien.

Geheimnisse

Sie können ein Geheimnis nicht über die Datenbankreplikation replizieren. Verwenden Sie eine Replikations- oder Failover-Gruppe, um ein Geheimnis zu replizieren. Weitere Details dazu finden Sie unter Replikation und Geheimnisse.

Verwaiste Referenzen

Verweise auf Objekte in einer anderen Datenbank

Analysieren Sie sorgfältig, ob Ansichten oder Tabelleneinschränkungen einer Primärdatenbank auf Objekte einer anderen Datenbank verweisen. Für Datenbankobjekte können Sie Objektabhängigkeiten in der Account Usage-Ansicht OBJECT_DEPENDENCIES anzeigen.

In der folgenden Tabelle wird das Verhalten der Datenbankreplikation beschrieben, wenn ein Objekt (das referenzierende Objekt) in einer Datenbank auf ein Objekt in einer anderen Datenbank (das referenzierte Objekt) verweist:

Referenzierendes Objekt

Referenziertes Objekt

Replikationsverhalten

Nicht materialisierte Ansicht

Objekt

Erfolgreich

Materialisierte Ansicht

Objekt

Fehler

Materialisierte Ansicht

Gelöschtes Objekt

Fehler

Fremdschlüsseleinschränkung

Primärschlüssel

Fehler

Tabelle

Sequenz

Fehler

Maskierungsrichtlinie, Zeilenzugriffsrichtlinie oder Tag

Richtlinie/Tag wird Objekt zugewiesen

Fehler

Stream

Objekt

Fehler

Nicht materialisierte Ansichten

Nicht materialisierte Ansichten, die auf ein Objekt in einer anderen Datenbank verweisen (z. B. Tabellenspalten, andere Ansichten, UDFs oder Stagingbereiche), können repliziert werden, da diese Art von Referenz auf Namen basiert. Namensbasierte Verweise führen nicht zum Fehlschlagen der Replikation. Abfragen auf Ansichten sekundärer Datenbanken schlagen jedoch fehl, wenn die anderen Datenbanken nicht in derselben Region repliziert werden.

Angenommen, die Ansicht v1 in der Datenbank d1 verweist auf die Tabellen t1 und t2 in den Datenbanken d1 bzw. d2. Um die Ansicht v1 der Sekundärdatenbank d1 erfolgreich abzufragen, muss auch die Sekundärdatenbank d2 im Konto vorhanden sein (z. B. als eine weitere Sekundärdatenbank). Außerdem müssen für konsistente Abfrageergebnisse auf den Primärdatenbanken die Sekundärdatenbanken d1 und d2 gleichzeitig aktualisiert werden.

Materialisierte Ansichten

Verwaiste Referenzen in materialisierten Ansichten können dazu führen, dass die Replikation mit der folgenden Fehlermeldung fehlschlägt:

Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing (referred entity <- [referring entities])
Copy

Diese verwaisten Referenzen können in folgenden Fällen auftreten:

  • Eine materialisierte Ansicht verweist auf ein beliebiges Objekt in einer anderen Datenbank.

    Materialisierte Ansichten verweisen auf Objekte mittels ID und nicht mittels Namen. Ein Datenbank-Snapshot kann keine ID-basierten Verweise auf Objekte außerhalb der Datenbank auflösen.

    Um diese Einschränkung zu umgehen, replizieren Sie beide Datenbanken zusammen in der gleichen Replikations- oder Failover-Gruppe. Alternativ dazu können Sie materialisierte Ansichten und die Objekte, auf die sie verweisen, in derselben Datenbank speichern.

  • Eine materialisierte Ansicht ist ungültig (d. h. sie verweist auf ein gelöschtes Objekt).

    Um einen durch eine verwaiste Referenz verursachten Fehler für ungültige materialisierte Ansichten zu vermeiden, identifizieren und beheben Sie das Problem mit der materialisierten Ansicht. Weitere Informationen dazu finden Sie im Abschnitt Problembehandlung des Themas „Materialisierte Ansichten“.

Einschränkungen

Derzeit führen verwaiste Fremdschlüssel zum Fehlschlagen der Replikation mit folgender Fehlermeldung:

Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing
(referredentity <- [referring entities])
Copy

Diese Situation tritt auf, wenn ein Fremdschlüssel in der Primärdatenbank auf einen Primärschlüssel in einer anderen Datenbank verweist oder umgekehrt. Dies liegt daran, dass Verweise auf Nebenbedingungen ID-basiert sind. Ein Datenbank-Snapshot kann keine ID-basierten Verweise auf Objekte außerhalb der Datenbank auflösen.

Um die Fremdschlüsselreferenzen in Ihrem Konto anzuzeigen, fragen Sie die Information Schema-TABLE_CONSTRAINTS-Ansicht oder die Account Usage-TABLE_CONSTRAINTS-Ansicht ab.

Um diese Einschränkung zu umgehen, replizieren Sie beide Datenbanken zusammen in der gleichen Replikations- oder Failover-Gruppe. Alternativ dazu können Sie verknüpfte Tabellen in derselben Datenbank speichern.

Sequenzen

Derzeit führen verwaiste Sequenzen zum Fehlschlagen der Replikation mit folgender Fehlermeldung:

Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing
(referred entity <- [referring entities])
Copy

Diese Situation tritt auf, wenn eine Tabelle in einer Primärdatenbank auf eine Sequenz in einer anderen Datenbank verweist. Das liegt daran, dass die Sequenzreferenzen auf ID basieren. Ein Datenbank-Snapshot kann keine ID-basierten Verweise auf Objekte außerhalb der Datenbank auflösen.

Um diese Einschränkung zu umgehen, replizieren Sie beide Datenbanken zusammen in der gleichen Replikations- oder Failover-Gruppe. Alternativ können Sie auch auf Sequenzen in derselben Datenbank verweisen.

Maskierungs- und Zeilenzugriffsrichtlinien und Tags

Die verwaiste Referenz einer Maskierungsrichtlinien, einer Zeilenzugriffsrichtlinien oder eines Tags führt dazu, dass die Replikation mit der folgenden Fehlermeldung fehlschlägt:

Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing
(referred entity <- [referring entities])
Copy

Dies ist der Fall, wenn die Richtlinie bzw. das Tag und das Objekt, dem die Richtlinie bzw. das Tag zugewiesen ist, in unterschiedlichen Datenbanken vorhanden sind. Beispiel: Angenommen, es gibt eine Tabelle db1.s1.t1 und eine Zeilenzugriffsrichtlinie db2.s1.rap1 und die Zeilenzugriffsrichtlinie ist der Tabelle zugewiesen.

Um diese Einschränkung zu umgehen, replizieren Sie beide Datenbanken zusammen in der gleichen Replikations- oder Failover-Gruppe.

Referenzen auf gelöschte Objekte

Das Löschen eines Objekts, das von einem anderen Objekt in derselben oder einer anderen Datenbank referenziert wird, führt zu einer verwaisten Referenz. Wenn ein Objekt in der Primärdatenbank auf ein gelöschtes Objekt verweist, schlägt ein Replikationsvorgang mit folgender Fehlermeldung fehl:

Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing
(referred entity <- [referring entities])
Copy

Um diese Einschränkung zu umgehen, empfehlen wir Ihnen, eine der folgenden Aktionen auszuführen:

  • Löschen Sie alle referenzierten Objekte.

  • Modifizieren Sie die verweisenden Objekte (z. B. modifizieren Sie eine materialisierte Ansicht mit ALTER MATERIALIZED VIEW). Verweisen Sie entweder auf ein anderes Objekt, oder entfernen Sie den Verweis auf das gelöschte Objekt.

  • Löschen Sie alle Objekte in der primären Datenbank, die auf gelöschte Objekte verweisen.

Replikation von mehreren Datenbanken

Wenn mehrere Datenbanken repliziert werden, ist eine zeitliche Konsistenz zwischen den Datenbanken nicht verfügbar. Von jeder primären Datenbank wird unabhängig ein Snapshot erstellt, und Änderungen an der sekundären Datenbank werden unabhängig voneinander übertragen. Dies kann problematisch sein, wenn Sie Ansichten haben, die Tabellen in verschiedenen Datenbanken verknüpfen oder die von datenbankübergreifenden Transaktionen abhängen. So wird beispielsweise eine Transaktion, die zwei Primärdatenbanken atomar aktualisiert, möglicherweise nicht gleichzeitig in den Sekundärdatenbanken wiedergegeben.

Um mehrere Datenbanken mit zeitlicher Konsistenz zu replizieren, verwenden Sie eine Replikations- oder Failover-Gruppe.