Mit der Wiederherstellung zu einem bestimmten Zeitpunkt arbeiten

Auf dieser Seite wird beschrieben, wie Sie mit der Wiederherstellung zu einem bestimmten Zeitpunkt (PITR) Daten in Firestore mit MongoDB-Kompatibilität speichern und wiederherstellen.

Informationen zu PITR-Konzepten finden Sie unter Wiederherstellung zu einem bestimmten Zeitpunkt.

Berechtigungen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Cloud Datastore-Inhaber (roles/datastore.owner) für das Projekt zu gewähren, dessen PITR-Einstellungen Sie aktivieren möchten, um die Berechtigungen zu erhalten, die Sie zum Verwalten von PITR-Einstellungen benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierte Rolle enthält die Berechtigungen, die zum Verwalten von PITR-Einstellungen erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind erforderlich, um PITR-Einstellungen zu verwalten:

  • So aktivieren Sie PITR beim Erstellen einer Datenbank: datastore.databases.create
  • So aktualisieren Sie die PITR-Einstellungen für eine vorhandene Datenbank: datastore.databases.update,datastore.databases.list
  • So lesen Sie Daten aus PITR-Daten: datastore.databases.get,datastore.entities.get,datastore.entities.list
  • So exportieren Sie PITR-Daten: datastore.databases.export
  • So importieren Sie PITR-Daten: datastore.databases.import
  • So klonen Sie eine Datenbank: datastore.databases.clone

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Hinweise

Beachten Sie Folgendes, bevor Sie PITR verwenden:

  • Sie können nicht sofort nach der Aktivierung der Wiederherstellung zu einem bestimmten Zeitpunkt mit dem Lesen von Daten beginnen, die sieben Tage in der Vergangenheit liegen.
  • Wenn Sie PITR beim Erstellen einer Datenbank aktivieren möchten, müssen Sie den Befehl gcloud firestore databases create verwenden. Das Aktivieren von PITR beim Erstellen einer Datenbank über die Google Cloud -Konsole wird nicht unterstützt.
  • Bei Firestore mit MongoDB-Kompatibilität werden Versionen erst ab dem Zeitpunkt beibehalten, an dem PITR aktiviert wird.
  • Nachdem Sie PITR deaktiviert haben, können Sie keine PITR-Daten mehr im PITR-Zeitfenster lesen.
  • Wenn Sie PITR sofort nach der Deaktivierung wieder aktivieren, sind die bisherigen PITR-Daten nicht mehr verfügbar. Alle PITR-Daten, die vor dem Deaktivieren von PITR erstellt wurden, werden nach dem Ablaufdatum von PITR gelöscht.
  • Wenn Sie versehentlich Daten in der letzten Stunde gelöscht haben und PITR deaktiviert ist, können Sie Ihre Daten wiederherstellen, indem Sie PITR innerhalb einer Stunde nach dem Löschen aktivieren.
  • Alle Lesevorgänge für abgelaufene PITR-Daten schlagen fehl.

PITR aktivieren

Bevor Sie PITR verwenden können, müssen Sie die Abrechnung für Ihr Google Cloud-Projekt aktivieren. Die PITR-Funktion kann nur für Google Cloud-Projekte mit aktivierter Abrechnung verwendet werden.

So aktivieren Sie PITR für Ihre Datenbank:

Konsole

  1. Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.

    Zur Seite „Datenbanken“

  2. Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.

  3. Klicken Sie im Navigationsmenü auf Notfallwiederherstellung.

  4. Klicken Sie auf Bearbeiten, um die Einstellungen zu bearbeiten.

  5. Klicken Sie auf das Kästchen Wiederherstellung zu einem bestimmten Zeitpunkt aktivieren und dann auf Speichern.

Wenn Sie die Wiederherstellung zu einem bestimmten Zeitpunkt aktivieren, fallen Speicherkosten an. Weitere Informationen finden Sie unter Preise.

Wenn Sie die Wiederherstellung zu einem bestimmten Zeitpunkt deaktivieren möchten, entfernen Sie auf der Seite „Disaster Recovery“ in der Google Cloud -Konsole das Häkchen aus dem Kästchen Wiederherstellung zu einem bestimmten Zeitpunkt aktivieren.

gcloud

Aktivieren Sie PITR während der Datenbankerstellung mit dem Befehl gcloud firestore databases create und --enable-ptir:

gcloud firestore databases create\
  --location=LOCATION\
  --database=DATABASE_ID\
  --edition=enterprise\
  --enable-pitr

