FLASHBACK TABLE
スナップショット ID またはタイムスタンプを使用してテーブルを以前のバージョンにフラッシュバックします。メタデータ操作のみを伴うため、高速に実行できます。
コマンドで指定したスナップショット ID またはタイムスタンプに基づいて、TiDB Cloud Lake はそのスナップショットが作成された時点の以前の状態にテーブルをフラッシュバックします。テーブルのスナップショット ID とタイムスタンプを取得するには、FUSE_SNAPSHOT を使用します。
テーブルをフラッシュバックできるのは、次の条件を満たす場合に限られます。
このコマンドは、既存のテーブルのみを以前の状態に戻します。削除されたテーブルをリカバリするには、UNDROP TABLE を使用します。
テーブルのフラッシュバックは、TiDB Cloud Lake のタイムトラベル機能の一部です。このコマンドを使用する前に、フラッシュバックしたいテーブルがタイムトラベルの対象であることを確認してください。たとえば、トランジェントテーブルでは TiDB Cloud Lake がそのようなテーブルのスナップショットを作成または保存しないため、このコマンドは機能しません。
テーブルを以前の状態にフラッシュバックした後でロールバックすることはできませんが、さらに以前の状態へ再度フラッシュバックすることはできます。
TiDB Cloud Lake では、このコマンドは緊急時のリカバリにのみ使用することを推奨しています。テーブルの履歴データをクエリするには、AT 句を使用します。
構文
-- Restore with a snapshot ID
ALTER TABLE <table> FLASHBACK TO (SNAPSHOT => '<snapshot-id>');
-- Restore with a snapshot timestamp
ALTER TABLE <table> FLASHBACK TO (TIMESTAMP => '<timestamp>'::TIMESTAMP);
例
ステップ 1: サンプルの users テーブルを作成してデータを挿入する
-- Create a sample users table
CREATE TABLE users (
id INT,
first_name VARCHAR,
last_name VARCHAR,
email VARCHAR,
registration_date TIMESTAMP
);
-- Insert sample data
INSERT INTO users (id, first_name, last_name, email, registration_date)
VALUES (1, 'John', 'Doe', 'john.doe@example.com', '2023-01-01 00:00:00'),
(2, 'Jane', 'Doe', 'jane.doe@example.com', '2023-01-02 00:00:00');
データ:
SELECT * FROM users;
+------+------------+-----------+----------------------+----------------------------+
| id | first_name | last_name | email | registration_date |
+------+------------+-----------+----------------------+----------------------------+
| 1 | John | Doe | john.doe@example.com | 2023-01-01 00:00:00.000000 |
| 2 | Jane | Doe | jane.doe@example.com | 2023-01-02 00:00:00.000000 |
+------+------------+-----------+----------------------+----------------------------+
スナップショット:
SELECT * FROM Fuse_snapshot('default', 'users')\G;
*************************** 1. row ***************************
snapshot_id: c5c538d6b8bc42f483eefbddd000af7d
snapshot_location: 29356/44446/_ss/c5c538d6b8bc42f483eefbddd000af7d_v2.json
format_version: 2
previous_snapshot_id: NULL
segment_count: 1
block_count: 1
row_count: 2
bytes_uncompressed: 150
bytes_compressed: 829
index_size: 1028
timestamp: 2023-04-19 04:20:25.062854
ステップ 2: 誤った削除操作をシミュレートする
-- Simulate an accidental delete operation
DELETE FROM users WHERE id = 1;
データ:
+------+------------+-----------+----------------------+----------------------------+
| id | first_name | last_name | email | registration_date |
+------+------------+-----------+----------------------+----------------------------+
| 2 | Jane | Doe | jane.doe@example.com | 2023-01-02 00:00:00.000000 |
+------+------------+-----------+----------------------+----------------------------+
スナップショット:
SELECT * FROM Fuse_snapshot('default', 'users')\G;
*************************** 1. row ***************************
snapshot_id: 7193af51a4c9423ebd6ddbb04327b280
snapshot_location: 29356/44446/_ss/7193af51a4c9423ebd6ddbb04327b280_v2.json
format_version: 2
previous_snapshot_id: c5c538d6b8bc42f483eefbddd000af7d
segment_count: 1
block_count: 1
row_count: 1
bytes_uncompressed: 87
bytes_compressed: 778
index_size: 1028
timestamp: 2023-04-19 04:22:20.390430
*************************** 2. row ***************************
snapshot_id: c5c538d6b8bc42f483eefbddd000af7d
snapshot_location: 29356/44446/_ss/c5c538d6b8bc42f483eefbddd000af7d_v2.json
format_version: 2
previous_snapshot_id: NULL
segment_count: 1
block_count: 1
row_count: 2
bytes_uncompressed: 150
bytes_compressed: 829
index_size: 1028
timestamp: 2023-04-19 04:20:25.062854
ステップ 3: 削除操作前のスナップショット ID を見つける
-- Assume the snapshot_id from the previous query is 'xxxxxx'
-- Restore the table to the snapshot before the delete operation
ALTER TABLE users FLASHBACK TO (SNAPSHOT => 'c5c538d6b8bc42f483eefbddd000af7d');
データ:
SELECT * FROM users;
+------+------------+-----------+----------------------+----------------------------+
| id | first_name | last_name | email | registration_date |
+------+------------+-----------+----------------------+----------------------------+
| 1 | John | Doe | john.doe@example.com | 2023-01-01 00:00:00.000000 |
| 2 | Jane | Doe | jane.doe@example.com | 2023-01-02 00:00:00.000000 |
+------+------------+-----------+----------------------+----------------------------+
Snapshot:
SELECT * FROM Fuse_snapshot('default', 'users')\G;
*************************** 1. row ***************************
snapshot_id: c5c538d6b8bc42f483eefbddd000af7d
snapshot_location: 29356/44446/_ss/c5c538d6b8bc42f483eefbddd000af7d_v2.json
format_version: 2
previous_snapshot_id: NULL
segment_count: 1
block_count: 1
row_count: 2
bytes_uncompressed: 150
bytes_compressed: 829
index_size: 1028
timestamp: 2023-04-19 04:20:25.062854