Mit der Wiederherstellung zu einem bestimmten Zeitpunkt (PITR) arbeiten
Auf dieser Seite wird beschrieben, wie Sie mit der Wiederherstellung zu einem bestimmten Zeitpunkt (Point-in-Time Recovery, PITR) Daten in Firestore aufbewahren 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 zuzuweisen, 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. Maximieren Sie den Abschnitt Erforderliche Berechtigungen, um die notwendigen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind erforderlich, um PITR-Einstellungen zu verwalten:
-
So aktivieren Sie die Wiederherstellung zu einem bestimmten Zeitpunkt beim Erstellen einer Datenbank:
datastore.databases.create -
So aktualisieren Sie die Einstellungen für die Wiederherstellung zu einem bestimmten Zeitpunkt in einer vorhandenen Datenbank:
datastore.databases.update,datastore.databases.list -
Zum Lesen von 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.
Hinweis
Beachten Sie Folgendes, bevor Sie die Wiederherstellung zu einem bestimmten Zeitpunkt verwenden:
- Sie können nicht sofort nach dem Aktivieren der Wiederherstellung zu einem bestimmten Zeitpunkt 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 den Befehl
gcloud firestore databases createverwenden. Das Aktivieren der Wiederherstellung zu einem bestimmten Zeitpunkt beim Erstellen einer Datenbank über die Google Cloud Console wird nicht unterstützt. - Firestore beginnt mit der Aufbewahrung von Versionen ab dem Zeitpunkt, an dem die Wiederherstellung zu einem bestimmten Zeitpunkt aktiviert wurde.
- Nachdem Sie die Wiederherstellung zu einem bestimmten Zeitpunkt deaktiviert haben, können Sie keine PITR-Daten im PITR-Fenster mehr lesen.
- Wenn Sie die Wiederherstellung zu einem bestimmten Zeitpunkt sofort nach dem Deaktivieren wieder aktivieren, sind die früheren Daten der Wiederherstellung zu einem bestimmten Zeitpunkt nicht mehr verfügbar. Alle PITR-Daten, die vor dem Deaktivieren von PITR erstellt wurden, werden nach dem PITR-Ablaufdatum gelöscht.
- Wenn Sie in der letzten Stunde versehentlich Daten gelöscht haben und die Wiederherstellung zu einem bestimmten Zeitpunkt deaktiviert ist, können Sie Ihre Daten wiederherstellen, indem Sie die Wiederherstellung zu einem bestimmten Zeitpunkt innerhalb einer Stunde nach dem Löschen aktivieren.
- Alle Lesevorgänge für abgelaufene PITR-Daten schlagen fehl.
Wiederherstellung zu einem bestimmten Zeitpunkt aktivieren
Bevor Sie die Wiederherstellung zu einem bestimmten Zeitpunkt 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 Wiederherstellung zu einem bestimmten Zeitpunkt für Ihre Datenbank:
Console
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.
Klicken Sie im Navigationsmenü auf Notfallwiederherstellung.
Klicken Sie auf Bearbeiten, um die Einstellungen zu bearbeiten.
Klicken Sie auf das Kästchen Wiederherstellung zu einem bestimmten Zeitpunkt aktivieren und dann auf Speichern.
Durch die Aktivierung der Wiederherstellung zu einem bestimmten Zeitpunkt fallen Speicherkosten an. Weitere Informationen finden Sie unter Preise.
Wenn Sie die Wiederherstellung zu einem bestimmten Zeitpunkt deaktivieren möchten, entfernen Sie in der Google Cloud Console auf der Seite „Notfallwiederherstellung“ das Häkchen bei Wiederherstellung zu einem bestimmten Zeitpunkt aktivieren.
gcloud
Aktivieren Sie die Wiederherstellung zu einem bestimmten Zeitpunkt während der Datenbankerstellung mit dem Befehl gcloud firestore databases create und dem Befehl --enable-ptir so:
gcloud firestore databases create\
--location=LOCATION\
--database=DATABASE_ID\
--type=firestore-native\
--enable-pitr
Ersetzen Sie die Werte so:
LOCATION: Standort, an dem Sie Ihre Datenbank erstellen möchten.DATABASE_ID: auf eine Datenbank-ID festgelegt.
Sie können die 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: Legen Sie die Datenbank-ID oder (Standard) fest.
Aufbewahrungsdauer und Zeitstempel der ältesten Version abrufen
Console
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.
Klicken Sie im Navigationsmenü auf Notfallwiederherstellung.
Notieren Sie sich im Bereich Einstellungen die Aufbewahrungsdauer und den Zeitstempel der ältesten Version.
- Aufbewahrungsdauer: Der Zeitraum, in dem Firestore alle Versionen von Daten für die Datenbank aufbewahrt. Der Wert beträgt eine Stunde, wenn die Wiederherstellung zu einem bestimmten Zeitpunkt deaktiviert ist, und sieben Tage, wenn sie aktiviert ist.
- Zeitstempel der ältesten Version: Der früheste Zeitstempel, zu dem ältere Versionen der Daten im PITR-Fenster gelesen werden können. Dieser Wert wird von Firestore kontinuierlich aktualisiert und ist zum Zeitpunkt der Abfrage veraltet. Wenn Sie diesen Wert zum Wiederherstellen von Daten verwenden, müssen Sie die Zeit von der Abfrage des Werts bis zum Start der Wiederherstellung berücksichtigen.
- Wiederherstellung zu einem bestimmten Zeitpunkt: Zeigt
Enabledan, wenn die Wiederherstellung zu einem bestimmten Zeitpunkt aktiviert ist. Wenn die Wiederherstellung zu einem bestimmten Zeitpunkt deaktiviert ist, wirdDisabledangezeigt.
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: ZeigtPOINT_IN_TIME_RECOVERY_ENABLEDan, wenn die Wiederherstellung zu einem bestimmten Zeitpunkt aktiviert ist. Wenn die Wiederherstellung zu einem bestimmten Zeitpunkt deaktiviert ist, wird entwederPOINT_IN_TIME_RECOVERY_DISABLEDangezeigt oder das FeldpointInTimeRecoveryEnablementwird möglicherweise nicht angezeigt.versionRetentionPeriod: Zeitraum, für den PITR-Daten aufbewahrt werden, in Millisekunden. Der Wert kann eine Stunde betragen, wenn die Wiederherstellung zu einem bestimmten Zeitpunkt deaktiviert ist, oder sieben Tage, wenn sie 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 in Lesevorgängen nicht direkt 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 in Lesevorgängen nicht direkt 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, 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:
Übergeben Sie in der Anfrage der Lesemethode den Wert
readTimeals unterstützten PITR-Zeitstempel in der MethodereadOptions. Ein PITR-Zeitstempel kann entweder ein Zeitstempel mit Mikrosekundengenauigkeit innerhalb der letzten Stunde oder ein Zeitstempel mit ganzen Minuten außerhalb der letzten Stunde sein, aber nicht vor demearliestVersionTime.Verwenden Sie den Parameter
readTimezusammen mit der MethodeBeginTransactionals Teil einerReadOnly-Transaktion für mehrere PITR-Lesevorgänge.
Apache Beam
Mit dem FirestoreIO-Apache Beam-Connector können Sie mit Dataflow Dokumente in einer Firestore-Datenbank in großem Umfang lesen oder schreiben.
PITR-Lesevorgänge werden in der folgenden Lesemethode des FirestoreIO-Connectors unterstützt. Diese Lesemethoden unterstützen die Methode withReadTime(@Nullable Instant readTime), die Sie für PITR-Lesevorgänge verwenden können:
- FirestoreV1.BatchGetDocuments
- FirestoreV1.ListCollectionIds
- FirestoreV1.ListDocuments
- FirestoreV1.PartitionQuery
Java
Der folgende Code kann mit dem Dataflow-Beispielpipelinecode 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.
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 Standort wie die Quelldatenbank erstellt wird.
Zum Erstellen eines Klons verwendet Firestore Daten zur Wiederherstellung zu einem bestimmten Zeitpunkt (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 der 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, der im durch das PITR-Fenster definierten Zeitraum liegt:
- Wenn die Wiederherstellung zu einem bestimmten Zeitpunkt für Ihre Datenbank aktiviert ist, können Sie eine beliebige Minute in den letzten 7 Tagen auswählen (oder weniger, wenn die Wiederherstellung zu einem bestimmten Zeitpunkt vor weniger als 7 Tagen aktiviert wurde).
- Wenn die Wiederherstellung zu einem bestimmten Zeitpunkt 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
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
Klicken Sie in der Tabellenzeile für die Datenbank, die Sie klonen möchten, auf Mehr anzeigen. Klicken Sie auf Klonen. Das Dialogfeld Klon erstellen wird angezeigt.
Geben Sie im Dialogfeld Klon erstellen Parameter für das Klonen der Datenbank an:
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.
Wählen Sie im Feld Klonen von einen Zeitpunkt aus, der für das Klonen verwendet werden soll. Die ausgewählte Zeit entspricht einem PITR-Zeitstempel mit einer Granularität von einer Minute.
Klicken Sie auf Klon erstellen.
gcloud
Verwenden Sie den Befehl gcloud firestore databases clone, um eine Datenbank zu klonen:
gcloud 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 einem Detaillierungsgrad von einer Minute. Beispiel:
2025-06-01T10:20:00.00Zoder2025-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 firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db'
Wenn Sie beim Klonen einer Datenbank eine Bindung an bestimmte Tags herstellen möchten, verwenden Sie den vorherigen Befehl mit dem Flag --tags. Dies ist eine optionale Liste von KEY=VALUE-Tag-Paaren, an die eine Bindung hergestellt werden soll.
Beispiel:
gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--tags=key1=value1,key2=value2
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: Verwenden Sie dieselbe Verschlüsselungskonfiguration wie die Quelldatenbank. google-default-encryption: Verwenden Sie die Standardverschlüsselung von Google.customer-managed-encryption: CMEK-Verschlüsselung verwenden. Geben Sie im Argument--kms-key-nameeine Schlüssel-ID an.
Im folgenden Beispiel wird gezeigt, wie Sie die CMEK-Verschlüsselung für die geklonte Datenbank konfigurieren:
gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--encryption-type='customer-managed-encryption' \
--kms-key-name='projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key'
Firebase CLI
Verwenden Sie den Befehl firebase firestore:databases:clone, um eine Datenbank zu klonen:
firebase firestore:databases:clone \
'SOURCE_DATABASE' \
'DESTINATION_DATABASE' \
--snapshot-time 'PITR_TIMESTAMP'
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.DESTINATION_DATABASE: ein Datenbankname für eine neue geklonte Datenbank. Der Name hat das Format
projects/PROJECT_ID/databases/DESTINATION_DATABASE_ID. Dieser Datenbankname darf nicht mit einer vorhandenen Datenbank verknüpft sein.PITR_TIMESTAMP: ein PITR-Zeitstempel im RFC 3339-Format mit einem Detaillierungsgrad von einer Minute. Beispiel:
2025-06-01T10:20:00.00Zoder2025-06-01T10:30:00.00-07:00. Wenn nichts angegeben ist, wird der aktuelle Zeitpunkt als Snapshot verwendet, abgerundet auf die Minute.
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: Verwenden Sie dieselbe Verschlüsselungskonfiguration wie die Quelldatenbank. GOOGLE_DEFAULT_ENCRYPTION: Verwenden Sie die Standardverschlüsselung von Google.CUSTOMER_MANAGED_ENCRYPTION: CMEK-Verschlüsselung verwenden. Geben Sie im Argument--kms-key-nameeine Schlüssel-ID an.
Im folgenden Beispiel wird gezeigt, wie Sie die CMEK-Verschlüsselung für die geklonte Datenbank konfigurieren:
firebase firestore:databases:clone \
'projects/example-project/databases/(default)' \
'projects/example-project/databases/example-dest-db' \
--snapshot-time 'PITR_TIMESTAMP' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION
Beschränkungen
Bei einem Klonvorgang werden keine App Engine-Suchdaten oder Blob-Entitäten aus einer (default)-Datenbank geklont. Diese Daten sind nur für die Datenbank (default) gültig und sind nicht nützlich, wenn Sie von (default) in eine Datenbank klonen, die solche Daten nicht unterstützt. Daher werden sie von Klonen ausgeschlossen.
Export und Import von PITR-Daten
Mit dem Befehl gcloud firestore export können Sie Ihre Datenbank aus PITR-Daten in Cloud Storage exportieren. Sie können PITR-Daten exportieren, deren Zeitstempel ein Zeitstempel für eine ganze Minute innerhalb der letzten sieben Tage ist, aber nicht vor dem earliestVersionTime liegt. Wenn am 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.
Exportieren Sie die Datenbank und geben Sie dabei den Parameter
snapshot-timefür 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 \ --namespace-ids=NAMESPACE_IDSDabei gilt:
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 minutengenauer Granularität, z. B.2023-05-26T10:20:00.00Zoder2023-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 vor dem Exportieren von PITR-Daten die folgenden Punkte:
- Aktivieren Sie PITR für Ihre Datenbank. Wenn die Wiederherstellung zu einem bestimmten Zeitpunkt deaktiviert ist, schlägt der Export mit einem Snapshot-Zeitstempel fehl, auch für Zeitstempel innerhalb der letzten Stunde nach
earliestVersionTime. Der Exportvorgang gibt den FehlerPoint-in-Time Recovery must be enabled in order to execute exports at a snapshot timestampzurück. - Geben Sie den Zeitstempel im RFC 3339-Format an.
Beispiel:
2023-05-26T10:20:00.00Zoder2023-10-19T10:30:00.00-07:00 - Der angegebene Zeitstempel muss ein Zeitstempel mit einer ganzen Minute innerhalb der letzten sieben Tage sein, aber nicht vor dem
earliestVersionTime. Wenn am angegebenen Zeitstempel 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. - Für einen fehlgeschlagenen PITR-Export fallen keine Kosten an.
In eine Datenbank importieren
Führen Sie die Schritte unter Alle Dokumente importieren aus, um die exportierte Datenbank zu importieren. Wenn ein Dokument bereits in Ihrer Datenbank vorhanden ist, wird es überschrieben.