Ersetzen Sie die Werte so:

  • LOCATION: Der Ort, an dem Sie Ihre Datenbank erstellen möchten.
  • DATABASE_ID: Auf eine Datenbank-ID festlegen.

Sie können PITR mit dem Befehl gcloud firestore databases update so deaktivieren:

gcloud firestore databases update\
  --database=DATABASE_ID\
  --no-enable-pitr

Ersetzen Sie die Werte so:

  • DATABASE_ID: Auf die Datenbank-ID oder (Standard) festlegen.

Aufbewahrungsdauer und Zeitstempel der ältesten Version abrufen

Konsole

  1. Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.

    Zur Seite „Datenbanken“

  2. Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.

  3. Klicken Sie im Navigationsmenü auf Notfallwiederherstellung.

  4. Notieren Sie sich im Abschnitt Einstellungen den Aufbewahrungszeitraum und den Zeitstempel der ältesten Version.

    • Aufbewahrungszeitraum: Der Zeitraum, in dem Firestore mit MongoDB-Kompatibilität alle Datenversionen für die Datenbank beibehält. Der Wert beträgt eine Stunde, wenn PITR deaktiviert ist, und sieben Tage, wenn PITR aktiviert ist.
    • Zeit der frühesten Version: Der früheste Zeitstempel, zu dem ältere Versionen der Daten im PITR-Zeitraum gelesen werden können. Dieser Wert wird von Firestore mit MongoDB-Kompatibilität kontinuierlich aktualisiert und ist in dem Moment veraltet, in dem er abgefragt wird. Wenn Sie diesen Wert zur Wiederherstellung von Daten verwenden, müssen Sie die Zeit in dem Moment berücksichtigen, in dem der Wert abgefragt wird, bis zu dem Zeitpunkt, an dem Sie die Wiederherstellung initiieren.
    • Wiederherstellung zu einem bestimmten Zeitpunkt: Hier wird Enabled angezeigt, wenn die Wiederherstellung zu einem bestimmten Zeitpunkt aktiviert ist. Wenn PITR deaktiviert ist, wird Disabled angezeigt.

gcloud

Führen Sie den Befehl gcloud firestore databases describe so aus:

gcloud firestore databases describe --database=DATABASE_ID

Ersetzen Sie DATABASE_ID durch die Datenbank-ID oder '(default)'.

Hier ist die Ausgabe:

    appEngineIntegrationMode: ENABLED
    concurrencyMode: PESSIMISTIC
    createTime: '2021-03-24T17:02:35.234Z'
    deleteProtectionState: DELETE_PROTECTION_DISABLED
    earliestVersionTime: '2023-06-12T16:17:25.222474Z'
    etag: IIDayqOevv8CMNTvyNK4uv8C
    keyPrefix: s
    locationId: nam5
    name: projects/PROJECT_ID/databases/DATABASE_ID
    pointInTimeRecoveryEnablement: POINT_IN_TIME_RECOVERY_DISABLED
    type: FIRESTORE_NATIVE
    uid: 5230c382-dcd2-468f-8cb3-2a1acfde2b32
    updateTime: '2021-11-17T17:48:22.171180Z'
    versionRetentionPeriod: 3600s

Dabei gilt:

  • earliestVersionTime: Zeitstempel der frühesten gespeicherten PITR-Daten.
  • pointInTimeRecoveryEnablement: Zeigt POINT_IN_TIME_RECOVERY_ENABLED an, wenn PITR aktiviert ist. Wenn die Wiederherstellung zu einem bestimmten Zeitpunkt deaktiviert ist, wird entweder POINT_IN_TIME_RECOVERY_DISABLED angezeigt oder das Feld pointInTimeRecoveryEnablement wird nicht angezeigt.
  • versionRetentionPeriod: Zeitraum, für den PITR-Daten in Millisekunden aufbewahrt werden. Der Wert kann eine Stunde sein, wenn die Wiederherstellung zu einem bestimmten Zeitpunkt deaktiviert ist, oder sieben Tage, wenn sie aktiviert ist.

PITR-Daten lesen

Sie können PITR-Daten mit der Snapshot-Sitzung in verschiedenen MongoDB-Clienttreibern lesen. Legen Sie für die Sitzung ein snapshotTimestamp fest. Im folgenden Beispiel wird der MongoDB Java-Treiber verwendet. Eine ähnliche Funktion ist auch in anderen Treibern verfügbar:

