Halaman ini menjelaskan cara menggunakan pemulihan point-in-time (PITR) untuk mempertahankan dan memulihkan data di Spanner untuk database dialek GoogleSQL dan database dialek PostgreSQL.
Untuk mempelajari lebih lanjut, lihat Pemulihan point-in-time.
Prasyarat
Panduan ini menggunakan database dan skema seperti yang ditentukan dalam mulai cepat Spanner. Anda dapat menjalankan panduan memulai cepat untuk membuat database dan skema, atau mengubah perintah untuk digunakan dengan database Anda sendiri.
Tetapkan periode retensi data
Untuk menetapkan periode retensi database Anda:
Konsol
Buka halaman Spanner Instances di konsol Google Cloud .
Klik instance yang berisi database untuk membuka halaman Ringkasan.
Klik database untuk membuka halaman Ringkasan.
Pilih tab Backup/Restore.

Klik ikon pensil di kolom Periode retensi versi.
Masukkan jumlah dan satuan waktu untuk periode retensi data, lalu klik Perbarui.
gcloud
Perbarui skema database dengan pernyataan ALTER DATABASE. Contoh:
gcloud spanner databases ddl update example-db \
--instance=test-instance \
--ddl="ALTER DATABASE \"example-db\" \
SET spanner.version_retention_period = '7d';"Berikut adalah output-nya:
ALTER DATABASE "example-db" SET "spanner.version_retention_period" = '7d';Untuk melihat periode retensi, dapatkan DDL database Anda:
gcloud spanner databases ddl describe example-db \
--instance=test-instanceBerikut adalah output-nya:
ALTER DATABASE example-db SET OPTIONS (
version_retention_period = '7d'
);
...
Library klien
C#
C++
Go
Java
Node.js
PHP
Python
Ruby
Catatan penggunaan:
- Periode retensi data harus antara 1 jam dan 7 hari, dan dapat ditentukan
dalam hari, jam, menit, atau detik. Misalnya, nilai
1d,24h,1440m, dan86400ssetara. - Jika Anda telah mengaktifkan logging untuk Spanner API di project Anda, peristiwa dicatat sebagai UpdateDatabaseDdl dan dapat dilihat di Logs Explorer.
- Untuk kembali ke periode retensi default 1 jam, Anda dapat menetapkan opsi database
version_retention_periodkeNULLuntuk database GoogleSQL atauDEFAULTuntuk database PostgreSQL. - Saat Anda memperpanjang periode retensi data, sistem tidak akan mengisi ulang versi data sebelumnya. Misalnya, jika Anda memperpanjang periode retensi dari satu jam menjadi 24 jam, Anda harus menunggu 23 jam agar sistem mengumpulkan data lama sebelum Anda dapat memulihkan data dari 24 jam yang lalu.
Mendapatkan periode retensi data dan waktu versi paling awal
Aset Database mencakup dua kolom:
version_retention_period: periode ketika Spanner menyimpan semua versi data untuk database.earliest_version_time: stempel waktu paling awal saat versi data sebelumnya dapat dibaca dari database. Nilai ini terus diperbarui oleh Spanner dan menjadi tidak berlaku saat dikueri. Jika Anda menggunakan nilai ini untuk memulihkan data, pastikan untuk memperhitungkan waktu sejak saat nilai dikueri hingga saat Anda memulai pemulihan.
Konsol
Buka halaman Spanner Instances di konsol Google Cloud .
Klik instance yang berisi database untuk membuka halaman Ringkasan.
Klik database untuk membuka halaman Ringkasan.
Pilih tab Backup/Restore untuk membuka halaman Backup/Restore dan menampilkan periode retensi data.

Klik Buat untuk membuka halaman Buat cadangan dan menampilkan waktu versi paling awal.

