Ausfallsicherheit an mehreren Standorten für Datenpipelines

Die Ausfallsicherheit an mehreren Standorten für Datenpipelines hilft Ihnen, Ihre Datenpipelines vor möglichen regionsweiten Ausfällen von Cloudanbietern zu schützen. Dieses Feature stellt sicher, dass bei einem Failover auf einen sekundären Speicherort Ihre Datenpipelines (insbesondere solche, die Snowpipe und COPY INTO verwenden) das Laden neuer Daten ohne Unterbrechung oder doppelte Datenaufnahme fortsetzen.

Dieses Feature funktioniert cloudübergreifend, sodass sich Ihre primären Speicherorte und Backup-Speicherorte über völlig unterschiedliche Cloudanbieter erstrecken können (z. B. Failover von AWS zu Azure) sowie regionsübergreifend innerhalb derselben Cloud.

Dieses Feature basiert auf einem Modell der gemeinsamen Verantwortung:

  • Snowflake-Rolle: Snowflake repliziert nativ Ihre Zieltabellen und den Ladeverlauf (Datenaufnahmestatus) auf Ihr sekundäres Konto. Während eines Failovers verwendet Snowflake diesen Status, um Duplikate zu verhindern und nur Dateien zu erfassen, die nicht am primären Speicherort verarbeitet wurden.

  • Ihre Rolle: Im Falle eines Ausfalls (oder als Teil einer Einrichtung einer dualen Schreib-Cloud) müssen Sie neu eingehende Dateien an Ihren sekundären Cloudspeicherort weiterleiten. Snowflake repliziert nicht Ihre externen Cloudspeicherdateien.

Die Ausfallsicherheit von Pipelines wird durch die Konfiguration von bis zu zwei wichtigen Ressourcen unterstützt:

  • Integration mit mehreren Speicherorten (MLSI, Multi-Location Storage Integration): Verbindet Snowflake sicher mit mehreren externen Cloudspeicherorten in Regionen oder Clouds. MLSI wird benötigt, wenn Sie Ausfallsicherheit für COPY INTO von externen Stagingbereichen allein oder für Ihre Snowpipe-Pipeline wünschen.

  • Integration von Benachrichtigungen für mehrere Warteschlangen (MQNI, Multi-Queue Notification Integration): Verbindet Snowflake mit mehreren Cloud-Meldungswarteschlangen von Drittanbietern und stellt so den kontinuierlichen Empfang von neuen Dateibenachrichtigungen sicher. MQNI wird nur benötigt, wenn Sie eine Ausfallsicherheit für Ihre Snowpipe-Pipeline wünschen, d. h. für das kontinuierliche Laden von Daten.

Architektur der Ausfallsicherheit an mehreren Standorten für Datenpipelines

Anforderungen und Hinweise

Bevor Sie dieses Feature konfigurieren, sollten Sie die folgenden Voraussetzungen und Hinweise überprüfen:

Anforderungen

  • Edition: Snowflake Business Critical Edition (oder höher).

  • Unterstützte Datenaufnahmemethoden: Dieses Feature unterstützt ausschließlich das dateibasierte Laden von Daten über Snowpipe (automatische Datenaufnahme) und COPY INTO <table>. Openflow oder Snowpipe Streaming wird nicht unterstützt.

  • Identische Pfadstrukturen: Damit Ihre Pipelines nach dem Failover neue Dateien finden können, müssen Sie diese Dateien mit derselben Hierarchie, Ordnerstruktur und demselben relativen Pfad wie Ihr primärer Speicherort in den sekundären Speicherort schreiben.

Hinweise

  • Abrechnung: Für dieses Feature fallen Standardreplikationsgebühren (Datentransfer und Computeressourcen) an, die Ihrem Zielkonto in Rechnung gestellt werden.

  • Ausfallzeit der Stagingbereichsänderung: Durch die Änderung derRELATIVE_URL-Eigenschaft in einem vorhandenen Stagingbereich werden abhängige Objekte ungültig gemacht und die Erfassung angehalten. Wir empfehlen, während der Einrichtung neue Stagingbereiche zu erstellen, um Ausfallzeiten zu vermeiden.

  • Integration von Benachrichtigungen für mehrere Warteschlangen (MQNI): Die Verwendung derselben aktiven Warteschlange sowohl in Quell- als auch in Zielkonten wird nicht unterstützt. Dies kann zu einem Verlust von Benachrichtigungen führen. Snowflake prüft nicht, ob von mehreren Konten dieselbe Warteschlange verwendet wird.

  • Verzeichnistabelle: Das Erstellen einer Verzeichnistabelle in einem Stagingbereich mithilfe von MLSI wird derzeit nicht unterstützt.

Replikationsverhalten

  • Asynchrone Replikation: Snowflake repliziert Ihre Tabellen und den Ladeverlauf Ihrer Pipeline zusammen in exakt demselben Snapshot. Da sie synchronisiert sind, führt ein Ausfall nicht zu duplizierten Daten. Wenn Ihre Sekundärdatenbank vier Stunden im Rückstand ist, liegen auch die Tabellendaten vier Stunden zurück, und die Verarbeitung von vier Stunden an in der Warteschlange befindlichen Benachrichtigungen bringt einfach die Tabelle auf den neuesten Stand.

  • Vermeiden von Datenverlusten durch doppeltes Schreiben: Ihr Wiederherstellungspunkt-Objekt (RPO, Recovery Point Objective) wird durch Ihr Aktualisierungsintervall für die Replikation bestimmt. Um Datenverluste während eines Failovers zu vermeiden, muss die Nachrichtenaufbewahrungsfrist Ihrer sekundären Cloud-Meldungswarteschlange länger sein als Ihr Replikationsintervall. Wenn Ihre Warteschlange Meldungen löscht, bevor Ihre geplante Replikation nachgeholt hat, werden diese Dateien beim Failover nicht erfasst.

  • ** Risiko für Datenverlust bei einzelnem Schreiben:** Wenn Sie das Routing mit einzelnem Schreiben verwenden, sind alle Dateien, die nach Ihrer letzten erfolgreichen Replikation am primären Speicherort verarbeitet werden, dem sekundären Speicherort vollständig unbekannt. Beim Failover fehlen diese Daten vorübergehend in Ihrem Zielkonto.

Warnung

Kritische Warnung bei Failback mit einzelnem Schreiben: Wenn Sie eine Aktualisierung ausführen, um ein Failback auf Ihr ursprüngliches Primärkonto auszuführen, wird die Primärdatenbank durch die Sekundärdatenbank überschrieben. Wenn Sie diese verwaisten Dateien vor dem Synchronisieren nicht manuell abstimmen und in Ihre Sekundärdatenbank laden, werden sie dauerhaft aus Ihrer Primärdatenbank gelöscht.

Auswählen der passenden Architektur

Da Snowflake Ihre Zieltabellen und den Ladeverlauf Ihrer Pipeline asynchron in demselben Snapshot repliziert, sind Ihre Pipelines vor Datenkopien und Teilladungen geschützt. Wenn mitten in der Datenaufnahme ein Ausfall auftritt, wird die Transaktion vollständig zurückgesetzt, sodass keine teilweise geladenen Dateien vorhanden sind.

Wie Sie jedoch Dateien wiederherstellen können, die während eines Ausfalls gerade ausgeführt werden, hängt ganz und gar davon ab, ob Ihr externes Cloudspeicher-Routing für doppelte Schreibvorgänge oder Routing mit einzelnem Schreiben konfiguriert ist.

2. Routing mit einzelnem Schreiben

