ClickHouse を使用する場合でも、他のデータベースを使用する場合でも、震えながらテーブルを削除した場合、それを復元するのは非常に困難です。しかし、ClickHouse はUNDROP TABLE
、手の震えによってテーブルが誤って削除された場合でも、短時間で迅速に復元できる機能をサポートしています。
これはUNDROP TABLE
まだ実験的な機能です。体験したい場合は、最新のv23.3.1.2823-ltsブランチを使用できます。以下で機能全体を体験してみましょう。
テストテーブルの作成
現在、Atomic ライブラリ エンジンの一部のテーブル エンジンのみがサポートされておりUNDROP TABLE
、MergeTree
、ReplicatedMergeTree
、Distributed
などLog
はすべてサポートされていますが、一時テーブルは をUNDROP TABLE
使用した復元をサポートしていません。ここでは、エクスペリエンスのために、デフォルトのデフォルト ライブラリ エンジンの下に MergeTree テーブル エンジンを作成できます。テーブル作成ステートメントは次のとおりです。
create table test (id Int32) engine=MergeTree() order by id;
テーブルが構築されたら、リカバリ後にテーブルが正常であるかどうかのその後の検証を容易にするために、いくつかのテスト データを書き込みます。
insert into test values (1),(2),(3),(4),(5);
データが正常に書き込まれたことを確認します。
select * from test;
┌─id─┐
│ 1 │
│ 2 │
│ 3 │
│ 4 │
│ 5 │
└────┘
テーブルの削除
テーブルを作成してデータを書き込んだ後、テーブルの削除操作を実行します。
drop table test;
この時点で、検証テーブルは削除されます。
select * from test;
Code: 60. DB::Exception: Received from localhost:9000. DB::Exception: Table default.test doesn't exist. (UNKNOWN_TABLE)
この時点で、テーブルを再度クエリすると、テーブルが存在しないことを示すプロンプトが表示され、削除が成功したことがわかります。
新しいバージョンでは、system.dropped_tables
削除されたテーブルを表示するためのシステム テーブルが提供されます。
select * from system.dropped_tables\G
Row 1:
──────
index: 0
database: default
table: test
uuid: 87b7d1d6-f86d-485e-a254-79d9c58c7464
engine: MergeTree
metadata_dropped_path: /data/ClickHouse/build/programs/data/metadata_dropped/default.test.87b7d1d6-f86d-485e-a254-79d9c58c7464.sql
table_dropped_time: 2023-04-02 12:30:13
このシステムテーブルは、削除されたがクリーンアップされていないデータを記録するテーブル、つまり復元可能なテーブルである。
回復フォーム
ClickHouse のデフォルト設定では、削除されたテーブルは 8 分後にタスクのクリアを開始するため、握手によって誤って削除された場合でも、UNDROP TABLE
それを復元するために使用できます。
説明書
1. アンドロップテーブル {test}
ClickHouse は同じ名前のテーブルの作成と削除を続けることができるため、この方法で最近削除されたdefault.test テーブルが見つかります。
2. アンドロップテーブル {test} UUID {uuid}
最後に削除されたテーブルを復元したくない場合は、テーブルの uuid を指定して復元できます。特定の uuid はsystem.dropped_tables
システム テーブルでクエリできます。
3. クラスター {cluster} 上のテーブル {test} をアンドロップします
テーブルを削除するときにこのステートメントを使用するかどうかは問題ではありませんON CLUSTER
。これUNDROP TABLE
もサポートされていますON CLUSTER
。
回復テスト
は現在UNDROP TABLE
実験的な機能なので、allow_experimental_undrop_table_query
有効にするには:
undrop table test settings allow_experimental_undrop_table_query=1
再度クエリして確認すると、テスト テーブルが正常に復元されました。
テスト テーブルが復元された後、テスト テーブルを再度削除し、uuid を指定して復元できます。
undrop table test uuid '87b7d1d6-f86d-485e-a254-79d9c58c7464' settings allow_experimental_undrop_table_query=1
ここでの uuid はシステム テーブルでクエリされるため、実際の uuid に置き換える必要があることに注意してください。
テーブルが削除されてからデフォルトの 8 分が経過すると、テーブルを復元できず、エラー メッセージが表示されます。
undrop table test settings allow_experimental_undrop_table_query=1
Code: 60. DB::Exception: Received from localhost:9000. DB::Exception: The drop task of table default.test is in progress, has been dropped or the database engine doesn't support it. (UNKNOWN_TABLE)
ここまででUNDROP TABLE
紹介は終わりですので、興味のある方はぜひ体験してみてください。
技術的な問題について話し合うために、WeChat: xiedeyantu を追加することを歓迎します。