ごみ箱とは、原理的にはデータ辞書テーブルであり、ユーザーが削除したデータベースオブジェクト情報を格納するためのものです。これにはデータベースやテーブルなどの情報が含まれます。ユーザーが削除した情報はごみ箱に移された後も物理的な領域を占有し続けますが、手動でクリーンアップ(PURGE)するか、オブジェクトが定期的にデータベースシステムによって削除されない限り、そのまま残ります。
ゴミ箱オブジェクト
現行バージョンでは、ゴミ箱に移動できるオブジェクトにはインデックス、テーブル、データベース、およびテナントが含まれます。現在、テナントを削除できるのはsysテナントのみであるため、MySQLユーザーテナントとOracleユーザーテナントが削除された場合、それらはsysテナントのゴミ箱にのみ移動されます。
sysテナントは、データベース、テーブル、インデックス、およびテナントを管理するゴミ箱オブジェクトをサポートしています。MySQLユーザーテナントは、データベース、テーブル、およびインデックスを管理するゴミ箱オブジェクトをサポートしています。
Oracleユーザーテナントは、テーブルとインデックスを管理するゴミ箱オブジェクトをサポートしています。
注意
- インデックスを直接削除すると、そのインデックスはゴミ箱に移動されません。テーブルを削除すると、そのテーブル上のインデックスはメインテーブルと一緒にゴミ箱に移動されます。
- ゴミ箱オブジェクトに対しては、いかなるクエリやDML操作も行うことができません。DDL操作においても、PurgeとFlashback操作のみがサポートされています。
- テナントゴミ箱の管理は主に
sysテナントが行います。
ゴミ箱の確認
テナント管理者は、以下のコマンドを使用して、ゴミ箱内のオブジェクトを確認できます:
obclient> SHOW RECYCLEBIN;
ゴミ箱の有効化/無効化
テナント作成時、デフォルトでゴミ箱は無効です。ゴミ箱を有効にすると、データベースオブジェクトに対してDROP操作を実行した後、オブジェクトはゴミ箱に移動されます。ゴミ箱の有効化/無効化を制御するコマンドには、グローバルレベルとセッションレベルがあります:
グローバルレベルの有効化・無効化コマンドは以下のとおりです:
obclient> SET GLOBAL recyclebin = ON/OFF;セッションレベルの有効化・無効化コマンドは以下のとおりです:
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 操作ではオブジェクトおよびその下位のオブジェクト(データベース > テーブル > インデックス)もすべて削除される点に注意してください。
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;