ごみ箱は、原理的にはデータディクショナリテーブルであり、ユーザーが削除したデータベースオブジェクト情報(データベースやテーブルなどの情報を含む)を格納するために使用されます。ユーザーが削除した情報はごみ箱に入れられた後も物理的なスペースを占有し続けます。手動でクリーンアップ(PURGE)するか、オブジェクトがデータベースシステムによって定期的に削除されない限りはそうなります。
ごみ箱の対象
現在のバージョンでは、ごみ箱に移動可能なオブジェクトは、インデックス、テーブル、データベース、およびテナントです。現在、テナントの削除は sys テナントのみが可能であるため、MySQLユーザーテナントとOracleユーザーテナントが削除された場合、それらのテナントは sys テナントのごみ箱にしか移動できません。
sysテナントが管理できるごみ箱のオブジェクトは、データベース、テーブル、インデックス、およびテナントです。MySQLユーザーテナントが管理できるごみ箱のオブジェクトは、データベース、テーブル、およびインデックスです。
Oracleユーザーテナントが管理できるごみ箱のオブジェクトは、テーブルとインデックスです。
注意
- インデックスを直接削除すると、そのインデックスはごみ箱には入りません。テーブルを削除すると、そのテーブルにあるインデックスは主テーブルと共にごみ箱に入ります。
- ごみ箱のオブジェクトに対しては、いかなるクエリやDML操作も実行できません。DDL操作でも、PurgeとFlashbackのみがサポートされています。
- テナントごみ箱の管理は、主に
sysテナントが行います。
ごみ箱の確認
テナント管理者は以下のコマンドを使用して、ごみ箱内のオブジェクトを確認できます:
obclient> SHOW RECYCLEBIN;
ごみ箱の有効化・無効化
テナント作成時、ごみ箱はデフォルトで無効な状態になります。ごみ箱を有効にすると、データベースオブジェクトに対して DROP 操作を実行した後、そのオブジェクトはごみ箱に移動します。ごみ箱の有効化・無効化を制御するコマンドは、GlobalレベルとSessionレベルがあります:
Globalレベルでの有効化・無効化のステートメントは以下のとおりです:
obclient> SET GLOBAL recyclebin = ON/OFF;Sessionレベルでの有効化・無効化のステートメントは以下のとおりです:
obclient> SET @@recyclebin = ON/OFF;
ごみ箱からの復元
FLASHBACK コマンドを使用すると、ごみ箱内のデータベースおよびテーブルオブジェクトを復元できます。このコマンドはテナントの管理者ユーザーのみが使用できます。復元時にはオブジェクト名を変更できますが、既存のオブジェクトと重複しないようにしてください。
以下の例文は、ごみ箱内のテナント、データベース、およびテーブルオブジェクトを復元する方法を示しています:
テナントの復元
obclient> FLASHBACK TENANT tenant_name TO BEFORE DROP [RENAME to new_tenant_name];データベースオブジェクトの復元
obclient> FLASHBACK DATABASE object_name TO BEFORE DROP [RENAME TO database_name];テーブルオブジェクトの復元
obclient> FLASHBACK TABLE object_name TO BEFORE DROP [RENAME to table_name];
コマンドの制限事項は以下の通りです:
FLASHBACKのデータベースオブジェクトの順序は従属関係に従う必要があります。すなわち、Database > Table の順です。テーブルを復元すると、インデックスも一緒に復元されます。
PURGEコマンドを使用するとインデックスを個別に削除できますが、FLASHBACKコマンドではインデックスを個別に復元することはできません。テーブルがごみ箱に入る前に特定のテーブルグループに属していた場合、そのテーブルグループを削除してからそのテーブルを復元すると、それはどのテーブルグループにも属さなくなります。テーブルグループが存在する場合は、復元後もそのテーブルは元のテーブルグループに残ります。
ごみ箱のクリーンアップ
データベースオブジェクトの頻繁な削除と再作成により、ごみ箱には大量のデータが発生します。これらのデータは PURGE コマンドでクリーンアップできます。ただし、PURGE 操作は、対象オブジェクトとその下位のオブジェクト(Database > Table > Index)を削除します。
PURGE コマンドを実行すると、OceanBaseデータベースのごみ箱ではもはやオブジェクト情報を検索することができず、実際のデータも最終的にはガベージコレクションされます。あるオブジェクトの上位オブジェクトがPurgeされると、現在のごみ箱に関連付けられている次の階層のオブジェクトもPurgeされます。
以下の例は、PURGE コマンドを使用してごみ箱内のデータをクリーンアップする方法の一部を示しています:
sysテナントがごみ箱から指定したテナントを物理的に削除します。obclient> PURGE TENANT tenant_name;ごみ箱から指定したデータベースを物理的に削除します。
obclient> PURGE DATABASE object_name;ごみ箱から指定したテーブルを物理的に削除します。
obclient> PURGE TABLE object_name;ごみ箱から指定したインデックステーブルを物理的に削除します。
obclient> PURGE INDEX object_name;ごみ箱全体を空にします。
obclient> PURGE RECYCLEBIN;