すべてのプロダクト
Search
ドキュメントセンター

PolarDB:テーブルのごみ箱

最終更新日:Jun 30, 2025

データ定義言語 (DDL) 操作はロールバックできません。誤操作によりデータ損失が発生する可能性があります。たとえば、ユーザーが DROP TABLE 操作を呼び出すと、データが失われる可能性があります。PolarDB はテーブルのごみ箱機能を提供し、削除されたテーブルを一時的に保存します。削除されたテーブルを復元できる保存期間をカスタマイズできます。

重要

テーブルのごみ箱機能はストレージ容量を占有するため、ストレージ料金が発生します。ビジネス要件に基づいて、ごみ箱内のデータの最大保存期間を設定してください。

前提条件

クラスタで、以下のいずれかのデータベースエンジンバージョンが実行されていること。クラスタのデータベースエンジンバージョンのクエリ方法については、「エンジンバージョン5.6、5.7、8.0」をご参照ください。

  • PolarDB for MySQL 8.0.1 リビジョンバージョン 8.0.1.1.2 以降。

  • PolarDB for MySQL 8.0.2 リビジョンバージョン 8.0.2.1.0 以降。

機能

  • テーブルの回収と消去

    • テーブルの回収

      DROP TABLE 文を実行してテーブルを削除するか、DROP DATABASE 文を実行してデータベースを削除すると、PolarDB は削除されたテーブルオブジェクトのみを保持し、これらのオブジェクトをごみ箱の特定のディレクトリに移動します。テーブルオブジェクトに関連しないオブジェクト:

      • 削除されたテーブルに関連しないオブジェクト: システムは、実行した文に基づいてオブジェクトを保持するかどうかを判断します。これらのオブジェクトは回収されません。

      • テーブルにアタッチされ、テーブルのデータを変更する可能性のあるオブジェクト: システムは、トリガー外部キー を含むオブジェクトを削除します。列統計 はテーブルと共にごみ箱に移動されますが、削除されません。

    • テーブルの消去

      ごみ箱はバックグラウンドスレッドを開始し、recycle_bin_retention パラメーターで指定された期間よりも長く保存されているテーブルを非同期的に消去します。データ量の多いテーブルの場合、システムは別のバックグラウンドスレッドを開始して、これらのテーブルを非同期的に消去します。

  • 権限

    PolarDB クラスタが起動すると、__recycle_bin__ という名前のデータベースがごみ箱のデータベースとして初期化されます。__recycle_bin__ データベースはシステムデータベースです。このデータベースを変更または削除することはできません。

    ごみ箱内のテーブルに対して DROP TABLE 文を実行することはできません。ただし、call dbms_recycle.purge_table('table name'); 文を実行して、これらのテーブルを消去することはできます。

    説明

    テーブルを消去するために使用するアカウントは、元のテーブルとごみ箱内のテーブルに対する DROP 権限を持っている必要があります。

  • ごみ箱内のテーブルの命名方法

    ごみ箱は、異なるデータベースのテーブルを __recycle_bin__ データベースに移動します。回収されたテーブルの名前が一意になるように、次の形式で名前を付ける必要があります。

    "__" + <Storage Engine> + <SE private id> 

    次の表にパラメーターを示します。

    パラメーター

    説明

    Storage Engine

    ストレージエンジンの名前。

    SE private id

    ストレージエンジンによって生成される、テーブルを識別するための一意の値。たとえば、InnoDB ではこのパラメーターの値は table id です。

  • 独立した回収

    たとえば、プライマリノードのごみ箱の保存期間を 7 日間、読み取り専用ノードのごみ箱の保存期間を 14 日間と指定できます。

    説明

    ごみ箱のストレージ容量は、指定した保存期間によって異なります。

注意事項

  • __recycle_bin__ データベースと回収するテーブルが異なるファイルシステムにある場合、DROP TABLE 操作は表領域間でファイルを移動するため、時間がかかります。

  • 回収するテーブルが、複数のテーブルを格納する general 表領域にある場合、テーブルの 1 つを回収しても、表領域のファイルは移動されません。

課金

テーブルのごみ箱機能は、クラスタのストレージ容量を使用するため、ストレージ料金が発生します。詳細については、「ストレージの課金ルール」をご参照ください。

使用方法

loose_recycle_bin パラメーターを設定して、ごみ箱を有効または無効にします。ごみ箱を有効にすると、テーブルの回収ルールに基づいてデータが回収されます。ただし、デフォルトではテーブルは消去されません。ごみ箱内のデータによって発生する追加のストレージ料金を回避するために、テーブルの消去を有効にすることをお勧めします。

説明