Ihr Ersteller schreibt nur in den primären Cloudspeicher. Bei einem Ausfall leiten Sie den Ersteller um, um mit dem Schreiben neuer Dateien in den sekundären Cloudspeicher zu beginnen.

  • Was beim Failover passiert: Das sekundäre Konto beginnt sofort mit der Verarbeitung neuer Dateien, die an den sekundären Bucket weitergeleitet werden. Alle Dateien, die am betroffenen Primärspeicherort ausgeführt werden und eingeschlossen sind, bleiben jedoch vorübergehend zurück.

  • Was beim Failback passiert: Wenn der primäre Speicherort wiederhergestellt ist und Sie ein Failback für Ihr primäres Snowflake-Konto ausführen, verarbeitet Snowpipe automatisch alle Dateibenachrichtigungen, die vor dem Ausfall erfolgreich die Warteschlange erreicht haben.

  • Ergebnis: Keine Duplikate. Alle Dateien, bei denen die Cloudbenachrichtigung aufgrund des Ausfalls jedoch nicht vollständig generiert werden konnte (oder der Ausfall die Richtlinien zur Nachrichtenaufbewahrung Ihrer Warteschlange überschritten hat), erfordern ein manuelles Eingreifen.

  • Erforderliche Aktion: Vergleichen Sie nach dem Failback Ihren primären Speicher-Bucket mit der COPY_HISTORY-Ansicht in Snowflake, um fehlende Dateien zu identifizieren. Führen Sie ALTER PIPE … REFRESH oder einen manuellen COPY INTO-Befehl aus, um diese spezifischen übrig gebliebenen Dateien zu laden.

Teil 1: Einmalige Konfiguration (Einrichtung)

Die folgenden Schritte werden einmalig ausgeführt, um Ihre widerstandsfähigen Datenpipelines zu konfigurieren. Da Sie die aktiven Speicherorte für beide Konten während der Einrichtung konfigurieren, ist das Failover während eines tatsächlichen Ausfalls fast unmittelbar.

Schritt 1: Speicherintegration mit mehreren Speicherorten (MLSI) erstellen

Um eine Speicherintegration mit mehreren Speicherorten zu konfigurieren, folgen Sie den Standardschritten für die Konfiguration einer Speicherintegration mit ein paar Unterschieden, die in diesem Abschnitt beschrieben werden.

Erstellen Sie in Ihrem Quellkonto die MLSI, indem Sie Werte für jeden Speicherort in der STORAGE_LOCATIONS-Liste angeben. Sie können Cloudanbieter für Cloud-übergreifende Einrichtungen mischen.

CREATE STORAGE INTEGRATION my_mlsi
  TYPE = EXTERNAL_STAGE
  STORAGE_LOCATIONS =
  (
    (
      NAME = 'my-s3-us-west-1'
      STORAGE_PROVIDER = 'S3'
      STORAGE_BASE_URL = 's3://myBucketWest'
      STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::12345:role/myrole'
      STORAGE_AWS_EXTERNAL_ID = 'mlsi-external-id'
      ENCRYPTION = ( TYPE = 'AWS_SSE_S3' )
    ),
    (
      NAME = 'my-s3-us-east-1'
      STORAGE_PROVIDER = 'S3'
      STORAGE_BASE_URL = 's3://myBucketEast'
      STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::67890:role/myrole'
      STORAGE_AWS_EXTERNAL_ID = 'mlsi-external-id'
      ENCRYPTION = ( TYPE = 'AWS_SSE_S3' )
    )
  )
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('*')
  ACTIVE = 'my-s3-us-west-1';

