はじめに
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
「objectRestoreMode」で指定可能な各モードの説明です。
種類 | 説明 |
|---|---|
createOrReplace | デフォルト値。対象テーブルが存在しない場合、オンラインバックアップから対象テーブルをリストアする。既に対象テーブルが存在する場合、データを置き換えてリストアする。(Vertica7.1以前の overwrite=true に相当) |
create | 対象テーブルが存在しない場合、オンラインバックアップから対象テーブルをリストアする。既に対象テーブルが存在する場合、エラーを返して、そのテーブルのリストアをスキップする。(7.1以前の overwrite=false に相当) |
coexist |
|
「coexis」を利用した場合の動作
本機能を利用した場合の実行例をご紹介します。
1.「バックアップ/リストア用」の構成ファイル設定
//構成ファイルの設定
$ 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/bkup2. フルバックアップの取得
//バックアップ取得先ディレクトリの初期化
$ 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. テーブルのレコード削除
//現在のデータ確認
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. 復旧対象テーブルのリストア
//「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. 既存とリストアしたテーブルの差分チェック
//「sales」テーブル 差分チェック
dbadmin=> select * from backup_snapshot_BRTDSYK4VHFVI4TB_20181109093632_store
dbadmin-> minus
dbadmin-> select * from store.sales;
col1
------
2
(1 row)参考情報
・Verticaのバックアップ方法
https://www.ashisuto.co.jp/cm/analytics-database/vertica_backup.html
・テーブル単体のリストア (7.2新機能)
https://www.ashisuto.co.jp/cm/analytics-database/restore_objects.html
検証バージョンについて
この記事の内容はVertica 9.1で確認しています。