テーブルフラッシュバック機能は、データスナップショットをフラッシュバックログに定期的に記録し、トランザクション情報を高速復旧領域に定期的に保存できます。 テーブルフラッシュバック機能を使用して、ある時点のデータを新しいテーブルに復元できます。 誤った操作でデータエラーが発生した場合は、フラッシュバックログを使用してエラー時刻をすばやく検出し、テーブルデータをエラー時刻より前の時点に復元できます。
制限事項
- テーブルフラッシュバック機能は、共通テーブルのみを復元できますが、次のデータベースオブジェクトは復元できません。
- インデックス
- トーストテーブル
- 具体化されたビュー
- パーティション分割されたテーブル
- 子分割テーブル
- システムテーブル
- 外部テーブル
- 子トーストテーブルを含むテーブル
- 指定した時刻から現在の時刻まで、次のDDL操作を実行したテーブルをフラッシュバックすることはできません。
ドロップテーブル
ALTERテーブルセットとOIDS
子供なしのALTER TABLE SET
TRUNCATEテーブル
- 列のタイプを変更します。 変更前後の型は暗黙的に変換できず、セキュア強制変換の値を含まないUSING句は使用されません。
- テーブルをunloggedまたはloggedに設定します。
- ID列を追加します。
- 限られたデータ型しか選択できない列を追加します。
- デフォルト値の式にvolatile関数が含まれる列を追加します。
前提条件
テーブルフラッシュバック機能を使用するには、PolarDBクラスターのパラメーターで、polar_enable_flashback_logパラメーターとpolar_enable_fast_recovery_areaパラメーターを両方ともONに設定して、フラッシュバックログと高速リカバリゾーンを有効にする必要があります。
パラメーター
PolarDBは、テーブルフラッシュバック機能を正確に制御するためのパラメーターを提供します。 下表に、各パラメーターを説明します。
パラメーター | 説明 |
polar_enable_flashback_log | フラッシュバックログを有効にするかどうかを指定します。 有効な値:
説明 テーブルフラッシュバック機能は、フラッシュバックログに依存します。 テーブルフラッシュバック機能を使用する場合は、フラッシュバックログを有効にする必要があります。 |
polar_enable_fast_recovery_area | 高速リカバリエリアを有効にするかどうかを指定します。 有効な値:
説明 テーブルフラッシュバック機能は、高速リカバリエリアによって異なります。 テーブルフラッシュバック機能を使用するときは、高速リカバリエリアを有効にする必要があります。 |
polar_flashback_log_keep_segments | フラッシュバックログに保持されているファイルの数。 有効値: 3 ~ 2147483647 デフォルト値: 8。 説明 フラッシュバックログファイルは再利用可能です。 各フラッシュバックログのサイズは256 MBです。 |
polar_fast_recovery_area_rotation | トランザクション情報を高速リカバリエリアに保持できる期間。 単位は分です。 有効な値: 1 ~ 14400 デフォルト値: 180 説明 理論的には、polar_fast_recovery_area_rotationの値が大きいほど、占有されるディスク容量が大きくなります。 |
polar_flashback_point_segments | 2つのフラッシュバック時点間のWALログの最小数。 各WALログのサイズは1 GBです。 有効な値: 1 ~ 2147483647 デフォルト値: 16。 説明 polar_flashback_point_segmentsの値をmax_wal_sizeの値の倍数に設定することを推奨します。 |
polar_flashback_point_timeout | 2つのフラッシュバックポイント間の最小間隔。 単位は秒です。 有効な値: 1 ~ 86400 デフォルト値は 300 です。 説明 polar_flashback_point_timeoutの値をcheckpoint_timeoutの値の倍数に設定することを推奨します。 |
polar_flashback_log_buffers | フラッシュバックログの共有メモリのサイズ。 (単位:KB) 有効値: 4 ~ 262144 デフォルト値:2048。 |
polar_flashback_logindex_mem_size | フラッシュバックログインデックスの共有メモリのサイズ。 単位:MB。 有効値: 3 ~ 1073741823 デフォルト値: 64。 |
polar_flashback_logindex_bloom_blocks | フラッシュバックログインデックスのBloomフィルターページの数。 有効値: 8 ~ 1073741823 デフォルト値: 512 説明 データページのサイズは8 KBです。 |
polar_flashback_log_insert_locks | フラッシュバックログ挿入ロックの数。 有効な値: 1 ~ 2147483647 デフォルト値: 8。 |
polar_workers_per_flashback_table | 並列テーブルの数。 このパラメーターを0に設定すると、並列テーブルフラッシュバックは無効になります。 有効値: 0~1024。 既定値:5 説明 フラッシュバックするテーブルの数が比較的多い場合は、時間を節約するためにpolar_workers_per_flashback_tableの値を増やすことができます。 |
polar_flashback_log_bgwrite_delay | フラッシュバックログのbgwriterプロセスの作業間隔。 単位:ミリ秒。 有効な値: 1 ~ 10000 デフォルト値:100 |
polar_flashback_log_flush_max_size | bgwriterプロセスがログをディスクにフラッシュするたびに許可されるログサイズ。 (単位:KB) 有効な値: 0 ~ 2097152 デフォルト値: 5120 説明 このパラメーターを0に設定すると、フラッシュバックログのサイズは制限されません。 |
polar_flashback_log_insert_list_delay | フラッシュバックログのbginserterプロセスの作業間隔。 単位:ミリ秒。 有効な値: 1 ~ 10000 デフォルト値は 10 です。 |
説明 必要なすべてのパラメーターを一度に変更し、オフピーク時にクラスターを再起動することを推奨します。
注意事項
- フラッシュバックログと高速リカバリゾーンを有効にすると、より多くの共有メモリとディスク容量が消費され、パフォーマンスが低下します。 これらの影響を評価する必要があります。
- テーブルがフラッシュバックされると、テーブルに関連するページが共有メモリプールにスワップインおよびスワップアウトされます。 これは、他のデータベースのアクセス性能のジッタを引き起こす可能性がある。 オフピーク時にクラスターを再起動することを推奨します。
- テーブルフラッシュバック操作が完了したら、テーブルのデータを照会し、
NOTICE
情報に基づいて元のテーブルとデータを比較できます。 不足しているデータは元のテーブルに戻すことができます。
構文
FLASHBACK TABLE [スキーマ] 。 ] テーブルにTIMESTAMP expr;
パラメーター | 説明 |
[スキーマ] 。 ] テーブル | フラッシュバックされるテーブルの名前。 |
expr | テーブルがフラッシュバックされる時間。 |
例
- テスト用のデータを準備します。
test
テーブルを作成し、データを挿入します。CREATE TABLEテスト (id int); INSERT INTO test select * FROM generate_series(1, 10000);
テスト
テーブルの行の総数を照会します。
同様の出力が表示されます:SELECT count (1) FROM test;
id値を合計します。count ------- 10000 (1行)
同様の出力が表示されます:SELECT sum(id) FROM test;
sum ---------- 50005000 (1行)
- 10秒待ってから、
test
テーブルのデータを削除します。
削除されたSELECT pg_sleep(10); DELETE FROM test;
テスト
テーブルを照会します。
同様の出力が表示されます:SELECT * FROM test;
id ---- (0行)
テスト
テーブルのデータを10秒前のデータにフラッシュバックします。
同様の出力が表示されます:FLASHBACK TABLE test TO TIMESTAMP now() - interval'10s';
NOTICE: 関係テストを新しい関係polar_flashback_65566にフラッシュバックします。データを確認してください フラッシュバックテーブル
- フラッシュバック後にテーブルデータを照会します。 フラッシュバック後のテーブルの合計行数を照会します。
同様の出力が表示されます:SELECT count (1) FROM polar_flashback_65566;
フラッシュバック後のid値を合計します。count ------- 10000 (1行)
同様の出力が表示されます:SELECT sum(id) FROM polar_flashback_65566;
sum ---------- 50005000 (1行)