Wobei:

  • STORAGE_LOCATIONS: Gibt eine Liste von einem oder mehreren Speicherorten (S3-Bucket, GCS-Bucket oder Azure-Container) für die Speicherintegration an. Informationen zum Anzeigen der Parameter für jeden Cloudanbieter finden Sie unter Cloudanbieterparameter (cloudProviderParams) auf der CREATE STORAGE INTEGRATION-Referenzseite.

  • NAME: Zeichenfolge, die den Bezeichner (Name) für den Speicherort angibt.

  • ENCRYPTION: Gibt die Verschlüsselung für den Speicherort an. Sie müssen die Verschlüsselung für den Speicherort auf der Ebene der Speicherintegration angeben und nicht auf der Ebene des Stagingbereichs. Nur erforderlich zum Laden aus verschlüsselten Dateien; nicht erforderlich, wenn der Speicherort und die Dateien unverschlüsselt sind. Informationen zum Anzeigen der Verschlüsselungsoptionen für jeden Cloudanbieter finden Sie unter ENCRYPTION auf der CREATE STAGE-Referenzseite.

  • ACTIVE: Gibt den Namen des Speicherorts an, der als aktiver Speicherort für die Speicherintegration im aktuellen Konto festgelegt werden soll.

    Für den aktiven Speicherort in Ihrem Quellkonto müssen Sie die Zugriffssteuerung einrichten und Snowflake die Berechtigung zum Zugriff auf Ihren Speicher erteilen. Verwenden Sie die Anweisungen in den folgenden Themen:

Schritt 2: MLSI mit einem externen Stagingbereich verknüpfen

Es wird dringend empfohlen, einen neuen Stagingbereich zu erstellen, anstatt einen bestehenden Stagingbereich zu ändern.

Warnung

WARNING: Das Ändern der RELATIVE_URL verursacht Ausfallzeiten

Wenn Sie ALTER STAGE verwenden, um die RELATIVE_URL eines bestehenden Stagingbereichs zu ändern, werden alle abhängigen Verzeichnistabellen neu erstellt, und alle externen Tabellen oder Pipes, die diesen Stagingbereich verwenden, werden als ungültig markiert und stellen die Erfassung ein. Bereiten Sie sich auf Ausfallzeiten vor, wenn Sie einen bestehenden Stagingbereich ändern möchten.

Verwenden Sie den Befehl CREATE STAGE, um die von Ihnen erstellte Speicherintegration mit mehreren Speicherorten mit einem oder mehreren externen Stagingbereichen zu verknüpfen:

CREATE STAGE my_ext_stage
  RELATIVE_URL = '/my_folder/my_sub_folder/'
  STORAGE_INTEGRATION = 'my_mlsi';

Wobei:

  • RELATIVE_URL: Der relative Pfad zu Ihrem Speicherort des externen Stagingbereichs von dem in Ihrer Speicherintegration definierten Speicherort. Damit Ihre Pipelines nach dem Failover neue Dateien finden können, müssen Sie diese Dateien mit derselben Hierarchie, Ordnerstruktur und demselben relativen Pfad wie Ihr primärer Speicherort in den sekundären Speicherort schreiben.

Bemerkung

Dieser Wert muss ein literaler Pfad sein. Die Angabe eines Musters oder eines Platzhalters wird nicht unterstützt. Um den Zugriff auf alle Speicherorte unter der STORAGE_BASE_URL Ihrer Speicherintegration festzulegen, verwenden Sie eine leere Zeichenfolgen-RELATIVE_URL = ‚‘.

  • STORAGE_INTEGRATION: Der Name Ihrer Speicherintegration für mehrere Speicherorte.

Bemerkung

Alternativ können Sie einen bestehenden externen Stagingbereich ändern, indem Sie den RELATIVE_URL-Parameter und Ihre MLSI angeben. Der Befehl ALTER STAGE unterstützt auch das Rollback dieser Änderung, sodass der externe Stagingbereich keine Speicherintegration mit mehreren Speicherorten verwendet.

Beispiel:

ALTER STAGE my_ext_stage SET
  RELATIVE_URL = '/my_folder/my_sub_folder/'
  STORAGE_INTEGRATION = 'my_mlsi';

Schritt 3: Eine Benachrichtigungsintegration für mehrere Warteschlangen konfigurieren (MQNI)

Wenn Sie das automatisierte Laden von Daten über Cloudmessaging verwenden und eine Speicherintegration mit mehreren Speicherorten für Ihren externen Stagingbereich konfiguriert haben, müssen Sie auch eine Benachrichtigungsintegration für mehrere Warteschlangen für ein nahtloses Failover Ihrer Snowpipe-Pipelines verwenden.

