データベースオブジェクトを頻繁に削除して再作成すると、ごみ箱に大量のデータが蓄積されます。ごみ箱をクリーンアップすることでこれらのデータを削除できます。
ごみ箱のクリーンアップには、手動と自動の2種類の方法があります。システムテナント(sysテナント)はINDEX、TABLE、DATABASE、TENANTの4種類のごみ箱オブジェクトをクリーンアップでき、MySQLユーザーテナントはINDEX、TABLE、DATABASEの3種類のごみ箱オブジェクトをクリーンアップできます。OracleユーザーテナントはINDEXとTABLEの2種類のごみ箱オブジェクトをクリーンアップできます。
シュートダウンフォルダの手動クリーンアップ
PURGE コマンドを使用して、シュートダウンフォルダを手動でクリーンアップできます。
注意事項
Purge操作は、オブジェクトおよびその下位のオブジェクト(つまり、データベース→テーブル→インデックス)を削除します。例えば、MySQLモードでは、データベースをPurgeすると、そのデータベースとそれに属するテーブルおよびテーブルインデックスが削除されます。
あるオブジェクトの上位オブジェクトがPurgeされると、現在のゴミ箱に関連付けられている次の階層のオブジェクトもPurgeされます。
Purge操作を実行する前に、ゴミ箱で削除対象のオブジェクトを確認することを推奨します。Purge操作を実行すると、OceanBaseデータベースのゴミ箱からはもはやオブジェクト情報を検索できなくなり、実際のデータも最終的にはガベージとして回収されます。
操作手順
sysテナントまたはユーザーテナントのテナント管理者としてデータベースにログインします。説明
- MySQLテナントの管理者ユーザーは
rootユーザー、Oracleテナントの管理者ユーザーはSYSユーザーです。 - テナントのごみ箱オブジェクトをクリーンアップする必要がある場合は、
sysテナントでデータベースにログインする必要があります。
接続例は以下のとおりです。データベースへの接続時は、実際の環境に基づいてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -Aデータベースへの接続方法の詳細については、データベース接続の概要 (MySQLモード)およびデータベース接続の概要(Oracleモード)を参照してください。
- MySQLテナントの管理者ユーザーは
SHOW RECYCLEBINステートメントを実行し、ごみ箱内のオブジェクト名を取得します。obclient [(none)]> SHOW RECYCLEBIN; +-------------------------------------+-------------------+----------+----------------------------+ | OBJECT_NAME | ORIGINAL_NAME | TYPE | CREATETIME | +-------------------------------------+-------------------+----------+----------------------------+ | RECYCLE_$_100017_1672050541224936 | oracle001 | TENANT | 2023-01-16 11:01:40.258000 | | __recycle_$_100017_1673426335319344 | __idx_500788_idx1 | INDEX | 2023-01-11 16:38:55.318878 | | __recycle_$_100017_1673426335331800 | t1 | TABLE | 2023-01-11 16:38:55.331481 | | __recycle_$_100017_1673854707660504 | infotest | DATABASE | 2023-01-16 15:38:27.660436 | +-------------------------------------+-------------------+----------+----------------------------+ 4 rows in setビジネスニーズに応じて、適切なシナリオを選択してごみ箱をクリーンアップします。
テナントをごみ箱から完全に削除する
テナントをごみ箱から完全に削除すると、そのテナントのすべてのオブジェクトも一緒に削除されます。テナントごみ箱オブジェクトのクリーンアップは、
sysテナントのみサポートしています。ステートメントは次のとおりです:
obclient [(none)]> PURGE TENANT tenant_name;ここで、
tenant_nameはごみ箱内の名前を表します。元の名前を使用することもできます。元の名前を使用する場合、ごみ箱内に現在複数の同じ元の名前が存在する場合、最も早くごみ箱に入ったテナントが削除されます。例:
obclient [(none)]> PURGE TENANT oracle001; obclient [(none)]> PURGE TENANT RECYCLE_$_100017_1672050541224936;ごみ箱から指定されたデータベースを物理的に削除する
テナントごみ箱内のデータベースオブジェクトのクリーンアップは、
sysテナントとMySQLユーザーテナントのみサポートしています。obclient> PURGE DATABASE object_name;object_nameは、そのスキーマオブジェクトのごみ箱内の名前を表します。元の名前の使用はサポートされていません。例:
obclient [(none)]> PURGE DATABASE __recycle_$_100017_1673854707660504;ごみ箱から指定されたテーブルを物理的に削除する
obclient> PURGE TABLE object_name;object_nameは、そのスキーマオブジェクトのごみ箱内の名前を表します。元の名前を使用することもできます。元の名前を使用する場合、ごみ箱内に現在複数の同じ元の名前が存在する場合、最も早くごみ箱に入ったテーブルが削除されます。例:
obclient [(none)]> PURGE TABLE __recycle_$_100017_1673426335331800;ごみ箱から指定されたインデックステーブルを物理的に削除する
obclient> PURGE INDEX object_name;object_nameは、そのスキーマオブジェクトのごみ箱内の名前を表します。元の名前の使用はサポートされていません。例:
obclient [(none)]> PURGE INDEX __recycle_$_100017_1673426335319344;ごみ箱からすべてのオブジェクトを完全に削除する
obclient [(none)]> PURGE RECYCLEBIN;
コマンドの実行が成功した後、再度
SHOW RECYCLEBINステートメントを実行して、ごみ箱内のオブジェクトが正常にクリーンアップされたかどうかを確認します。obclient [(none)]> SHOW RECYCLEBIN;
シュートダウンの自動クリーンアップ
OceanBaseデータベースは現在、クラスタレベルの構成パラメータrecyclebin_object_expire_timeを使用して、シュートダウンに保存された期限切れのSchemaオブジェクトを自動的にクリーンアップする機能をサポートしています。デフォルト値は0秒です。具体的には:
値が
0sの場合、シュートダウンの自動Purge機能が無効であることを意味します。値が
0s以外の場合、一定時間前にシュートダウンに移動したオブジェクトをPurgeすることを意味します。
クラスタレベルの構成パラメータrecyclebin_object_expire_timeの詳細については、recyclebin_object_expire_timeを参照してください。
rootユーザーでデータベースのsysテナントにログインします。接続例は以下のとおりです。データベースへの接続時は、実際の環境に基づいてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -Aデータベースへの接続手順の詳細については、データベースへの接続を参照してください。
以下のステートメントを実行して、シュートダウンの自動クリーンアップポリシーを確認します。
obclient [(none)]> SHOW PARAMETERS LIKE 'recyclebin_object_expire_time';クエリ結果は次のとおりです:
+-------+----------+----------------+----------+-------------------------------+-----------+-------+--------------------------------------------------------------------------------------------------+--------------+---------+---------+-------------------+---------------+-----------+ | zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level | default_value | isdefault | +-------+----------+----------------+----------+-------------------------------+-----------+-------+--------------------------------------------------------------------------------------------------+--------------+---------+---------+-------------------+---------------+-----------+ | zone1 | observer | 172.xx.xxx.xxx | 2882 | recyclebin_object_expire_time | TIME | 0s | recyclebin object expire time, default 0 that means auto purge recyclebin off. Range: [0s, +∞) | ROOT_SERVICE | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE | 0s | 1 | +-------+----------+----------------+----------+-------------------------------+-----------+-------+--------------------------------------------------------------------------------------------------+--------------+---------+---------+-------------------+---------------+-----------+ 1 row in set以下のステートメントを実行して、シュートダウンの自動クリーンアップ機能を有効にし、シュートダウンに移動してから何日経過したオブジェクトをクリーンアップするかを指定します。
シュートダウンの自動クリーンアップ機能を有効にし、7日前にシュートダウンに移動したSchemaオブジェクトを回収する例ステートメントは次のとおりです:
obclient [(none)]> ALTER SYSTEM SET recyclebin_object_expire_time = '7d';(オプション)完了後、以下のステートメントを実行して、条件に一致するオブジェクトがシュートダウンからクリーンアップされたかどうかを確認できます。
obclient [(none)]> SHOW RECYCLEBIN;
関連ドキュメント
ごみ箱に関する詳細は、以下のドキュメントを参照してください: