Mit der Wiederherstellung zu einem bestimmten Zeitpunkt arbeiten

Auf dieser Seite wird beschrieben, wie Sie die Wiederherstellung zu einem bestimmten Zeitpunkt verwenden, um Daten in Firestore aufzubewahren und wiederherzustellen.

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

Berechtigungen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Cloud Datastore Owner (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 der 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 Berechtigungen zum Verwalten der PITR-Einstellungen 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 die 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 führen Sie Lesevorgänge aus PITR-Daten aus: 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

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

Hinweis

Beachten Sie die folgenden Punkte, bevor Sie mit der Verwendung der PITR beginnen:

  • Sie können nicht sofort nach der Aktivierung der PITR-Datenwiederherstellung mit dem Lesen von Daten beginnen, die sieben Tage zurückliegen.
  • Wenn Sie die PITR beim Erstellen einer Datenbank aktivieren möchten, müssen Sie die Methode gcloud firestore databases create-Befehl. Das Aktivieren von PITR beim Erstellen einer Datenbank über die Google Cloud Console wird nicht unterstützt.
  • Firestore speichert Versionen ab dem Zeitpunkt PITR aktivieren.
  • Nach dem Deaktivieren der PITR können Sie keine PITR-Daten im PITR-Fenster lesen.
  • Wenn Sie PITR sofort nach der Deaktivierung wieder aktivieren, sind die bisherigen PITR-Daten nicht mehr verfügbar. Alle vor dem Deaktivieren der PITR erstellten PITR-Daten werden nach dem PITR-Ablaufdatum gelöscht werden.
  • Wenn Sie in der letzten Stunde versehentlich Daten gelöscht haben und die PITR deaktiviert ist, haben Sie kann Ihre Daten wiederherstellen, indem Sie die Wiederherstellung zu einem bestimmten Zeitpunkt innerhalb einer Stunde nach dem Löschen aktivieren.
  • Alle Lesevorgänge, die auf abgelaufenen PITR-Daten ausgeführt werden, 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 die PITR für Ihre Datenbank:

Console

  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.

Durch die Aktivierung von PITR fallen Speicherkosten an. Weitere Informationen finden Sie unter Preise.

Wenn Sie die PITR deaktivieren möchten, entfernen Sie in der Google Cloud Console auf der Seite „Notfallwiederherstellung“ das Häkchen aus dem Kästchen Point-in-Time-Wiederherstellung aktivieren.

gcloud

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

gcloud firestore databases create\
  --location=LOCATION\
  [--database=DATABASE_ID; default="(default)"]\
  [--type=TYPE; default="firestore-native"]\
  --enable-pitr

Ersetzen Sie die Werte so:

  • Location: Ort, an dem Sie die Datenbank erstellen möchten.
  • DATABASE_ID – auf die Datenbank-ID oder (Standardeinstellung) festgelegt.
  • TYPE – auf „firestore-native“ festgelegt.

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

gcloud firestore databases update\
  [--database=DATABASE_ID; default="(default)"]\
  --no-enable-pitr

Ersetzen Sie die Werte so:

  • DATABASE_ID – auf die Datenbank-ID oder (Standardeinstellung) festlegen

Aufbewahrungsdauer und Zeitstempel der ältesten Version abrufen

Console

  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 Bereich Einstellungen die Aufbewahrungsdauer und den Zeitstempel der ältesten Version.

    • Aufbewahrungsdauer: Der Zeitraum, in dem Firestore alle Datenversionen für die Datenbank beibehält. Der Wert ist eine Stunde, wenn die PITR deaktiviert ist, und sieben Tage, wenn die PITR aktiviert ist.
    • Frühester Versionszeitpunkt: der früheste Zeitstempel für den Zeitpunkt, zu dem ältere Versionen von können die Daten im PITR-Fenster gelesen werden. Dieser Wert wird von Firestore kontinuierlich aktualisiert und ist in dem Moment veraltet, in dem er abgefragt wird. Wenn Sie diesen Wert für die Wiederherstellung von Daten verwenden, berücksichtigen Sie die Zeit vom den Moment, in dem der Wert bis zu dem Moment abgefragt wird, in dem Sie Genesung.
    • Wiederherstellung zu einem bestimmten Zeitpunkt: 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/(default)
    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: Wird POINT_IN_TIME_RECOVERY_ENABLED angezeigt, wenn PITR aktiviert ist. Ist die Wiederherstellung zu einem bestimmten Zeitpunkt deaktiviert, sehen Sie entweder POINT_IN_TIME_RECOVERY_DISABLED oder die pointInTimeRecoveryEnablement wird möglicherweise nicht angezeigt.
  • versionRetentionPeriod – Zeitraum, in dem PITR-Daten in Millisekunden aufbewahrt werden. Der Wert kann eine Stunde betragen, wenn die PITR deaktiviert ist, oder sieben Tage, wenn die PITR aktiviert ist.

PITR-Daten lesen

Sie können PITR-Daten mithilfe der Clientbibliotheken, REST API-Methoden oder des FirestoreIO Apache Beam-Connectors lesen.

Clientbibliotheken

Java

Sie müssen die ReadOnly-Transaktion verwenden, um PITR-Daten zu lesen. Sie können readTime nicht direkt in Lesevorgängen angeben. Weitere Informationen finden Sie unter Transaktionen und Batch-Schreibvorgänge.

  Firestore firestore = …

  TransactionOptions options =
          TransactionOptions.createReadOnlyOptionsBuilder()
              .setReadTime(
                  com.google.protobuf.Timestamp.newBuilder()
                      .setSeconds(1684098540L)
                      .setNanos(0))
              .build();

  ApiFuture<Void> futureTransaction = firestore.runTransaction(
              transaction -> {
                // Does a snapshot read document lookup
                final DocumentSnapshot documentResult =
                    transaction.get(documentReference).get();

                // Executes a snapshot read query
                final QuerySnapshot queryResult =
                  transaction.get(query).get();
              },
              options);

  // Blocks on transaction to complete
  futureTransaction.get();

Knoten

Sie müssen eine ReadOnly-Transaktion verwenden, um PITR-Daten zu lesen. Sie können readTime nicht direkt in Lesevorgängen angeben. Weitere Informationen finden Sie unter Transaktionen und Batch-Schreibvorgänge.

  const documentSnapshot = await firestore.runTransaction(
    updateFunction => updateFunction.get(documentRef),
    {readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
);

  const querySnapshot = await firestore.runTransaction(
    updateFunction => updateFunction.get(query),
    {readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
  )

REST API

PITR-Lesevorgänge werden in allen Firestore-Lesemethoden unterstützt: get, list, batchGet und listCollectionIds, listDocuments runQuery, runAggregationQuery und partitionQuery.

Wenn Sie einen Lesevorgang mit den REST-Methoden ausführen möchten, versuchen Sie es mit einer der folgenden Optionen:

  1. Übergeben Sie in der Anfrage für die Lesemethode den Wert readTime als unterstützten PITR-Zeitstempel in der readOptions-Methode. Ein PITR-Zeitstempel kann entweder ein Zeitstempel mit Mikrosekundengenauigkeit innerhalb der letzten Stunde oder ein Zeitstempel einer ganzen Minute nach der letzten Stunde sein, aber nicht vor dem earliestVersionTime.

  2. Verwenden Sie den Parameter readTime zusammen mit der Methode BeginTransaction als Teil einer ReadOnly-Transaktion für mehrere PITR-Lesevorgänge.

Apache Beam

Verwenden Sie den FirestoreIO Apache Beam-Connector, um mit Dataflow große Dokumente in einer Firestore-Datenbank zu lesen oder zu schreiben.

PITR-Lesungen werden von der folgenden Lesemethode des FirestoreIO-Connectors unterstützt. Diese Lesemethoden unterstützen die Methode withReadTime(@Nullable Instant readTime), die Sie für PITR-Lesungen verwenden können:

Java

Der folgende Code kann mit dem Beispielcode für Dataflow-Pipelines für Bulk-Lese- oder Schreibvorgänge verwendet werden. In diesem Beispiel wird die Methode withReadTime(@Nullable Instant readTime) für PITR-Lesevorgänge verwendet.

  Instant readTime = Instant.ofEpochSecond(1684098540L);

  PCollection<Document> documents =
      pipeline
          .apply(Create.of(collectionId))
          .apply(
              new FilterDocumentsQuery(
                  firestoreOptions.getProjectId(), firestoreOptions.getDatabaseId()))
          .apply(FirestoreIO.v1().read().runQuery().withReadTime(readTime).withRpcQosOptions(rpcQosOptions).build())
  ...

Eine vollständige Liste der readTime-Beispiele in der Dataflow-Pipeline finden Sie im GitHub-Repository.

Export und Import aus PITR-Daten

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

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

  1. Exportieren Sie die Datenbank und geben Sie für den Parameter snapshot-time den gewünschten 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] \
        --namespace-ids=[NAMESPACE_IDS]
    

    Dabei gilt:

    • BUCKET_NAME_PATH: Ein gültiger Cloud Storage-Bucket mit einem optionalen Pfadpräfix, in dem Exportdateien gespeichert werden.
    • PITR_TIMESTAMP: PITR-Zeitstempel mit Minutengenauigkeit, 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 Sammlungsgruppen-IDs, z. B. 'specific collection group1','specific collection group2'
    • NAMESPACE_IDS: eine Liste von Namespace-IDs, z. B. 'customer','orders'.

    Beachten Sie die folgenden Punkte, bevor Sie PITR-Daten exportieren:

    • Geben Sie den Zeitstempel im RFC 3339-Format an. Beispiel: 2023-05-26T10:20:00.00Zoder 2023-10-19T10:30:00.00-07:00
    • Der angegebene Zeitstempel muss ein Zeitstempel für eine volle Minute innerhalb der letzten sieben Tage sein, aber nicht älter als der earliestVersionTime. Wenn am angegebenen Ort keine Daten mehr vorhanden sind, wird ein Fehler generiert. Der Zeitstempel muss eine ganze 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.