Für jede Warteschlange, die Sie für die Benachrichtigungsintegration definieren, müssen Sie Ihren Messagingdienst mithilfe der Schritte unter folgenden Themen vorbereiten:

Bemerkung

Wenn Sie nicht Amazon SNS mit Snowpipe verwenden möchten, können Sie das Erstellen einer MQNI vermeiden, aber Sie müssen während des Failovers einen zusätzlichen Schritt ausführen. Wenn Sie diese Option wählen, verknüpfen Sie Ihre Pipe mit dem Stagingbereich und der oben erstellten MLSI, und fahren Sie dann mit Schritt 4 fort.

Szenario A: Eine neue Benachrichtigungsintegration für mehrere Warteschlangen (MQNI) erstellen

Um eine Benachrichtigungsintegration für mehrere Warteschlangen zu erstellen, folgen Sie den Standardschritten zum Erstellen einer Benachrichtigungsintegration mit ein paar Unterschieden, die in diesem Abschnitt beschrieben werden.

Erstellen Sie in Ihrem Quellkonto eine Benachrichtigungsintegration für mehrere Warteschlangen, indem Sie Werte für jede Warteschlange in der QUEUES-Liste angeben:

CREATE NOTIFICATION INTEGRATION my_mqni
  ENABLED = TRUE
  TYPE = MULTI_QUEUE
  DIRECTION = INBOUND
  QUEUES = (
    (
      NAME = 'my-us-west-1'
      NOTIFICATION_PROVIDER = AWS_SNS
      AWS_SNS_TOPIC_ARN = 'arn:aws:sns:us-west-1:12345:my-snowpipe-mlsi-west'
    ),
    (
      NAME = 'my-us-east-1'
      NOTIFICATION_PROVIDER = AWS_SNS
      AWS_SNS_TOPIC_ARN = 'arn:aws:sns:us-west-1:12345:my-snowpipe-mlsi-east'
    )
  )
  ACTIVE = 'my-us-west-1';

Wobei:

  • TYPE = MULTI_QUEUE: Gibt an, dass es sich hierbei um eine Integration für mehrere Warteschlangen zwischen Snowflake und einem Cloud-Nachrichtenwarteschlangen-Dienst eines Drittanbieters handelt.

  • DIRECTION = INBOUND: Gibt an, dass Snowflake die vom Cloudmessagingdienst gesendeten Benachrichtigungen empfängt.

  • QUEUES: Gibt eine Liste von einer oder mehreren Warteschlangen für die Benachrichtigungsintegration an.

  • NAME: Zeichenfolge, die den Bezeichner (Name) für die Warteschlange angibt.

Informationen zum Anzeigen der spezifischen Warteschlangenparameter jedes Cloudanbieters finden Sie unter:

Nachdem Sie eine MQNI erstellt haben, können Sie damit eine neue Pipe mit dem CREATE PIPE-Befehl erstellen. Im folgenden Beispiel wird eine Pipe erstellt, um Daten aus Amazon S3 in eine Tabelle zu laden, wobei ein externer Stagingbereich (my_ext_stage) verwendet wird, der von einer Speicherintegration mit mehreren Speicherorten abhängt:

CREATE PIPE my_pipe
  AUTO_INGEST = TRUE
  INTEGRATION = my_mqni
  AS COPY INTO my_table FROM @my_ext_stage/my_pipe/;

Szenario B: Eine bestehende Benachrichtigungsintegration nach MQNI migrieren

Wenn Sie bereits bestehende Benachrichtigungsintegrationen haben, die Sie in eine MQNI umwandeln möchten, anstatt eine neue von Grund auf zu erstellen, verwenden Sie die Funktion SYSTEM$CONVERT_PIPES_TO_MULTI_QUEUE.