loose_recycle_scheduler パラメーターは、テーブルの消去機能を制御します。テーブルの消去が無効になっている場合、loose_recycle_bin_retention パラメーターは無視され、データは自動的に削除されずにごみ箱に残ります。

パラメーター

レベル

説明

loose_recycle_bin

グローバルおよびセッション

ごみ箱を有効にするかどうかを指定します。デフォルト値: OFF。有効な値:

  • ON

  • OFF

loose_recycle_scheduler

グローバル

ごみ箱を非同期的に消去するために使用されるスレッドを有効にするかどうかを指定します。デフォルト値: OFF。有効な値:

  • ON

  • OFF

loose_recycle_bin_retention

グローバル

ごみ箱内のデータの最大保存期間。有効な値: 86400 ~ 1209600。単位: 秒。デフォルト値: 604800。値 1209600 は 14 日に相当し、604800 は 7 日に相当します。

重要
  • loose_recycle_scheduler が ON に設定されている場合、テーブルのごみ箱内のデータは loose_recycle_bin_retention で指定された保存期間 (デフォルト値は 7 日間) に基づいて自動的にクリーンアップされます。

  • loose_recycle_scheduler が OFF に設定されている場合、テーブルのごみ箱内のデータは自動的にクリーンアップされずに保持されます。

ごみ箱の管理

PolarDB は、ごみ箱を管理するための以下の文を提供します。

  • show_tables

    次の文を実行して、ごみ箱に一時的に保存されているすべてのテーブルを表示できます。

    call dbms_recycle.show_tables()

    例:

    call dbms_recycle.show_tables();
    +-----------------+---------------+---------------+--------------+---------------------+---------------------+
    | SCHEMA          | TABLE         | ORIGIN_SCHEMA | ORIGIN_TABLE | RECYCLED_TIME       | PURGE_TIME          |
    +-----------------+---------------+---------------+--------------+---------------------+---------------------+
    | __recycle_bin__ | __innodb_1063 | product_db    | t1           | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    | __recycle_bin__ | __innodb_1064 | product_db    | t2           | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    | __recycle_bin__ | __innodb_1065 | product_db    | parent       | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    | __recycle_bin__ | __innodb_1066 | product_db    | child        | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    +-----------------+---------------+---------------+--------------+---------------------+---------------------+
    4 rows in set (0.00 sec)

    次の表にパラメーターを示します。

    パラメーター

    説明

    SCHEMA

    ごみ箱のスキーマ。

    TABLE

    テーブルがごみ箱に移動された後のテーブルの名前。

    ORIGIN_SCHEMA

    テーブルがごみ箱に移動される前の元のテーブルのスキーマ。

    ORIGIN_TABLE

    テーブルの元の名前。

    RECYCLED_TIME

    テーブルがごみ箱に移動された時刻。

    PURGE_TIME

    テーブルがごみ箱から消去される予定時刻。

  • purge_table

    このメソッドは、ごみ箱からテーブルを手動で削除するために使用されます。

    call dbms_recycle.purge_table('TABLE_NAME')
    説明
    • TABLE_NAME パラメーターは、テーブルがごみ箱に移動された後のテーブルの名前を指定します。

    • テーブルを消去するために使用するアカウントは、元のテーブルとごみ箱内のテーブルに対する DROP 権限を持っている必要があります。

    例:

    mysql> call dbms_recycle.purge_table('__innodb_1063');
  • restore_table

    次の文を実行して、ごみ箱からテーブルを復元できます。

    call dbms_recycle.restore_table('RECYCLE_TABLE','DEST_DB','DEST_TABLE');
    説明
    • リビジョンバージョンが 8.0.1.1.12 以降の PolarDB for MySQL 8.0 Cluster Edition のクラスタのみが、restore_table 文を実行してごみ箱からテーブルを復元できます。バージョンの確認方法については、「エンジンバージョン5.6、5.7、8.0」をご参照ください。

    • 上記の文を実行するには、アカウントに __recycle_bin__ データベースに対する ALTER_ACL 権限と DROP_ACL 権限、およびターゲットテーブルに対する CREATE_ACL 権限と INSERT_ACL 権限が必要です。

    次の表にパラメーターを示します。

    パラメーター

    説明

    RECYCLE_TABLE

    ごみ箱から復元するテーブルの名前。

    説明

    このパラメーターのみを指定すると、元のテーブルのデータが復元されます。

    DEST_DB

    復元するテーブルのターゲットデータベース。

    DEST_TABLE

    復元されたテーブルの新しい名前。

    例:

    call dbms_recycle.restore_table('__innodb_1063','testDB','testTable');

お問い合わせ

DDL 操作についてご質問がある場合は、お問い合わせください。