結構定義物件捨棄保護機制

本頁說明如何保護資料表、索引和資料欄等結構定義物件,避免遭到意外刪除。

瞭解結構定義物件捨棄安全性

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. 您在過去 1 小時內建立了資料庫。
  2. 您在閒置時間內建立了結構定義物件。
  3. 物件的讀取存取頻率較低 (每小時少於 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> '

系統不會在下列情況收集存取統計資料:

  1. 存取失敗 (查詢、DML 等) 不會計入使用者存取次數。
  2. 系統存取次數不會計入。
  3. 系統會忽略索引的寫入存取權 (包括 DML 插入和更新)。
  4. 系統會忽略儲存的產生資料欄的寫入存取權。

疑難排解

如果結構定義物件無法捨棄,且您無法識別存取該物件的項目,請參閱下列內容:

後續步驟

瞭解如何防止資料庫遭刪除