Die Funktion erstellt eine neue Benachrichtigungsintegration für mehrere Warteschlangen unter dem von Ihnen angegebenen Namen, setzt die aktive Warteschlange für Ihr Quellkonto auf die ursprüngliche Warteschlange und migriert automatisch alle Pipes im Quellkonto, um die neue MQNI zu verwenden.

Syntax:

SYSTEM$CONVERT_PIPES_TO_MULTI_QUEUE(
  '<new_mqni_name>',
  '<original_sns_topic_arn_or_int_name>',
  '<new_sns_topic_arn_or_int_name>'
)

Wobei:

  • new_mqni_name: Zeichenfolge, die einen Bezeichner (Name) angibt, der der neuen Benachrichtigungsintegration für mehrere Warteschlangen zugewiesen werden soll, die von der Funktion erstellt wird.

  • original_sns_topic_arn_or_int_name:

    • Für AWS der Amazon Resource Name (ARN) des ursprünglichen SNS-Themas, das mit einer oder mehreren Pipes verbunden ist.

    • Für Google Cloud oder Azure eine Zeichenfolge, die den Bezeichner Ihrer ursprünglichen Benachrichtigungsintegration mit einer einzelnen Warteschlange angibt, die mit einer oder mehreren Pipes verbunden ist.

  • new_sns_topic_arn_or_int_name:

    • Für AWS der Amazon Resource Name (ARN) eines neuen SNS-Themas, das als Warteschlange zur MQNI hinzugefügt werden soll.

    • Für Google Cloud oder Azure eine Zeichenfolge, die den Bezeichner Ihrer neuen Benachrichtigungsintegration mit einer einzelnen Warteschlange angibt, die mit der ursprünglichen Benachrichtigungsintegration kombiniert werden soll.

Beispiel 1: Hinzufügen einer neuen SNS-Themenwarteschlange

SELECT SYSTEM$CONVERT_PIPES_TO_MULTI_QUEUE(
  'my_mqni',
  'arn:aws:sns:us-west-1:12345:my-snowpipe-mlsi-west',
  'arn:aws:sns:us-east-1:67890:my-snowpipe-mlsi-east'
);

Dies führt zu einer MQNI namens „my_mqni“ mit den folgenden Warteschlangen:

  • MY_MQNI-queue1 (für das ursprüngliche, aktive SNS-Thema)

  • MY_MQNI-queue2 (für das neue SNS-Thema)

Beispiel 2: Kombinieren von zwei Benachrichtigungsintegrationen in MQNI

SELECT SYSTEM$CONVERT_PIPES_TO_MULTI_QUEUE(
  'my_azure_mqni',
  'my_azure_ni_1',
  'my_azure_ni_2'
);

Dies führt zu einer MQNI namens „my_azure_mqni“ mit den folgenden Warteschlangen:

  • my_azure_ni_1 (für die ursprüngliche, aktive Warteschlange)

  • my_azure_ni_2 (für die neue Warteschlange)

Bemerkung

Wenn Sie die aktive Warteschlange in Ihrem Quellkonto ändern möchten, können Sie eine ALTER INTEGRATION … SET ACTIVE = ‚<my_queue>‘-Anweisung verwenden. Sie müssen alle Pipes anhalten, die die Benachrichtigungsintegration verwenden, bevor Sie die aktive Warteschlange aktualisieren.

Schritt 4: Ihre MLSI und MQNI auf das Zielkonto replizieren

Bemerkung

Bei einer Aktualisierungsoperation werden alle Speicher- oder Benachrichtigungsintegrationen im Zielkonto gelöscht, die keine Replikate sind, es sei denn, die Objekte haben globale IDs.

Weitere Informationen dazu finden Sie unter Replikation und Objekte in Zielkonten.

1. To replicate your multi-location storage integration and multi-queue notification integration, alter your existing replication or failover group to include STORAGE INTEGRATIONS and NOTIFICATION INTEGRATIONS in the ALLOWED_INTEGRATION_TYPES list.

Verwenden Sie zum Beispiel den Befehl ALTER FAILOVER GROUP:

