OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

既存のテーブルを上書きしないでリストアする方法 (7.2新機能)

公開日:
更新日:
バックアップ・リカバリ
新バージョン/機能
#バックアップ
#リストア

はじめに

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

<backup>_<timestamp>_<object_name> 形式のスキーマが作成され、そのスキーマ内に対象テーブルがリストアされる。スキーマが分離されるので、既存テーブルとリストアされたテーブルが共存できる。

「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/bkup

2. フルバックアップの取得

//バックアップ取得先ディレクトリの初期化
$ 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で確認しています。