gcloud
Anda bisa mendapatkan kolom ini dengan memanggil describe databases atau list databases. Contoh:
gcloud spanner databases describe example-db \
--instance=test-instanceBerikut adalah output-nya:
createTime: '2020-09-07T16:56:08.285140Z'
earliestVersionTime: '2020-10-07T16:56:08.285140Z'
name: projects/my-project/instances/test-instance/databases/example-db
state: READY
versionRetentionPeriod: 3d
Memulihkan sebagian database Anda
Lakukan stale read dan tentukan stempel waktu pemulihan yang diperlukan. Pastikan stempel waktu yang Anda tentukan lebih baru daripada
earliest_version_time.databasegcloud
Gunakan execute-sql Misalnya:
gcloud spanner databases execute-sql example-db \ --instance=test-instance \ --read-timestamp=2020-09-11T10:19:36.010459-07:00 \ --sql='SELECT * FROM SINGERS'Library klien
Lihat melakukan stale read.
Simpan hasil kueri. Hal ini diperlukan karena Anda tidak dapat menulis hasil kueri kembali ke database dalam transaksi yang sama. Untuk jumlah data yang kecil, Anda dapat mencetak ke konsol atau menyimpan dalam memori. Untuk jumlah data yang lebih besar, Anda mungkin perlu menulis ke file lokal.
Tulis kembali data yang dipulihkan ke tabel yang perlu dipulihkan. Misalnya:
gcloud
gcloud spanner rows update --instance=test-instance \ --database=example-db --table=Singers \ --data=SingerId=1,FirstName='Marc'Untuk mengetahui informasi selengkapnya, lihat memperbarui data menggunakan gcloud.
Library klien
Untuk mengetahui informasi selengkapnya, lihat memperbarui data menggunakan DML atau memperbarui data menggunakan mutasi.
Jika ingin melakukan analisis pada data yang dipulihkan sebelum menulis kembali, Anda dapat membuat tabel sementara secara manual di database yang sama, menulis data yang dipulihkan ke tabel sementara ini terlebih dahulu, melakukan analisis, lalu membaca data yang ingin dipulihkan dari tabel sementara ini dan menulisnya ke tabel yang perlu dipulihkan.
Memulihkan tabel tertentu
Jika Anda perlu memulihkan tabel tertentu dan titik pemulihan yang dipilih lebih
baru daripada earliest_version_time database, Anda dapat mengekspor tabel
dari stempel waktu sebelumnya dalam database yang sama, lalu mengimpornya kembali.
Proses impor tidak otomatis menghapus baris yang ditambahkan setelah cadangan dibuat. Oleh karena itu, jika Anda ingin tabel yang dipulihkan sama persis dengan statusnya pada stempel waktu pemulihan yang dipilih, Anda harus menghapus baris yang dibuat setelah stempel waktu pemulihan secara manual.
- Ekspor tabel tertentu dari database dengan menentukan parameter
snapshotTimeke stempel waktu pemulihan yang diperlukan. Anda dapat menggunakan template Dataflow Spanner ke Avro. Untuk mengetahui informasi selengkapnya, lihat Mengekspor data. - Impor kembali tabel yang diekspor ke dalam database menggunakan template Dataflow Cloud Storage Avro to Spanner. Untuk mengetahui informasi selengkapnya, lihat Mengimpor data.
Memulihkan seluruh database
Anda dapat memulihkan seluruh database menggunakan Cadangkan dan Pulihkan atau Impor dan Ekspor serta menentukan stempel waktu pemulihan.
Pencadangan dan pemulihan
Buat cadangan dan tetapkan
version_timeke stempel waktu pemulihan yang diperlukan.Konsol
Buka halaman Detail database di konsol Cloud.
Di tab Backup/Restore, klik Create.
Centang kotak Buat cadangan dari titik waktu sebelumnya.

gcloud
gcloud spanner backups create example-db-backup-1 \ --instance=test-instance \ --database=example-db \ --retention-period=1y \ --version-time=2021-01-22T01:10:35Z --asyncUntuk mengetahui informasi selengkapnya, lihat Membuat cadangan menggunakan gcloud.
Library klien
C#
C++
Go
Java
Node.js