本頁說明如何保護資料表、索引和資料欄等結構定義物件,避免遭到意外刪除。
瞭解結構定義物件捨棄安全性
Spanner 的結構定義物件捨棄保護機制會根據結構定義物件存取統計資料,判斷物件是否可安全捨棄。如果系統判定物件不安全,就會拒絕使用者捨棄結構化物件的要求。如果捨棄這類物件,可能導致仍存取該物件的用戶端作業失敗。此外,如要還原已捨棄的物件,且不造成資料遺失,難度非常高,甚至不可能。
為此,Spanner 會追蹤每個結構定義物件的存取統計資料。這類存取權包括 DML 插入、更新或刪除、SQL 查詢、API 寫入和 API 讀取。Spanner 會根據這些存取統計資料,判斷結構定義物件是否仍在使用中。如果物件最近曾遭存取,可能仍在使用中。
啟用結構定義物件捨棄保護機制
如要啟用掉落防護功能,請將掉落防護功能的閒置時間長度設為非零值,例如「24h」或「2d」。最短時間為「0 秒」,最長時間為「7 天」。建議將閒置時間設為「24 小時」或更長。
如果將閒置時間長度設為「24 小時」,只有在過去 24 小時內未存取物件時,才能捨棄結構定義物件。
GoogleSQL
詳情請參閱「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" )'
更改下列內容:
- DATABASE_NAME:資料庫名稱。
- INSTANCE_ID:資料庫執行個體的 ID。
- DURATION:介於「0s」(含) 和「7d」(含) 之間。 建議:「24h」。
PostgreSQL
詳情請參閱「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" '
更改下列內容:
- DATABASE_NAME:資料庫名稱。
- INSTANCE_ID:資料庫執行個體的 ID。
- DURATION:介於「0s」(含) 和「7d」(含) 之間。 建議:「24h」。
停用結構定義物件捨棄防護功能
如要停用捨棄保護機制,請將閒置時間長度設為零時間長度值「0s」,或將選項值設為空值。
GoogleSQL
詳情請參閱「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 )'
更改下列內容:
- DATABASE_NAME:資料庫名稱。
- INSTANCE_ID:資料庫執行個體的 ID。
PostgreSQL
詳情請參閱「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'
更改下列內容:
- DATABASE_NAME:資料庫名稱。
- INSTANCE_ID:資料庫執行個體的 ID。
注意事項
在下列情況中,系統不會啟用結構定義物件捨棄保護機制:
- 您在過去 1 小時內建立了資料庫。
- 您在閒置時間內建立了結構定義物件。
- 物件的讀取存取頻率較低 (每小時少於 10 次)。
預設的每小時讀取存取權門檻為 10,但您可以使用下列資料庫選項覆寫預設值:
GoogleSQL
詳情請參閱「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
詳情請參閱「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> '
系統不會在下列情況收集存取統計資料:
- 存取失敗 (查詢、DML 等) 不會計入使用者存取次數。
- 系統存取次數不會計入。
- 系統會忽略索引的寫入存取權 (包括 DML 插入和更新)。
- 系統會忽略儲存的產生資料欄的寫入存取權。
疑難排解
如果結構定義物件無法捨棄,且您無法識別存取該物件的項目,請參閱下列內容:
後續步驟
瞭解如何防止資料庫遭刪除。