ALTER FAILOVER GROUP my_fg SET
  OBJECT_TYPES = DATABASES, ROLES, INTEGRATIONS
  ALLOWED_INTEGRATION_TYPES = API INTEGRATIONS, STORAGE INTEGRATIONS,
    NOTIFICATION INTEGRATIONS;
  1. Führen Sie dann in Ihrem Zielkonto eine Aktualisierungsoperation aus:

ALTER FAILOVER GROUP my_fg REFRESH;

Schritt 5: Aktive Status im Zielkonto konfigurieren

Um nach der Aktualisierungsoperation ein nahtloses Failover während eines tatsächlichen Ausfalls sicherzustellen, konfigurieren Sie den aktiven Speicherort und die Warteschlange (bei Verwendung einer Benachrichtigungsintegration) in Ihrem Zielkonto.

In Ihrem Zielkonto:

  1. Für den Speicherort, den Sie als aktiven Speicherort in Ihrem Zielkonto festlegen möchten, verwenden Sie die Anweisungen unter folgenden Themen, um Snowflake Zugriff auf Ihren Speicher zu gewähren:

  2. Sekundärspeicher aktivieren: Stellen Sie die MLSI ein, um Ihren sekundären Backup-Speicherort im Zielkonto zu verwenden.

    ALTER STORAGE INTEGRATION my_mlsi SET ACTIVE = 'my-s3-us-east-1';
    
  3. Wenn Sie eine Benachrichtigungsintegration für mehrere Warteschlangen verwenden, erteilen Sie Snowflake die Berechtigung, auf Ihren Messagingdienst für die Warteschlange zuzugreifen, die Sie in Ihrem Zielkonto als aktiv einstellen möchten. Folgen Sie den Anweisungen für Ihren Cloudanbieter:

  4. Aktivieren Sie die sekundäre Warteschlange (bei Verwendung von MQNI): Setzen Sie die aktive Warteschlange auf Ihren sekundären Speicherort im Zielkonto.

    ALTER INTEGRATION my_mqni
      SET ACTIVE = 'MY_MQNI-queue2';
    

Teil 2: Schritte zum Failover

Führen Sie diese Schritte während eines Ausfalls aus, um Ihre Datenaufnahme an Ihren sekundären Speicherort umzuleiten. Da Ihre aktiven Warteschlangen und Speicherungen im Setup vorkonfiguriert wurden, erfordert dieser Prozess nur minimale Befehle.

  1. Heraufstufen des Zielkontos: Melden Sie sich bei Ihrem Zielkonto an, und stufen Sie es zum neuen Primärkonto herauf. Das Laden von Daten wird automatisch von Ihrer sekundären Cloudinfrastruktur fortgesetzt.

    ALTER FAILOVER GROUP my_fg PRIMARY;
    
  2. Wenn Sie Amazon SNS nicht mit Snowpipe verwenden: Wenn Sie SNS nicht mit Snowpipe verwenden und sich nur auf SQS verlassen, müssen Sie keine MQNI erstellen. Rufen Sie stattdessen die folgende Systemfunktion auf, um Ihre Pipe während des Failovers neu zu binden.

    SELECT SYSTEM$INGEST_REBIND_PIPE('my_db.my_schema.my_pipe');
    

Teil 3: Schritte zum Failback

