Halaman ini menjelaskan cara melindungi objek skema seperti tabel, indeks, dan kolom dari penghapusan yang tidak disengaja.
Memahami keamanan penghapusan objek skema
Perlindungan penghapusan objek skema Spanner mengandalkan statistik akses objek skema untuk menentukan apakah suatu objek aman untuk dihapus. Jika sistem menentukan bahwa objek tersebut tidak aman, sistem akan menolak permintaan pengguna untuk menghapus objek skema. Menghapus objek tersebut dapat menyebabkan kegagalan tugas klien yang masih mengakses objek tersebut. Selain itu, memulihkan objek yang dihapus tanpa menyebabkan kehilangan data sangat sulit atau tidak mungkin.
Untuk tujuan ini, Spanner melacak statistik akses untuk setiap objek skema. Akses ini mencakup penyisipan, update, atau penghapusan DML, kueri SQL, penulisan API, dan pembacaan API. Dengan menggunakan statistik akses ini, Spanner menentukan apakah objek skema mungkin masih digunakan. Jika objek baru-baru ini diakses, kemungkinan objek tersebut masih digunakan.
Mengaktifkan perlindungan penghapusan objek skema
Untuk mengaktifkan perlindungan penghapusan, tetapkan durasi tidak aktif untuk perlindungan penghapusan ke nilai durasi selain nol, seperti "24 jam" atau "2 hari". Durasi minimum adalah "0 detik" dan durasi maksimum adalah "7 hari". Anda harus menetapkan durasi tidak aktif ke "24 jam" atau lebih lama.
Jika menetapkan durasi tidak aktif ke "24 jam", Anda hanya dapat menghapus objek skema jika objek tersebut tidak diakses dalam 24 jam terakhir.
GoogleSQL
Untuk mengetahui informasi selengkapnya, lihat ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET OPTIONS ( schema_drop_protection_inactivity_period="DURATION" )'
Ganti kode berikut:
- DATABASE_NAME: nama database Anda.
- INSTANCE_ID: ID instance database Anda.
- DURATION: antara "0 detik" (inklusif) dan "7 hari" (inklusif). Direkomendasikan: "24 jam".
PostgreSQL
Untuk mengetahui informasi selengkapnya, lihat ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME" SET spanner.schema_drop_protection_inactivity_period="DURATION" '
Ganti kode berikut:
- DATABASE_NAME: nama database Anda.
- INSTANCE_ID: ID instance database Anda.
- DURATION: antara "0 detik" (inklusif) dan "7 hari" (inklusif). Direkomendasikan: "24 jam".
Menonaktifkan perlindungan penghapusan objek skema
Untuk menonaktifkan perlindungan penghapusan, tetapkan durasi tidak aktif ke nilai durasi nol, "0 detik", atau tetapkan nilai opsi ke null.
GoogleSQL
Untuk mengetahui informasi selengkapnya, lihat ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET OPTIONS ( schema_drop_protection_inactivity_period=null )'
Ganti kode berikut:
- DATABASE_NAME: nama database Anda.
- INSTANCE_ID: ID instance database Anda.
PostgreSQL
Untuk mengetahui informasi selengkapnya, lihat ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET spanner.schema_drop_protection_inactivity_period=null'
Ganti kode berikut:
- DATABASE_NAME: nama database Anda.
- INSTANCE_ID: ID instance database Anda.
Peringatan
Perlindungan penghapusan objek skema tidak diaktifkan dalam skenario berikut:
- Anda membuat database dalam satu jam terakhir.
- Objek memiliki akses baca frekuensi rendah (kurang dari 10 per jam).
Anda membuat objek skema dalam durasi tidak aktif. Artinya, jika objek skema dibuat lebih baru dari durasi yang ditentukan dalam
schema_drop_protection_inactivity_period, objek tersebut tidak dilindungi dari penghapusan. Misalnya, jikaschema_drop_protection_inactivity_periodadalah7d, tabel apa pun yang dibuat dalam 7 hari terakhir dapat dihapus meskipun baru-baru ini diakses.Perilaku ini memfasilitasi pengujian: jika perlindungan diterapkan ke objek yang baru dibuat, Anda tidak akan dapat membuat, menguji, dan segera menghapus tabel sementara, tetapi harus menunggu 7 hari hingga periode tidak aktif berlalu sebelum pembersihan dapat dilakukan.
Batas minimum akses baca default adalah 10 per jam, tetapi Anda dapat mengganti default menggunakan opsi database berikut:
GoogleSQL
Untuk mengetahui informasi selengkapnya, lihat ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET OPTIONS ( schema_drop_protection_usage_lowerbound=<threshold> )'
PostgreSQL
Untuk mengetahui informasi selengkapnya, lihat ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET spanner.schema_drop_protection_usage_lowerbound=<threshold> '
Statistik akses tidak dikumpulkan untuk kasus berikut:
- Akses yang gagal (kueri, DML, dll.) tidak dihitung untuk akses pengguna.
- Akses sistem tidak dihitung.
- Akses tulis (termasuk penyisipan dan update DML) diabaikan untuk indeks.
- Akses tulis diabaikan untuk kolom yang dihasilkan tersimpan.
Pemecahan masalah
Jika objek skema gagal dihapus dan Anda tidak dapat mengidentifikasi apa yang mengaksesnya, lihat hal berikut:
Langkah berikutnya
Pelajari cara mencegah penghapusan database.