DDLステートメントはロールバックできません。 DDLステートメントを使用しているときに誤ってテーブルを削除した場合、データが失われ、復元できません。 この問題を解決するために、AnalyticDB for MySQLは、削除されたテーブルをテーブルごみ箱に一時的に保存できるテーブルごみ箱機能を提供します。 誤って削除されたデータを復元するために、テーブルのごみ箱の保持期間を設定できます。
前提条件
V3.2.3.0以降のAnalyticDB for MySQLクラスターが作成されます。
AnalyticDB for MySQLのマイナーバージョンを照会するには
Data Lakehouse Editionクラスターで、SELECT adb_version();
文を実行します。 クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。 AnalyticDB For MySQL Data Warehouse Editionクラスターのマイナーバージョンを表示および更新する方法については、「クラスターのマイナーバージョンの更新」をご参照ください。
使用上の注意
テーブルごみ箱機能は、テーブルエンジンがXUANWUまたはXUANWU_V2であるAnalyticDB for MySQL内部テーブルのみをサポートします。 テーブルごみ箱機能は外部テーブルをサポートしていません。
INSERT OVERWRITE SELECT
ステートメントの実行中にDROP TABLE
ステートメントを実行すると、削除されたテーブルはテーブルのごみ箱に移動され、INSERT OVERWRITE SELECT
ステートメントの実行に失敗します。BUILD
ステートメントの実行中にDROP TABLE
ステートメントを実行すると、削除されたテーブルがテーブルのごみ箱に移動され、BUILD
ステートメントが期待どおりに実行されます。テーブルごみ箱に移動されたテーブルは、ディスクストレージを使用します。
テーブルのごみ箱の紹介
テーブルごみ箱は、削除されたテーブルを一時的に保存するために使用されます。 DROP
ステートメントを初めて実行すると、AnalyticDB for MySQLはADB_RECYCLE_BINという名前の隠しデータベースを作成し、削除されたテーブルをADB_RECYCLE_BINデータベースに移動します。
リサイクルメカニズム
DROP TABLE
ステートメントを使用して削除されたテーブルは、テーブルのごみ箱に自動的に移動されます。
DROP TABLEを使用して強制的に削除されたテーブル... FORCE
文は直接削除されます。
保持期間とクリーンアップメカニズム
デフォルトでは、削除されたテーブルは、テーブルのごみ箱に移動してから3日間保持されます。 3日後、保持されたテーブルは自動的に削除されます。 保持期間とクリーンアップメカニズムを設定できます。 詳細については、このトピックの「テーブルのごみ箱設定」セクションを参照してください。 PURGE
ステートメントを実行して、テーブルのごみ箱をクリーンアップすることもできます。 詳細については、このトピックの「テーブルのごみ箱からテーブルを削除する」を参照してください。
テーブルのごみ箱でサポートされているSQL文
テーブルのごみ箱内のテーブルに対してステートメントを実行するには、
DROP
アクセス許可がソーステーブルに対して必要です。
テーブルごみ箱内のテーブルの命名規則
ADB_RECYCLE_BINデータベースに移動されたテーブルは、異なるデータベースから収集されます。 一意のテーブル名を確保するために、テーブルのごみ箱内のテーブルの名前は、SourceDatabaseName_SourceTableName_Timestampの形式で指定されます。
たとえば、ユーザーが2024年1月1日00:00:00にadb_demoデータベースからcustomerという名前のテーブルを削除したとします。 顧客テーブルは、テーブルのごみ箱でadb_demo_customer_1704038400000に名前が変更されます。
新しいテーブル名の長さが制限を超えると、ソーステーブルとソースデータベースの名前は自動的に順番に切り捨てられます。 この場合、新しいテーブル名のソースデータベース名とソーステーブル名が不完全な場合があります。
テーブルがすでにデータベースからテーブルごみ箱に移動されていて、同じ名前の別のテーブルが同じデータベースから削除されている場合、最近削除されたテーブルはテーブルごみ箱に移動され、別のタイムスタンプを使用して名前が変更されます。
テーブルごみ箱の設定
SET ADB_CONFIG
文を実行して、テーブルのごみ箱の設定を変更できます。 次の表に、ステートメントのパラメーターを示します。
パラメーター | 説明 |
ドロップ_力 |
|
RECYCLE_BIN_EXPIRED_TIME | テーブルのごみ箱に移動した後のテーブルの保持期間。 このパラメーターは、テーブルのごみ箱に既に存在するテーブルには適用されません。 単位:ミリ秒。 デフォルト値: 259200000 (3日) 。 重要 ディスクストレージの消耗を防ぐために、適切な保存期間を指定することを推奨します。 |
ENABLE_RECYCLE_BIN_CLEAN_EXPIRED_テーブル | テーブルごみ箱の非同期クリーンアップスレッド機能を有効にするかどうかを指定します。 デフォルト値は TRUE です。 重要 非同期クリーンアップスレッド機能を無効にしないことを推奨します。 |
RECYCLE_BIN_CLEAN_EXPIRED_TABLE_インターバル | テーブルのごみ箱が非同期クリーンアップスレッドを実行する間隔。 単位:ミリ秒。 デフォルト値: 60000 |
テーブルのごみ箱を管理する
テーブルのごみ箱内のテーブルの照会
構文
テーブルごみ箱内のすべてのテーブルを照会します。
SHOW RECYCLE_BIN ALL;
テーブルごみ箱内の特定のテーブルに関する情報を照会します。 同じデータベース名とテーブル名を持つ複数のテーブルが返される場合があります。
SHOW RECYCLE_BIN TABLE <SourceDatabaseName>.<SourceTableName>;
テーブルごみ箱内の特定のテーブルに関する情報を照会します。 同じテーブル名でデータベース名が異なる複数のテーブルが返される場合があります。
SHOW RECYCLE_BIN TABLE <SourceTableName>;
テーブルごみ箱内の特定のデータベースに属するすべてのテーブルを照会します。
SHOW RECYCLE_BIN DATABASE <SourceDatabaseName>;
例
テーブルごみ箱内のすべてのテーブルを照会します。
SHOW RECYCLE_BIN ALL;
サンプル結果:
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 | | testUser | ADB_RECYCLE_BIN | adb_demo_orders_1720086094102 | adb_demo | orders | 2024-07-04 17:41:37 | 2024-07-07 17:41:37 | | testUser | ADB_RECYCLE_BIN | testdb_customer_1720085752664 | testdb | customer | 2024-07-04 17:35:56 | 2024-07-07 17:35:56 | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
テーブルごみ箱内のadb_demo.customerテーブルに関する情報を照会します。
SHOW RECYCLE_BIN TABLE adb_demo.customer;
サンプル結果:
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
テーブルごみ箱内のソーステーブル名がcustomerであるすべてのテーブルを照会します。
SHOW RECYCLE_BIN TABLE customer;
サンプル結果:
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 | | testUser | ADB_RECYCLE_BIN | testdb_customer_1720085752664 | testdb | customer | 2024-07-04 17:35:56 | 2024-07-07 17:35:56 | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
テーブルごみ箱内のadb_demoデータベースに属するすべてのテーブルを照会します。
SHOW RECYCLE_BIN DATABASE adb_demo;
サンプル結果:
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 | | testUser | ADB_RECYCLE_BIN | adb_demo_orders_1720086094102 | adb_demo | orders | 2024-07-04 17:41:37 | 2024-07-07 17:41:37 | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
テーブルのごみ箱からテーブルを復元
ルール
復元されたテーブルは、テーブルのごみ箱に移動する前に名前を使用します。
ソースデータベースにテーブルを復元したいが、データベースに同じ名前の別のテーブルが含まれている場合は、データベース内の既存のテーブルの名前を変更したり、削除したり、別のデータベースに移動したりできます。
データベース名とテーブル名が同じでタイムスタンプが異なる複数のテーブルを復元すると、AnalyticDB for MySQLは最新のタイムスタンプでテーブルを復元し、他のテーブルのエラーが報告されます。 この場合、復元したテーブルの名前を変更、削除、または別のデータベースに移動できます。
構文
テーブルのごみ箱からソースデータベースにすべてのテーブルを復元します。
RESTORE RECYCLE_BIN ALL;
特定のテーブルをテーブルのごみ箱からソースデータベースに復元します。
RESTORE RECYCLE_BIN TABLE <Name of the table in the ADB_RECYCLE_BIN database>;
例
テーブルごみ箱からadb_demo_customer_1720086117277テーブルを復元します。
RESTORE RECYCLE_BIN TABLE adb_demo_customer_1720086117277;
テーブルごみ箱からテーブルを削除する
構文
テーブルのごみ箱からすべてのテーブルを削除します。
PURGE RECYCLE_BIN ALL;
テーブルのごみ箱から特定のテーブルを削除します。
PURGE RECYCLE_BIN TABLE <Name of the table in the ADB_RECYCLE_BIN database>;
例
テーブルごみ箱からadb_demo_customer_1720086117277テーブルを削除します。
PURGE RECYCLE_BIN TABLE adb_demo_customer_1720086117277;
テーブルごみ箱内のテーブルの保存期間の変更
構文
テーブルごみ箱のテーブルの保存期間を変更します。
SET adb_config RECYCLE_BIN_EXPIRED_TIME=<Retention period of tables>;
テーブルの保持期間を変更すると、変更後に削除されたテーブルに対してのみ、新しい保持期間が有効になります。 以前の保持期間は、テーブルのごみ箱内の既存のテーブルに適用されます。
例
テーブルごみ箱のテーブルの保存期間を2日に変更します。
# The retention period is calculated by using the following formula: 2 × 24 × 3600 × 1000 = 172800000. Unit: milliseconds.
SET adb_config RECYCLE_BIN_EXPIRED_TIME=172800000;