Java

    var session =
        mongoClient.startSession(ClientSessionOptions.builder().snapshot(true).build());
  session.setSnapshotTimestamp(new BsonTimestamp(seconds, nanos));

  // run a find query with PITR timestamp
  collection.find(session, <filter>).toList();

  // run an aggregation query pipeline with PITR timestamp
  collection.aggregate(session, <aggregation pipeline stages>).toList();

  // run distinct command with PITR timestamp
  collection.distinct(session, <field>, <return value type class>).toList();

In MongoDB ist BsonTimestamp ein nur MongoDB-interner BSON-Typ mit 64 Bit. Die ersten 32 Bit stellen den Epochen-Zeitstempel in Sekunden dar und die letzten 32 Bit eine ordinale Anzahl von Vorgängen in einem MongoDB-Cluster.

In Firestore mit MongoDB-Kompatibilität wird der Snapshot-Zeitstempel, für den weiterhin der Werttyp BsonTimestamp verwendet wird, so interpretiert, dass die ersten 32 Bit als Epoch-Zeitstempelsekunden und die letzten 32 Bit als Nanosekunden innerhalb der Sekunde interpretiert werden. Nicht alle PITR-Snapshots mit Nanosekunden werden unterstützt. Mikrosekunden-Zeitstempel der letzten Stunde und Zeitstempel von ganzen Minuten der letzten sieben Tage sind zulässig. Informationen dazu, welche Lesezeitstempel unterstützt werden, finden Sie in der Übersicht zur Wiederherstellung zu einem bestimmten Zeitpunkt.

Aus einer Datenbank klonen

Sie können eine vorhandene Datenbank zu einem ausgewählten Zeitstempel in eine neue Datenbank klonen:

  • Die geklonte Datenbank ist eine neue Datenbank, die am selben Speicherort wie die Quelldatenbank erstellt wird.

    Zum Klonen verwendet Firestore Daten zur Wiederherstellung zu einem bestimmten Zeitpunkt (Point-in-time recovery, PITR) der Quelldatenbank. Die geklonte Datenbank enthält alle Daten und Indexe.

  • Standardmäßig wird die geklonte Datenbank auf dieselbe Weise wie die Quelldatenbank verschlüsselt, entweder mit der Standardverschlüsselung von Google oder mit CMEK-Verschlüsselung. Sie können einen anderen Verschlüsselungstyp angeben oder einen anderen Schlüssel für die CMEK-Verschlüsselung verwenden.

  • Der Zeitstempel hat eine Granularität von einer Minute und gibt einen Zeitpunkt in der Vergangenheit an, im Zeitraum, der durch das PITR-Fenster definiert wird:

    • Wenn die Wiederherstellung zu einem bestimmten Zeitpunkt für Ihre Datenbank aktiviert ist, können Sie eine beliebige Minute der letzten sieben Tage auswählen (oder weniger, wenn die Wiederherstellung zu einem bestimmten Zeitpunkt vor weniger als sieben Tagen aktiviert wurde).
    • Wenn PITR nicht aktiviert ist, können Sie eine beliebige Minute in der letzten Stunde auswählen.
    • Den frühesten Zeitstempel, den Sie auswählen können, finden Sie in der Beschreibung Ihrer Datenbank.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.

    Zur Seite „Datenbanken“

  2. Klicken Sie in der Tabellenzeile für die Datenbank, die Sie klonen möchten, auf  Weitere Informationen. Klicken Sie auf Klonen. Das Dialogfeld Klon erstellen wird angezeigt.

  3. Geben Sie im Dialogfeld Klon erstellen Parameter für das Klonen der Datenbank an:

    1. Geben Sie im Feld Klon eine ID zuweisen eine Datenbank-ID für eine neue geklonte Datenbank ein. Diese Datenbank-ID darf nicht mit einer vorhandenen Datenbank verknüpft sein.

    2. Wählen Sie im Feld Klonen von einen Zeitpunkt für das Klonen aus. Die ausgewählte Zeit entspricht einem PITR-Zeitstempel mit einer Granularität von einer Minute.

  4. Klicken Sie auf Klon erstellen.

gcloud

Verwenden Sie den Befehl gcloud alpha firestore databases clone, um eine Datenbank zu klonen:

gcloud alpha firestore databases clone \
--source-database='SOURCE_DATABASE' \
--snapshot-time='PITR_TIMESTAMP' \
--destination-database='DESTINATION_DATABASE_ID'

