# CHAPTER 4: コマンドロギングとバックアップ

## 4.1 はじめに

Empressは、３種類のコマンドロギングを提供します。

- オーディット・トレイル
- データベースログ
- リカバリーログ

また、２種類のデータベースのバックアップとリカバリーを提供します。

- アーカイブス
- オンライン・バックアップ

オーディット・トレイルは、データベースへのすべてのアクセス記録を保管するために 利用されます。データが修正されない場合でもデータベース上のすべての操作は記録されます。

データベースログは、データベースへのすべてのアクセスの記録を保管するために 利用されます。データが修正されない場合でもデータベース上のすべての操作は記録されます。

リカバリーログは、データベースの内容に影響する操作を記録し、 例えば、ディスク障害により、データベースにダメージを受けた場合、 データベースを現在の状態に復元するために利用されます。

データベースアーカイブは、バックアップメディア上に データベースのコピーを作成します。このプロセスが処理している間は ユーザーはデータベースにアクセスしてはなりません。

オンライン・バックアップユーティリティは、 ユーザーがデータベースにアクセスした状態まま、バックアップメディア上に データベースをコピーします。 この機能は、常に利用しているデータベースのサイトにとっては重要な機能です。

## 4.2 オーディット・トレイル

オーディット・トレイルは、すべてのユーザによって実行されたすべての コマンドに関する詳細な情報を記録します。 この情報には、ユーザーの識別、入力されたコマンド、 入力した時間、オープンしたテーブルおよびレコードの詳細 などが含まれます。 オーディット・トレイルは、 ユーザーにデータベースアクセス記録を提供することで、 データベースへのアクセスをコントロールする目的で、 利用されることを意図しています。

オーディット・トレイルは、Empressデータベース管理変数`MSDBAUDITTRAIL1` によって指定されたファイルに記録されます。 また、Empressデータベース管理変数`MSDBAUDITTRAIL2`によって 指定されたファイルにログのコピーをすることができます。

`tabzero`内の`MSDBAUDITTRAIL1`にファイル名（フルパスを含む） を設定することにより、オーディット・トレイルは指定したファイルが、 それ以前に存在しなければファイルを作成し、ログへの記録を開始します。 （存在している場合は追加書き込みになります。） オーディット・トレイルは、`tabzero`内のこの変数に何も 設定されなくなるまで動作し続けます。

注意としてオーディット・トレイルのログは、急速にかつ、非常に大きくなるため、 ディスクスペースが少ない場合、一定期間ごとにファイルを途中で切り詰めることが必要です。

## 4.3 データベースログファイル

データベースログはデータベースへのアクセスのみの記録をします。 このファイルは、Empress データベースログ解析ユーティリティの 入力ファイルとしても役立ちます。

ここでは Empress データベースへのアクセス履歴を保管するために作成される データベースログファイルの設定について説明します。 Empress データベースログファイルは、 `tabzero`ファイル内の `MSDBLOGFILE`管理変数に ファイル名（フルパスを含む）を設定することにより 記録することができます。 例えば:

         MSDBLOGFILE=/usr/dblogfile.log

指定されない場合は、どのようなデフォルトのデータベースログファイルも作成されません。

### 4.3.1 データベースログ解析ユーティリティ

Empress データベースログ解析ユーティリティ empdblogstatは、 Empress データベースログファイルからのデータを解析、表示するために利用されます。 Empress データベースログファイルは、Empress データベースへの最初の アクセスにより作成されます。

ログファイルは、 Empress データベースの特有な利用法について、より洞察力を得るために 使用することができる有用な情報を含みます。 Empress データベースログ解析ユーティリティ empdblogstatは、 データベースログファイルの内容を解析し、 問い合わせた時間枠の集計・統計結果を表示する ユーザー付加機能として実装され、 いくつかのログ解析機能が提供されています。 接続数、接続間隔、不適切なラインセンスによる拒否された接続数の 個別のユーザー情報を報告することができます。

Empress データベースログ解析ユーティリティempdblogstatは、 以下の構文になります。

        empdblogstat LOGFILE_SPEC [OPTION ...] [TIME_FRAME] [dump]

`LOGFILE_SPEC`: データベースログファイルの場所についてユーティリティに示す２つの方法があります。 | `db_name` | ユーティリティは 多くのEmpress データベース管理変数のデフォルトの値を含むtabzeroファイルから データベースログファイル名を取得します。
`-f file` | データベースログファイル名の指定をする場合、 "-f" オプションを使います。
`OPTION` | user, uniqueusers | データベースへ接続した個別のユーザーについてのデータを表示します。 ユーザーID、接続した回数とユーザーごとの接続期間の平均値を示します。 また、ユーザーの合計数も表示します。
conn, connection | ユーザー接続についてのデータを表示します。 インターバルの開始時間、 インターバル中の接続回数、 同様に集計データ、 最大値と最小値、 インターバルごとの接続回数の平均 を示します。 また、問い合わせた時間枠（TIME_FRAMEを指定した場合)の 接続回数の合計を表示します。
dur, connectiondurations | ユーザー接続期間についてのデータを表示します。 インターバルの開始時間、 インターバル中に接続開始された接続期間の平均、 同様に集計データ、 最小値と最大値、 インターバルごとの接続期間の平均 を示します。 また、問い合わせた時間枠（TIME_FRAMEを指定した場合)の すべての接続の接続期間の平均を表示します。
lic, licenceexceeded | 不十分なライセンスのため拒否されたユーザー接続についてのデータを表示します。 |
`TIME_FRAME`: オプションの"TIME_FRAME" が指定された場合、ユーティリティは データベースログファイル中の指定されたセクションを解析します。 デフォルトでは、すべてデータベースログファイルは解析されます。 この時間枠の指定では、開始時間と終了時間、 オプションとして時間のインターバルの指定が必要です。 | start time |
    | yyyy-mm-dd hh:mm:ss |
    | hh:mm:ss            |
    | start               |
end time |
    | yyyy-mm-dd hh:mm:ss |
    | hh:mm:ss            |
    | start               |
interval (optional) |
    [hh:mm:ss]
`dump` | "dump"オプションは、多くのラベルを抑制し、値だけを表示します。 この値はEmpress のセパレータ文字 <Ctrl+V>によって、分離されています。 "dump"オプションを使った出力は、 いくつかのサードパーティのグラフィカルツールの入力として、 また Y軸のプロットとして利用することができます。

例えば、すべてのキーワード（つまり user, conn, dur, lic)に関連した 情報を表示するために利用する場合、 オペレーティングシステムのプロンプト上で以下のコマンドを使うことができます。

          empdblogstat db1

"db1"は、 Empress データベースの名前です。

## 4.4 リカバリーログ (UNIX/LINUX のみ)

いくつかのサイトにおいて、 １日に１回か１週間に１回のデータベースのバックアップをすることで完全に十分ですが、 それは１日か１週間の大部分の量の情報の損失する危険があります。 他のサイトにおいては、どのようなデータも失う余裕がなく、このような損失を防ぐために リカバリログを利用します。 リカバリーログは最後のバックアップからのデータベースに行われたすべての変更情報の コピーを持っています。 多くの変更が行われた場合、リカバリーログは非常に大きくなります。

データベースに障害が発生した場合、 リカバリーログに記録された変更の情報は復元データとして用いら、 データベースは最新のバックアップから復元されます。 これにより、完全に障害が発生した時点のデータベースのデータに復元します。

この連続的なリカバリーログを開始するには、

- 最初に`tabzero`中の変数`MSDBRECOVERYLOG1`と`MSDBRECOVERYLOG2`に リカバリーログファイルの名前を設定します。 よい指定として、リカバリーログファイルはフルパスで定義してください。
- 次に、ログファイルを作成するために`emprlini`を実行します。
- 最後に アーカイブユーティリティ(emparch)か、オンラインバックアップユーティリティ(empolbak) のいずれかを利用し、データベースのバックアップを行います。

データベースとリカバリーログは異なったディスクかファイルシステムに 置くことが重要です。これはハードウェアまたシステム障害が起こった場合、 障害の損失を最小限にすることを意味します。

`emprlini`のコマンドの文法は以下になります。

       emprlini データベース

これにより、`tabzero`に指定されたログファイルを作成し、 Empressにより必要な適切なファイルヘッダーを付加します。 また、それぞれの物理的なログファイルは、 バージョン番号を指示した名前を拡張子として 与えられます。 `emprlini`を実行後、 バージョン番号の拡張子は常に`.000`になります。

例えば、`MSDBRECOVERYLOG1`に以下の値を設定し、

       /usr2/accounting/logs/log1

それから、`emprlini`を実行後に作成された 物理ファイルは以下のように見えます。

       /usr2/accounting/logs/log1.000

このファイルはすべてのデータベースアクセスにより自動的にログ出力されるファイルになります。

最初のリカバリーログ作成に `emprlini`を使用しない場合、 データベースのコマンドの連続的なロギングはおこなわれず、 データベースコマンド実行のたびにエラーメッセージが 出力されます。

## 4.5 アーカイブとリカバリー(UNIX/LINUX のみ)

### 4.5.1 データベース・アーカイブ

Empressは バックアップメディア上にデータベースのコピーを作成するための `emparch`ユーティリティを提供します。 このプログラムはデータベースの データ辞書およびリモートテーブルを含めた すべてのデータをバックアップします。現在のリカバリーログファイルは 空にされ、再スタートされます。

データベースディレクトリおよびリモートテーブルとして利用されているディレクトリの 中にデータベースとは関係ないファイルを置くべきではありません。 それらのファイルはバックアップされず、リストアのプロセスにより壊されます。

`emparch`は、処理する間、さまざまな細かな質問をします。 構文は以下になります。

       emparch [-a file] [-f] database

`-a file` | アーカイブファイルを指定します。 （ファイルおよびデバイス）
`-f` | 確認なしで強制的に実行します。
`database` | アーカイブするデータベース名

`tabzero`にリカバリーログの設定がない場合、 `emparch`プログラムは実行されません。

注意として `emparch`はデフォルトのバックアップデバイスとして `/dev/rmt0`が指定されています。 また、アーカイブ処理は`tar` または `cpio`で構成されています。 システムに適合しない場合は、それに応じてファイルを編集してください。 プログラム(emparch)は、Empressをインストールしたディレクトリ以下の `bin`ディレクトリに見つけることができます。

### 4.5.2 アーカイブからのデータベースのリカバリー

データベースの破損（オペレーティングシステムまたはディスクの障害による） が発生した場合、`emprecov`プログラムは、 `emparch`によって作成したバックアップコピーから データベースを復元します。 そして最後のバックアップ以降に入力されたコマンドを再実行するために リカバリーログを使います。 定期的なファイルのバックアップとリカバリーログを用いることで、 データ・ベースは常に障害があった直前の状態に戻すことができます。

注意として `emprecov`はデフォルトのバックアップデバイスとして `/dev/rmt0`が指定されています。また、アーカイブ処理は `tar` または `cpio`で構成されています。 システムに適合しない場合は、それに応じてファイルを編集してください。 プログラム(emprecov)は、Empressをインストールしたディレクトリ以下の `bin`ディレクトリに見つけることができます。

リカバリーログは `tabzero`内のEmpressデータベース管理変数`MSDBRECOVERYLOG1` によって指定されたファイルに記録されます。 このログのコピーはEmpressデータベース管理変数`MSDBRECOVERYLOG2`に 指定されたファイルに作成することができます。

## 4.6 オンライン・バックアップとリカバリー

### 4.6.1 オンライン・バックアップ

データベースのオンライン・バックアップを実行するということは、 ユーザーがアクセスしている間にデータベースをコピーするという意味になります。 この機能は、常時、利用しなければならないデータベースのサイトにとっては重要です。 （これらのサイトはバックアップ期間のためにデータベースを止めるほどの余裕はありません。） オンライン・バックアップの手続きはユーザーにとっては完全に明瞭であり、データベースの 整合性を維持します。

オンライン・バックアップはユーザーがアクセスしていないデータベースでも実行することが できます。それは、バックアップを作成するための `emparch`ユーティリティとデータベースを復元するための `emprecov`ユーティリティと同等の(しかしより柔軟な)代案として 役に立ちます。

`empolbak`コマンドはオンライン・バックアップを実行するために利用されます。 バックアップは、カートリッジテープ、DATのようなオフラインデバイス または、ファイルシステム上のファイルに行うことができます。 オフラインデバイスを使う場合、 バックアップメディアがフォーマットされているか、 データベースを記録するだけの十分のスペースがあるか、 を確認してください。 注意として `empolbak`は、マルチボリュームをサポートしていません。; （バックアップファイルを2つ以上に分割してセーブ・ストアすること） バックアップメディアの容量がデータベースの容量に適しているかどうかを 確認してください。 `empolbak`コマンドの構文は、以下になります。

       empolbak options_list argument_list database

databaseは、バックアップを行うデータベースの物理名または論理名を指定します。 `option_list` と `argument_list` は 次のセクションで説明されています。 また、サーバーを通してオンラインバックアップを実行するかもしれませんが、 （サーバーとはDB Server機能のことを言っています。） バックアップは物理データベースが存在するローカルノード上で実行しなくてはなりません。 .

オンライン・バックアップは 適切な連続的なリカバリーログの存在があるかないかにかかわらず、 実行することができます。

#### 4.6.1.1 オンライン・バックアップ・デバイス

データベースはEmpress 変数`MSOLBBACKUPDEVICE` に設定されたデフォルトのデバイスへバックアップされます。 通常、デフォルトでは`/dev/rst0`が設定されています。 バックアップのためのブロックサイズは、 Empress 変数`MSOLBBLOCKSIZE`によって設定されています。 デフォルトでは 16 です。

デフォルトと異なったデバイスまたはファイルを指定するためには、 "-f" オプションを使い、その後にファイル名およびデバイス名を指定します。 例えば、

       empolbak -f /tmp/backup movies

これは、`/tmp/backup` は、バックアップを格納するファイル名であり、 `movies`はデータベース名です。 また、例としてDATテープにセーブするために デバイス名として`/dev/tape`を使った例を示します。

       empolbak -f /dev/tape movies

ファイル名として"`-`"の利用は、プロセスの標準出力へ バックアップデータを送ることに注意してください。

#### 4.6.1.2 オンライン・バックアップ・ブロッキング・ファクター

バックアップを記録するメディアによっては、ブロッキング・ファクターの指定を する必要があるかもしれません。 ブロッキングファクターは 1つのメディアブロックとして記録される 512 バイトのデータブロックです。 どのような値を設定したらよいかはシステム管理者に尋ねてください。

典型的なカートリッジテープは１２６のブロッキングファクターを持っています。 カートリッジテープを使う場合は、１２６(512 * 126 = 64512 データバイト分のメディアブロック) のブロッキングファクターを指定します。

       empolbak -b -f 126 /dev/rst0 movies

注意として Empress変数`MSOLBBLOCKSIZE`に バックアップのためのデフォルトのブロックサイズを指定します。 それは間接的なブロッキングファクターです。（オプションとして直接指定することができるため） したがって、デフォルトとは異なる ブロッキングファクターを 利用したい場合のみ "-b"(ブロッキングファクター)オプションを指定する必要があります。

すべてのオプションは、最初に指定し、次にそれらの 引数を指定しなくてはなりません。 引数はオプションと同じ順番にする必要があります。 オプションは合わせてに連結すること（例えば "-bfv")が可能ですが、 そのオプションと引数の順番の関係は残っています。 以下のコマンドは、

       empolbak -bf /dev/rst0 126 movies

正しくありません。 これはブロッキングファクターを`/dev/rst0`として、 バックアップファイル名として 126 を使うことを指定しています。 正しいコマンドは以下になります。

       empolbak -bf 126 /dev/rst0 movies

#### 4.6.1.3 オンライン・バックアップのプロセス情報

最後のオプションは "-v"で、 `empolbak`はバックアップ処理についての冗長な情報を作成し出力します。 バックアップの現在の段階と バックアップされた各データベースファイル名が出力されます。

       empolbak -bfv 126 /dev/rst6 movies

#### 4.6.1.4 連続的なリカバリーロギングを伴ったオンライン・バックアップ

連続的なリカバリーロギングを適したところにおいて、 オンライン・バックアップが連続的なリカバリーロギングを伴っている場合、 （オンラインバックアップ中にリカバリーログへのログ動作が行われている場合） そのバックアップが進行している間、 データベースのロギング処理は継続します。 トランザクションログとリカバリーログを含む すべてのデータベースファイルは、 バックアップメディアへコピーされ、 バックアッププロセスの終了時に 新しい番号の拡張子を持ったリカバリーログファイルが作成されます。

ログファイルの拡張子は、オンラインバックアップが実行されるごとに １づつ増やされます。 例えば、`emprlini`を実行した後のログファイルは"log1.000"と名前が 付けられ、最初のオンラインバックアップの後の新しいログファイルの名前は "log1.001"と付けられます。その後のオンラインバックアップにより、 "log1.002","log1.003".. となります。

ログファイルの拡張子の番号は コーディネイターの機能によって自動的に維持管理され、 ログファイルの再初期化の間に `empolbak`コマンドによって適用されます。 これにより、オンラインバックアップをした後に `emprlini` コマンドを再実行する必要はありません。

#### 4.6.1.5 連続的なリカバリーロギングを伴わないオンラインバックアップ

連続的なリカバリーロギングが適さないところでは、 オンライン・バックアップは バックアップ処理だけの間に利用するための それ自身のリカバリーログを作成します。 このログファイルはオンライン・バックアップの間の データベースのすべての変更を含んだファイルです。 すべてのデータベースファイルはリカバリーログファイルと 同じくバックアップメディアにコピーされます。 これはバックアップ時に現在のデータベースの 完全なバックアップを作ります。 連続的なリカバリーロギングが適さないところでは、 １度、バックアップ処理が終了したならば データベースへのその次の変更はロギングされません。

このログファイルの名前は、 Empressのインストールしたディレクトリ以下の`config`ディレクトリ の下の`initfile`ファイル中の `MSOLBRECOVERYLOG`変数によって決められています。 デフォルトファイル名は、"olbreclog"で、 オンラインバックアップが開始されたローカルディレクトリに作成されます。 この変数の設定は変更することができます。

1. `$EMPRESSPATH/config/initfile`ファイル内の`MSOLBRECOVERYLOG`の 値をシステムエディタを使って変更します。例えば、

          MSOLBRECOVERYLOG=/usr2/accounting/tmp_logs/log1

   または

2. オンラインバックアップを実行する前にDBAの環境変数に`MSOLBRECOVERYLOG` の値を設定します。例えば、

          UNIX csh:

          setenv MSOLBRECOVERYLOG /usr2/accounting/tmp_log1

クライアントプロセスがこのファイルを見つけることができるために `MSOLBRECOVERYLOG`は、常に ログファイルの指定をフルパスで設定すべきです。

望ましくはありませんが、異なったデータベース上でオンラインバックアップを ２つ同時に実行することが可能です。 `MSOLBRECOVERYLOG`は それぞれのオンラインバックアップを実行する前に 異なった値を設定することで保証する必要があります。 （同時に実行する場合は、`MSOLBRECOVERYLOG`を別の値にしなくては ならないということです。）

`empolbak`によって作成されたリカバリーログファイルは、 バックアップ処理が終了した後にディスクから削除されます。 しかしながら、オンラインバックアップ中に クライアントプロセスが動作しているが、 重要な終了時に動作していない状態の場合、 オンライン・バックアップが終了したことを 通知することができません。 このケースでは、`empolbak`は、 ログファイルを削除することができないため、 メッセージを発行します。 DBAによって後に手作業で削除することになりますが、 データベースバックアップ自身は完全であり、正常です。 （プロセスの状態により、一時的なリカバリーログファイルは 残ることがあり、残っていた場合、バックアップ終了後、 手作業で削除しても問題はないということを述べています。）

### 4.6.2 データベース・リカバリー

ハードウェアおよびシステム障害時にデータベースが破損した場合に データベースの最後のオンラインバックアップコピーから復元し、 現在のリカバリーログからデータをその時点まで進めるために `empolrec`を利用することができます。

このコマンドを実行する前に テープが最後のバックアップのテープであるか、また それを読むための準備ができているか、あるいは ディスク上のバックアップファイルである場合、 それが有効であるかを確かめてください。

データベースがバックアップコピーを復元している間は データベースが破損している状態と仮定することは合理的であり、 したがって、リカバリー処理はデータベースを使用されていない間に行う処理です。 そうでなければ、リカバリー処理の前にデータベースがアクセスされていないことを 確認するべきです。 動作中のユーザーを確認するために `empadm データベース名 coordinfo`か `empadm データベース名 lockinfo`を 使います。

`empolrec`は復元を始める前に古いデータベースを完全に削除することに注意してください。

リカバリー処理が開始されたとき、 シェアードメモリー（設定されている場合）は削除され、 バックアップメディアからデータベースファイルを戻すため、 コピーされます。 それからトランザクションログ。 次にバックアップメディアから直接 リカバリーログを前にロールします。 この時点で、連続的なリカバリーロギング（存在する場合）からの トランザクションログとリカバリーログに基づき、 トランザクションがロールバックしなければならないかを 決定します。 最後に、リカバリーログに残っている操作を実行します。

`empolrec`コマンドの構文は、

       empolrec option_list argument_list database

リカバリーはEmpress変数`MSOLBBACKUPDEVICE`によって指定された デフォルトデバイスから行われます。 データベースを復元するための 異なったデバイスまたはファイル名を指定するためには、 "-f" オプションの次にファイル名およびデバイス名を指定します。 例えば、ファイルから復元する場合、以下のコマンドを使います。

       empolrec -f /tmp/backup movies

この例では、"/tmp/backup"はデータベースに復元するためのバックアップファイル名です。 また、"movies"は、復元されるデータベースの名前です。 DAT テープから復元する場合、デバイス名として"/dev/tape"を使った例を示します。

       empolrec -f /dev/tape movies

ファイル名として "-"を使った場合、プロセスの標準入力から、リカバリーデータを 読み込むことに注意してください。

ブロッキングファクターは バックアップの実行時にバックアップファイルのヘッダーの中に記録され、 その値が利用されます。 したがって、ブロックサイズおよびブロッキングファクターを指定する 必要はありません。

データベースのリカバリーをする時に 同じパス名は、データベースがアーカイブされた １つとして利用されます。 バックアップとは異なったパス名へのデータベースの復元は エラーになることに注意してください。 また、バックアップしたときと異なった絶対位置でのデータベースの復元は エラーになることに注意してください。

バックアップの内容を参照するためには"-t"オプションを使います。

       empolrec -tf /tmp/backup movies

これは、バックアップの内容を単に出力し、データベースは復元されることはありません。

最後のオプションは "-v"で、 `empolrec`はリカバリー処理についての 冗長な情報を作成し出力します。 リカバリーの現在の段階とリカバリーされた 各データベースファイル名が出力されます。 例えば、以下のように使用します。

       empolrec -fv /dev/rst8 movies