データベースオブジェクトを頻繁に削除して再作成すると、ごみ箱に大量のデータが発生します。ごみ箱をクリーンアップすることで、これらのデータを削除できます。
ごみ箱のクリーンアップには、主に手動と自動の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以外の場合、一定期間(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';(オプション)完了後、以下のステートメントを実行して、ごみ箱内の条件に合致するオブジェクトがクリーンアップされたかどうかを確認できます。
obclient [(none)]> SHOW RECYCLEBIN;
関連ドキュメント
ごみ箱に関するその他の情報については、以下を参照してください: