エンバカデロの最新情報をTwitterで配信。 embarcadero_jp をフォローして、すばやく情報をゲットしよう!

InterBaseのジャーナル機能について

概要: InterBaseのジャーナル機能について説明します

ジャーナルとは、稼働中に半自動的に記録する更新記録などの情報のことです。

ファイルや、データベースシステムへの変更や通信記録などの変更を記録し、データの破損やシステムの不調などの際に、原因の特定や復旧作業を行なうことを目的としています。

InterBaseのジャーナルは、1つまたは複数のファイルで構成されます。

ジャーナルファイルは、各データベースのトランザクションが発生した時点の情報を記録し、常にデータベーストランザクションの最新レコードを保持します。

    ジャーナル機能の有効化

ジャーナル機能を有効にするには、ジャーナル機能を有効化したデータベースに接続後、CREATE JOURNALコマンドを実行します。

# ISQL –user sysdba –password masterkey
USE CONNECT or CREATE DATABASE to specify a database
SQL> connect employee.gdb;
Database: employee.gdb, User: sysdba
SQL> create journal;

CREATE JOURNALでジャーナル機能を有効にすると、

  • [データベースファイル名].PREALLOCATED.nn.JOURNAL : ジャーナルの開始地点の情報
  • [データベースファイル名].yyyy-mm-dd-Thh-mm-ssZ.nn.JOURNAL : ジャーナルファイル
  • IB_JOURNAL : ジャーナルの対象のデータベース情報

の3つのファイルが作成され、データベースのトランザクションの発生と共に、ジャーナルファイルが更新されます。また、ジャーナルファイル内のログがいっぱいになった時点で、新たなジャーナルファイルを作成します。

例えば、

JOUR.2009-06-09-T13-00-00Z.10.JOURNAL

のジャーナルファイル内のログがいっぱいになった時点で

JOUR.2009-06-09-T15-00-00Z.11.JOURNAL

のような新たなジャーナルファイルが生成されます。

nnは任意の数字、yyyy-mm-dd年月日、hh-mm-ssは時間を表します。

例えば、JOUR.2009-06-09-T13-00-00Z.10.JOURNAL というジャーナルファイルが作成された場合、200969日の午後1時時点で作成されたファイルであり、ジャーナルのログ収集が開始された時刻をファイル名から判別することができます。

    ジャーナルアーカイブ

ジャーナル機能を有効化すると、ジャーナルファイルがトランザクションと時間の増加とともに作成されます。

ジャーナルファイルをアーカイブとしてまとめておき、また、アーカイブデータベースダンプを作成することにより、障害発生時のデータベースの復旧を容易に行うことが可能となります。

    ジャーナルアーカイブ機能の有効化

ジャーナルアーカイブの機能を有効化するには、CREATE JOURNAL ARCHIVEコマンドを実行します。

# ISQL –user sysdba –password masterkey
USE CONNECT or CREATE DATABASE to specify a database
SQL> connect employee.gdb;
Database: employee.gdb, User: sysdba
SQL> create journal;
SQL> create journal archive;

CREATE JOURNAL ARCHIVEで、ジャーナルアーカイブ機能を有効にすると

  • IB_JOURNAL_ARCHIVE : アーカイブもとのデータベース情報

が作成されます。

    ジャーナルファイルのアーカイブを作成する

ジャーナルファイルのアーカイブを作成するには、CREATE JOURNAL ARCHIVEでジャーナルアーカイブ機能を有効にした後に GBAKコマンドの –ARCHIVE_JOURNALS オプションを使用します。

# gbak –archive_journals employee.gdb –user sysdba –password masterkey

    アーカイブデータベースダンプを作成する

アーカイブデータベースダンプを作成するには、CREATE JOURNAL ARCHIVEでジャーナルアーカイブ機能を有効にした後に GBAKコマンドの –ARCHIVE_DATABASE オプションを使用します。

# gbak –archive_database employee.gdb –user sysdba –password masterkey

ここで作成されるアーカイブデータベースダンプは

  • [データベースファイル名].yyyy-mm-dd-Thh-mm-ssZ.nn.DATABASE

というような名前で生成されます。

このファイル名からいつ作成されたアーカイブデータベースダンプかを判断することが可能です。

ジャーナルファイルと同様に、nnは任意の数字、yyyy-mm-ddは年月日、hh-mm-ssは時間を表します。

    ジャーナルアーカイブを使ってデータベースを復旧する

アーカイブデータベースダンプと、アーカイブされたジャーナルファイルよりデータベースを復旧することができます。復旧には GBAKコマンドの -ARCHIVE_RECOVERオプションを使用します。

# gbak –archive_recover employee.gdb.2009-06-08T14-22-19Z.4.DATABASE employee_new.gdb –user sysdba –password masterkey

上記コマンドは、アーカイブデータベース employee.gdb.2009-06-08T14-22-19Z.4.DATABASEを employee_new.gdbという名前で復旧します。この段階では、復元された employee_new.gdbは読み込み専用のデータベースのため、読み書き可能な状態に復旧するには GFIX –MODE READ_WRITEコマンドを実行する必要があります。

# gfix –mode read_write employee_new.gdb –user sysdba –password masterkey

    ジャーナルアーカイブ機能の無効化

ジャーナルアーカイブ機能を無効化するには、DROP JOURNAL ARCHIVEコマンドを使用します。

DROP JOURNAL ARCHIVEコマンドを実行すると、アーカイブデータベースダンプと IB_JOURNAL_ARCHIVEファイルが削除されます。

# ISQL –user sysdba –password masterkey
USE CONNECT or CREATE DATABASE to specify a database
SQL> connect employee.gdb;
Database: employee.gdb, User: sysdba
SQL> drop journal archive;

ジャーナルアーカイブ機能を無効にしても、ジャーナル機能(ジャーナルファイルの作成)は有効のままです。ジャーナル機能を無効にするには、この後に記載されている DROP JOURNALコマンドを実行する必要があります。

    ジャーナル機能の無効化

ジャーナル機能を無効化するには、DROP JOURNALコマンドを使用します。

DROP JOURNAL コマンドを実行すると、ジャーナルの収集を終了し、ジャーナルファイルと IB_JOURNALファイルが削除されます。

# ISQL –user sysdba –password masterkey
USE CONNECT or CREATE DATABASE to specify a database
SQL> connect employee.gdb;
Database: employee.gdb, User: sysdba
SQL> drop journal;

    注意事項

InterBaseのジャーナル機能が使用できるのは、Interbase 2007以降の Server Editionのみとなります。

ジャーナルファイルはプラットフォーム固有なので、他のプラットフォームでは使用できません。

なお、作成されるジャーナルファイルに関して、チェックポイントの間隔やページ数の指定を行なうことも可能です。

詳しくはマニュアルをご参照下さい。