Sobald der Ausfall behoben ist und Ihr primärer Speicherort funktionsfähig ist, führen Sie diese Schritte aus, um Ihre Pipelines zurück an den primären Speicherort zu verschieben.

  1. Daten zurück synchronisieren: Bevor Sie Ihr ursprüngliches Konto heraufstufen können, müssen Sie alle Daten- und Statusänderungen, die während des Ausfalls aufgetreten sind, auf Ihr ursprüngliches Konto zurückziehen. Melden Sie sich bei Ihrem ursprünglichen Primärkonto an (das derzeit als Sekundärkonto dient), und starten Sie eine manuelle Aktualisierung:

    ALTER FAILOVER GROUP my_fg REFRESH;
    

    Wichtig

    Warten Sie, bis diese Aktualisierungsoperation vollständig abgeschlossen ist, bevor Sie mit dem nächsten Schritt fortfahren. Ein Failover, bevor die Synchronisierung abgeschlossen ist, kann zu Datenverlust führen.

    Warnung

    Kritische Warnung bei Failback mit einzelnem Schreiben: Wenn Sie das Routing mit einzelnem Schreiben verwenden, sind alle Dateien, die nach Ihrer letzten erfolgreichen Replikation am primären Speicherort verarbeitet werden, dem sekundären Speicherort unbekannt. Beim Failover fehlen diese Daten vorübergehend in Ihrem Zielkonto. Wenn Sie eine Aktualisierung ausführen, um ein Failback auf Ihr ursprüngliches Primärkonto auszuführen, wird die Primärdatenbank durch die Sekundärdatenbank überschrieben. Wenn Sie diese verwaisten Dateien vor dem Synchronisieren nicht manuell abstimmen und in Ihre Sekundärdatenbank laden, werden sie dauerhaft aus Ihrer Primärdatenbank gelöscht.

  2. Heraufstufen des ursprünglichen Kontos: Sobald die Aktualisierung abgeschlossen ist, stufen Sie Ihr ursprüngliches Quellkonto wieder zum primären Konto herauf.

    ALTER FAILOVER GROUP my_fg PRIMARY;
    
  3. Wenn Sie Amazon SNS nicht mit Snowpipe verwenden: Rufen Sie die Systemfunktion auf, um Ihre Pipe wieder an den ursprünglichen Quellspeicherort zu binden.

    SELECT SYSTEM$INGEST_REBIND_PIPE('my_db.my_schema.my_pipe');
    

Teil 4: Überwachung und Validierung

Verwenden Sie nach dem Einleiten eines Failovers oder Failbacks die folgenden Befehle, um zu überprüfen, ob Ihre Datenpipelines erfolgreich umgeleitet wurden und die Datenaufnahme fortgesetzt wurde.

1. Aktive Integrationsstatus verifizieren

Vergewissern Sie sich, dass Ihre Integrationen auf den richtigen Speicher und die richtigen Warteschlangen verweisen, indem Sie deren Eigenschaften überprüfen. Suchen Sie nach der ACTIVE-Eigenschaft in der Ausgabe:

-- Check the active storage location
DESCRIBE STORAGE INTEGRATION my_mlsi;

-- Check the active message queue
DESCRIBE INTEGRATION my_mqni;

2. Pipestatus überprüfen (nur Snowpipe)

Verwenden Sie die Funktion SYSTEM$PIPE_STATUS, um sicherzustellen, dass Ihre Pipe ausgeführt wird, und um zu prüfen, ob sie aktiv neue Dateien von Ihrem sekundären Speicherort in die Warteschlange stellt.

SELECT SYSTEM$PIPE_STATUS('my_pipe');

Suchen Sie nach „executionState“:“RUNNING“, und überprüfen Sie „pendingFileCount“, um zu bestätigen, dass es aktiv neue Dateien erkennt, die in Ihrem sekundären Bucket abgelegt werden.

3. Erfolgreiche Datenaufnahme validieren (Ladeverlauf)

Um sicherzustellen, dass die Daten ohne Fehler oder Duplikate geladen werden, fragen Sie die COPY_HISTORY-Ansicht ab. Dies zeigt genau, welche Dateien aufgenommen wurden, ihren Quellpfad und wann sie geladen wurden.

SELECT file_name, status, row_count, last_load_time
FROM TABLE(information_schema.copy_history(
  table_name => 'my_table',
  start_time => DATEADD(hours, -1, CURRENT_TIMESTAMP())
));

Überprüfen Sie, ob die file_name-Pfade Ihren aktiven Speicherort angeben und der Status als LOADED angezeigt wird.