ごみ箱は、原理的にはデータディクショナリテーブルであり、ユーザーが削除したデータベースオブジェクト情報(データベースやテーブルなどの情報を含む)を格納するために使用されます。ユーザーが削除した情報はごみ箱に移動された後も物理的なスペースを占有し続けます。ただし、手動でクリーンアップ(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でデータベースオブジェクトを復元する際は、従属関係に従った順序で実行する必要があります。すなわち、データベース > テーブルの順です。テーブルを復元すると、インデックスも一緒に復元されます。
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;