元ドキュメント: テーブルごみ箱
テーブルリサイクル機能
概要
テーブルごみ箱は、誤削除によるデータ損失を防止するためのデータ安全機能です。有効化すると、DROP TABLE 操作を内部的に RENAME 操作に変換し、削除されたテーブルをシステムスキーマ(__tdsql__recycle_bin__)に一時保管します。FLASHBACK TABLE コマンドにより、削除されたテーブルを迅速に復元できます。
動作原理
- 削除時:
DROP TABLE db.t→RENAME TABLE db.t TO __tdsql__recycle_bin__.<RECYCLED_TABLE> - 復元時:
RENAME TABLE __tdsql__recycle_bin__.<RECYCLED_TABLE> TO db.t
制限事項
- Binlog との排他: ごみ箱機能は ログサービス(Binlog) やディザスタリカバリインスタンスと同時に有効化できません(DROP を RENAME に変換するため、データ同期が破綻します)
- 対象範囲: データベース、トリガー、ファンクション、ストアドプロシージャ、一時テーブルは非対応
- パーティション: パーティションテーブルの個別サブパーティションの退避・復元には非対応
- 権限: 一般ユーザーはテーブルを復元できません。管理者/スーパーユーザー権限が必要です
使用方法
ごみ箱の有効化/無効化
sql
-- 有効化
SET PERSIST tdsql_recycle_bin_enabled = 1;
-- 無効化
SET PERSIST tdsql_recycle_bin_enabled = 0;デフォルトでは無効です。有効化すると、テーブルを手動または自動でパージするまでストレージ領域は解放されません。
ごみ箱の内容を確認
sql
SHOW RECYCLEBIN;出力フィールド:
| フィールド | 説明 |
|---|---|
origin_schema | 元のデータベース名 |
origin_table | 元のテーブル名 |
recycle_table | ごみ箱内のエンコード名 |
drop_time | テーブルが削除された日時 |
purge_time | 自動クリーンアップの予定日時(デフォルト 7 日後) |
テーブルの復元
sql
-- 基本的な復元
FLASHBACK TABLE $recycle_table_name TO BEFORE DROP;
-- リネームして復元
FLASHBACK TABLE `bin$zxrh/bsnned9vygu4ioafg==$1` TO BEFORE DROP RENAME TO sbtest11;ごみ箱をバイパスして完全削除
sql
DROP TABLE $NAME PURGE;ごみ箱のクリーンアップ
sql
-- 特定テーブルのパージ
PURGE RECYCLEBIN $recycle_table_name;
-- ごみ箱全体のパージ
PURGE RECYCLEBIN;設定パラメータ
| パラメータ | デフォルト | 説明 |
|---|---|---|
tdsql_recycle_bin_enabled | 0 | ごみ箱の有効化(1)/ 無効化(0) |
tdsql_recycle_bin_retention | 604800 | 保持期間(秒単位。デフォルト: 7 日) |
tdsql_recycle_bin_max_size | 18446744073709551615 | ごみ箱に保存可能なオブジェクトの最大数 |
tdsql_recycle_bin_drop_if_exceed_limit | 1 | 上限超過時の動作。1: テーブルを完全削除、0: テーブルを削除しない |