データベースオブジェクトの頻繁な削除と再作成により、ごみ箱には大量のデータが発生します。ごみ箱をクリーンアップすることで、これらのデータを削除できます。
ごみ箱のクリーンアップには、主に手動と自動の2つの方法があります。システムテナント(sysテナント)はINDEX、TABLE、DATABASE、TENANTの4種類のごみ箱オブジェクトをクリーンアップでき、MySQLユーザーテナントはINDEX、TABLE、DATABASEの3種類をクリーンアップできます。OracleユーザーテナントはINDEXとTABLEの2種類をクリーンアップできます。
ごみ箱の手動クリーンアップ
PURGEコマンドを使用して、ごみ箱を手動でクリーンアップできます。
注意事項
Purge操作は、対象オブジェクトとその子孫オブジェクト(つまり、Database -> Table -> Indexの順序で)を削除します。例えば、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以外の場合、指定された期間(recyclebin_object_expire_timeで設定された値)前にゴミ箱に入ったオブジェクトを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';ゴミ箱の自動クリーンアップ機能を有効にした後、V4.4.2バージョンでは:
V4.4.2 BP1およびそれ以前のバージョンでは、ゴミ箱の自動クリーンアップアクションはシステムバックグラウンドで定期的にトリガーされ、デフォルトの時間間隔は10分です。
V4.4.2 BP2以降のバージョンでは、ゴミ箱の自動クリーンアップアクションはバックグラウンドのスケジュールタスク
SCHEDULED_PURGE_RECYCLEBINによって制御され、デフォルトのトリガー時間間隔は10分です。ユーザーはビジネスニーズに応じて、このスケジュールタスクのトリガー時間間隔を変更できます。詳細な変更操作については、SET_ATTRIBUTEを参照してください。
(オプション)一定時間後、以下のステートメントを実行して、ゴミ箱内の条件に合致するオブジェクトがクリーンアップされたかどうか確認できます。
obclient [(none)]> SHOW RECYCLEBIN;
関連ドキュメント
ゴミ箱に関するその他の内容については、以下の情報を参照してください: