はじめに

一般的にバックアップ方法を検討する際には、バックアップ方法(フルバックアップや差分バックアップ)をどうするか、世代管理はどれくらいにするかといった管理方法を検討します。
Verticaにもこれらを管理する仕組みが備わっています。
今回の記事ではVerticaのバックアップデータの管理方法について紹介します。

バックアップ方法

一般的に、データベースをバックアップする方法として、以下の2種類が挙げられます。

・物理バックアップ
データベースのデータファイルを物理的にバックアップする方法
・論理バックアップ
データベースの中のデータを論理的にバックアップする方法

今回の記事では、物理バックアップの方法について記載します。

Verticaで物理バックアップを取得するには、vbr.pyというVerticaのバックアップユーティリティを使います。
vbr.pyを使ったバックアップでは、データベースのデータファイルを指定したバックアップ先のディレクトリにコピーします。データベースの物理ファイルを丸ごとスナップショットするイメージです。


フルバックアップと差分バックアップ

一般的にデータベースをバックアップする際、データベース全体をバックアップする「フルバックアップ」と更新のあったデータだけをバックアップする「差分バックアップ」があります。
Verticaでも、フルバックアップと差分バックアップを取得する事ができますが、Verticaの場合にはフルバックアップ/差分バックアップを明示的に指定することはしません。
初回に取得したバックアップが自動的にフルバックアップになり、それ以降に取得したバックアップは自動的に差分バックアップになります。
※ただし、バックアップ出力先が同一ディレクトリである場合に限ります。
※差分バックアップのタイプは、差分増分バックアップです。(累積増分バックアップではありません)

01
[ワンポイントアドバイス]
Verticaのデータファイルはライトワンス(追記型)で書き込まれます。
一度書き込んだファイルは二度と更新されません。
INSERTやUPDATE、ロードなどで追加されたデータは新規のデータファイルに保存されます。
このことから、増えた分のデータファイルをバックアップすることが差分バックアップになります。


世代管理

Verticaでは、世代管理の指定方法として、restorePointLimitパラメータに数値を指定します。
期間ではなく世代数(バックアップ取得回数)を指定します。
例えば、restorePointLimitに2を指定した場合、直近の2回分のバックアップデータを保持します。
最新のバックアップデータから数えて、3世代よりも古いバックアップデータは削除されます。

具体例(バックアップ)

それでは、データベース内のデータの状態と取得したバックアップデータの状態を対比して見てみます。

このようなポリシーがある事を前提とします。
・1日に1回バックアップを取得
・世代数(restorePointLimit)は2に設定

図中の左側にデータベースのデータ状態を記載しています。
データベースのデータは以下のように変更が加わる事とします。
– 日曜日:初期状態
– 月曜日:UPDATEの発行によるデータファイルのDELETEとINSERT
– 火曜日:データロードによるデータ増加
– 水曜日:DELETEの発行によるデータファイルの削除
– 木曜日:INSERTの発行によるデータファイルの追加

図中の右側にバックアップデータ内に保持されるデータを示しています。
以下のポイントに着目してください。
・バックアップを取得した日に関わらず、バックアップデータは同一ディレクトリ内に保存される
・初回だけがフルバックアップで、以降は差分増分バックアップ
・データベース側で削除されたデータファイルは、restorePointLimitで指定した世代数を超過したタイミングでバックアップデータから削除

02


具体例(リストア)

次にVerticaでのリストア時のバックアップデータの使われ方を見てみます。
上述したバックアップの例をもとに、金曜日にデータベースが全損してしまったとします。
木曜日の時点にリストアする事を例にします。

下図は曜日ごとのバックアップデータ内の状態を示しています。

04

木曜日の状態にリストアするために、バックアップデータの中にある「1、3、5、6、7」のデータを取り出します。
※バックアップデータの中には「4」のデータも含まれますが、木曜日の状態には必要のないデータなのでリストアしません。

まとめ

Verticaのバックアップとリストアはこのような管理方法で動作します。
ポイントをおさらいします。

・Verticaの物理バックアップはvbr.pyユーティリティを使う
・バックアップはデータベースのスナップショットを取得する
・Verticaはフルバックアップ、差分バックアップ(差分増分)を自動的に行う
・世代管理は期間ではなく世代数で行う
・バックアップデータの管理はデータファイル単位で行う

検証バージョンについて

この記事の内容はVertica 9.1で確認しています。