Ersetzen Sie Folgendes:

  • SOURCE_DATABASE: Der Datenbankname einer vorhandenen Datenbank, die Sie klonen möchten. Der Name hat das Format projects/PROJECT_ID/databases/SOURCE_DATABASE_ID.

  • PITR_TIMESTAMP: ein PITR-Zeitstempel im RFC 3339-Format mit einer Granularität von einer Minute. Beispiel: 2025-06-01T10:20:00.00Z oder 2025-06-01T10:30:00.00-07:00.

  • DESTINATION_DATABASE_ID: Eine Datenbank-ID für eine neue geklonte Datenbank. Diese Datenbank-ID darf nicht mit einer vorhandenen Datenbank verknüpft sein.

Beispiel:

gcloud alpha firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='projects/example-project/databases/example-dest-db'

Verschlüsselungskonfiguration der geklonten Datenbank ändern

Standardmäßig hat die geklonte Datenbank dieselbe Verschlüsselungskonfiguration wie die Quelldatenbank. Verwenden Sie das Argument --encryption-type, um die Verschlüsselungskonfiguration zu ändern:

  • (Standard) use-source-encryption: dieselbe Verschlüsselungskonfiguration wie für die Quelldatenbank verwenden.
  • google-default-encryption: Verwenden Sie die Standardverschlüsselung von Google.
  • customer-managed-encryption: CMEK-Verschlüsselung verwenden. Geben Sie im Argument --kms-key-name eine Schlüssel-ID an.

Das folgende Beispiel zeigt, wie die CMEK-Verschlüsselung für die geklonte Datenbank konfiguriert wird:

gcloud alpha firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='projects/example-project/databases/example-dest-db' \
--encryption-type='customer-managed-encryption' \
--kms-key-name='projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key'

Aus PITR-Daten exportieren und importieren

Sie können Ihre Datenbank mit dem Befehl gcloud firestore export aus PITR-Daten in Cloud Storage exportieren. Sie können PITR-Daten exportieren, deren Zeitstempel ein Zeitstempel für eine volle Minute innerhalb der letzten sieben Tage ist, aber nicht früher als earliestVersionTime. Wenn zum angegebenen Zeitstempel keine Daten mehr vorhanden sind, schlägt der Exportvorgang fehl.

Der PITR-Exportvorgang unterstützt alle Filter, einschließlich des Exports aller Dokumente und des Exports bestimmter Sammlungen.

  1. Exportieren Sie die Datenbank und geben Sie für den Parameter snapshot-time den ausgewählten Wiederherstellungszeitstempel an.

    gcloud

    Führen Sie den folgenden Befehl aus, um die Datenbank in Ihren Bucket zu exportieren.

    gcloud firestore export gs://BUCKET_NAME_PATH \
        --snapshot-time=PITR_TIMESTAMP \
        --collection-ids=COLLECTION_IDS
    

    Ersetzen Sie Folgendes:

    • BUCKET_NAME_PATH: Ein gültiger Cloud Storage-Bucket mit einem optionalen Pfadpräfix, in dem Exportdateien gespeichert werden.
    • PITR_TIMESTAMP: Ein PITR-Zeitstempel mit einer Granularität von einer Minute, z. B. 2023-05-26T10:20:00.00Z oder 2023-10-19T10:30:00.00-07:00.
    • COLLECTION_IDS: eine Liste von Sammlungs-IDs oder Sammlungs-Gruppen-IDs, z. B. 'specific-collection-group1','specific-collection-group2'.

    Beachten Sie vor dem Exportieren von PITR-Daten die folgenden Punkte:

    • Geben Sie den Zeitstempel im RFC 3339-Format an. Beispiel: 2023-05-26T10:20:00.00Zoder 2023-10-19T10:30:00.00-07:00
    • Achten Sie darauf, dass der von Ihnen angegebene Zeitstempel ein Zeitstempel für eine volle Minute innerhalb der letzten sieben Tage ist, aber nicht vor dem earliestVersionTime. Wenn zum angegebenen Zeitstempel keine Daten mehr vorhanden sind, wird ein Fehler generiert. Der Zeitstempel muss eine volle Minute sein, auch wenn die angegebene Zeit innerhalb der letzten Stunde liegt.
    • Ein fehlgeschlagener PITR-Export wird Ihnen nicht in Rechnung gestellt.
  2. In eine Datenbank importieren.

    Folgen Sie der Anleitung unter Alle Dokumente importieren, um die exportierte Datenbank zu importieren. Wenn in Ihrer Datenbank bereits ein Dokument vorhanden ist, wird es überschrieben.