はじめに
Vertica7.2より、フルバックアップから、指定したオブジェクトのみをリストア可能になりました。データベース全体のリストアは時間がかかる事も考えられるため、テーブルを誤って削除した場合など、特定オブジェクトを復旧したい場合に便利な機能です。指定可能なオブジェクトは、スキーマもしくはテーブルです。

テーブルを指定した場合のリストア動作
本機能を利用した場合の実行例をご紹介します。
構文
本機能を利用するには、リストアする時に 「–restore-objects」オプションを指定します。
vbr.py —task […] —restore-objects=[…] —config-file=[…]
【各オプションの説明】
オブション | 説明 |
|---|---|
--task {backup | copycluster | init | listbackup | restore } | backup |
--restore-objects | 「フルバックアップ」または「オブジェクトレベルのバックアップ」から、リストア対象のオブジェクト名を指定する。 |
--config-file | 利用する構成ファイルを指定する。このファイルが存在しないと vbr.py の実行はできない。 |
実行結果
フルバックアップから「products」テーブルを指定し、リストアした場合の動作になります。
1. 現在のテーブル情報
//「customers」「products」「sales」の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.products;
col1
------
1
2
3
(3 rows)2. フルバックアップの取得
//バックアップ取得先ディレクトリの初期化
$ vbr.py --task init --config-file ./backup_snapshot.ini
Initializing backup locations.
Backup locations initialized.
//フルバックアップの取得
$ vbr.py --task backup --config-file ./backup_snapshot.ini
Starting backup of database testdb.
Participating nodes: v_testdb_node0001.
Snapshotting database.
Snapshot complete.
Approximate bytes to copy: 53 of 447404783 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(testasrv1) v9.1.1-3 [Linux]
backup_snapshot_20181109_052928 full 77 v_testdb_node0001(testasrv1) v9.1.1-3 [Linux]
backup_snapshot_20181109_052855 full 58 v_testdb_node0001(testasrv1) v9.1.1-3 [Linux]
backup_snapshot_20181109_052815 full 39 v_testdb_node0001(testasrv1) v9.1.1-3 [Linux]3. テーブルの削除
//「products」テーブルを削除
dbadmin=> drop table store.products;
DROP TABLE
dbadmin=> \d
List of tables
Schema | Name | Kind | Owner | Comment
--------+-----------+-------+---------+---------
store | customers | table | dbadmin |
store | sales | table | dbadmin |
(2 rows)4. 復旧対象テーブルのリストア
//「products」テーブルを指定してリストア
$ vbr.py --task restore --restore-objects=store.products --config-file=backup_snapshot.ini
Starting object restore of database testdb.
Restoring from restore point: backup_snapshot_20181109_084811
Participating nodes: v_testdb_node0001.
Loading snapshot catalog from backup.
Objects to restore: store.products
Preprocessing snapshot...
Preprocessing complete.
Restoring objects: store.products
Approximate bytes to copy: 53.
Syncing data from backup to cluster nodes.
[==================================================] 100%
Finalizing restore.
Restore complete!5. リストア後のテーブル情報
//正常にリストアされていることの確認
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.products;
col1
------
1
2
3
(3 rows)参考情報
・Verticaのバックアップ方法
https://www.ashisuto.co.jp/cm/analytics-database/vertica_backup/
・既存のテーブルを上書きしないでリストアする方法 (7.2新機能)
https://www.ashisuto.co.jp/cm/analytics-database/coexist/
検証バージョンについて
この記事の内容はVertica 9.1で確認しています。