はじめに
Vertica7.2より、既存テーブルが存在する場合も上書きせず、別スキーマにリストア可能となりました。誤ってテーブルのデータを削除してしまった場合、リストアしたテーブルと既存テーブルを同時に保持できるため、データの差分をチェックすることができます。イメージ図
① 「sales」テーブルのデータをオペレーションミスで誤って削除しました。② フルバックアップより「sales」テーブルをリストアします。
③ 既存の「store」スキーマではなく「backup_snapshot_20160129070309_store」スキーマが、新しく作成されてリストアされます。
④ 「store」スキーマと「backup_snapshot_20160129070309_store」スキーマの「sales」テーブルの結果を比較し、データの差分を確認できます。
※最新データではなく、「バックアップ時点」のデータと比較ができます。
リストアのモード
本機能を利用するには、構成ファイルの設定時に「objectRestoreMode」パラメータで「coexist」を指定します。構成ファイルの設定例
[Misc]
snapshotName = backup_snapshot
restorePointLimit = 1
objectRestoreMode = coexist
snapshotName = backup_snapshot
restorePointLimit = 1
objectRestoreMode = coexist
「objectRestoreMode」で指定可能な各モードの説明です。
種類 | 説明 |
---|---|
createOrReplace | デフォルト値。対象テーブルが存在しない場合、オンラインバックアップから対象テーブルをリストアする。既に対象テーブルが存在する場合、データを置き換えてリストアする。(Vertica7.1以前の overwrite=true に相当) |
create | 対象テーブルが存在しない場合、オンラインバックアップから対象テーブルをリストアする。既に対象テーブルが存在する場合、エラーを返して、そのテーブルのリストアをスキップする。(7.1以前の overwrite=false に相当) |
coexist | <backup>_<timestamp>_<object_name> 形式のスキーマが作成され、そのスキーマ内に対象テーブルがリストアされる。スキーマが分離されるので、既存テーブルとリストアされたテーブルが共存できる。 |
「coexis」を利用した場合の動作
本機能を利用した場合の実行例をご紹介します。1.「バックアップ/リストア用」の構成ファイル設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//構成ファイルの設定 $ more backup_snapshot.ini [Misc] snapshotName = backup_snapshot restorePointLimit = 1 objectRestoreMode = coexist #「coexist」を設定します [Database] dbName = testdb dbUser = dbadmin dbPromptForPassword = True [Transmission] [Mapping] v_testdb_node0001 = servername:/home/dbadmin/bkup |
2. フルバックアップの取得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
//バックアップ取得先ディレクトリの初期化 $ vbr --task init --config-file backup_snapshot.ini Initializing backup locations. Backup locations initialized. //フルバックアップの取得 $ vbr --task backup --config-file backup_snapshot.ini Starting backup of database testdb. Participating nodes: v_testdb_node0001. Enter vertica password: Snapshotting database. Snapshot complete. Approximate bytes to copy: 60269270 of 60269270 total. [==================================================] 100% Copying backup metadata. Finalizing backup. Backup complete! //取得されたフルバックアップの確認 $ vbr.py --task listbackup --config-file ./backup_snapshot.ini backup backup_type epoch objects include_patterns exclude_patterns nodes(hosts) version file_system_type backup_snapshot_20181109_084811 full 40 v_testdb_node0001(testsrv1) v9.1.1-3 [Linux] backup_snapshot_20181109_052928 full 77 v_testdb_node0001(testsrv1) v9.1.1-3 [Linux] backup_snapshot_20181109_052855 full 58 v_testdb_node0001(testsrv1) v9.1.1-3 [Linux] backup_snapshot_20181109_052815 full 39 v_testdb_node0001(testsrv1) v9.1.1-3 [Linux] |
3. テーブルのレコード削除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
//現在のデータ確認 dbadmin=> \d List of tables Schema | Name | Kind | Owner | Comment --------+-----------+-------+---------+--------- store | customers | table | dbadmin | store | products | table | dbadmin | store | sales | table | dbadmin | (3 rows) dbadmin=> select * from store.sales; col1 ------ 1 2 3 (3 rows) //「sales」テーブルのレコードを削除 dbadmin=> delete from store.sales where col1=2; OUTPUT -------- 1 (1 row) dbadmin=> commit; COMMIT dbadmin=> select * from store.sales; col1 ------ 1 3 (2 rows) |
4. 復旧対象テーブルのリストア
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
//「sales」テーブルのリストア $ vbr --task restore --restore-objects=store.sales --config-file backup_snapshot.ini Starting object restore of database testdb. Participating nodes: v_testdb_node0001. Objects to restore: store.sales. Enter vertica password: Restoring from restore point: backup_snapshot_20160129_065817 Loading snapshot catalog from backup. Extracting objects from catalog. Syncing data from backup to cluster nodes. [==================================================] 100% Finalizing restore. The prefix of newly created schemas in coexist mode is: backup_snapshot_20160129070309 Restore complete! //データの確認 dbadmin=> \d Schema | Name | Kind | Owner | Comment -------------------------------------------------------+-----------+-------+---------+--------- backup_snapshot_BRTDSYK4VHFVI4TB_20181109093632_store | sales | table | dbadmin | #スキーマが追加される store | customers | table | dbadmin | store | products | table | dbadmin | store | sales | table | dbadmin | (4 rows) dbadmin=> select * from backup_snapshot_20160129070309_store.sales; col1 ------ 1 2 3 (3 rows) |
5. 既存とリストアしたテーブルの差分チェック
1 2 3 4 5 6 7 8 |
//「sales」テーブル 差分チェック dbadmin=> select * from backup_snapshot_BRTDSYK4VHFVI4TB_20181109093632_store dbadmin-> minus dbadmin-> select * from store.sales; col1 ------ 2 (1 row) |
参考情報
・Verticaのバックアップ方法http://vertica-tech.ashisuto.co.jp/vertica_backup/
・テーブル単体のリストア (7.2新機能)
http://vertica-tech.ashisuto.co.jp/restore_objects/
検証バージョンについて
この記事の内容はVertica 9.1で確認しています。- 投稿タグ
- objectRestoreMode, 別スキーマ, 差分, リストア, coexist