ヘッダーをスキップ
Oracle Rdb for OpenVMS Oracle RMUリファレンス・マニュアル
リリース7.2
E06177-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

付録B
LogMiner for Rdbの使用方法

この付録では、LogMiner for Rdb機能の使用に関する情報を提供します。

Oracle Rdbのアフター・イメージ・ジャーナル(.aij)ファイルには、データベースのトランザクション履歴について役立つ情報が豊富に含まれます。アフター・イメージ・ジャーナル・ファイルには、データベース・リカバリの実行に必要なすべてのデータが含まれます。これらのファイルには、データベースのデータやメタデータに行われたすべての変更が記録されます。LogMiner for Rdb機能により、Oracle Rdb アフター・イメージ・ジャーナル・ファイルのデータ・レコード内容に対するインタフェースが提供されます。コミット済トランザクションで追加、更新または削除されたデータ・レコードを、.aijファイルから適切な形式で抽出(アンロード)してから、別のデータベースにロードするか、ユーザー作成のアプリケーション・プログラムで使用することができます。

Oracle Rdbのアフター・イメージ・ジャーナルでは、コミット済トランザクションでデータベースに対して行われたすべての変更を、順次ログすなわちジャーナル・ファイルに記録することで、データの整合性を守ります。データベースのリストアおよびリカバリ戦略の一環として、アフター・イメージ・ジャーナルを有効にして、全体バックアップ操作の間のデータベース・トランザクション・アクティビティを記録することをお薦めします。また、アフター・イメージ・ジャーナル・ファイルは、いくつかのデータベース・パフォーマンス拡張機能(高速コミット、行キャッシュ、ホット・スタンバイ機能など)を有効にするためにも使用されます。

アフター・イメージ・ジャーナルの設定の詳細は、『Oracle Rdb7 Guide to Database Maintenance』を参照してください。

LogMiner for Rdbを使用するには、次の手順を実行します。

  1. RMU Set Logminerコマンドを使用してデータベースでのLogMiner操作を有効にします。詳細は、第1.57節を参照してください。

  2. RMU BackupコマンドでQuiet_Point修飾子を使用してアフター・イメージ・ジャーナル・ファイルをバックアップします。

  3. RMU Unload After_Journalコマンドを使用して変更済レコードを抽出します。詳細は、Unload After_Journalのヘルプ・トピックを参照してください。

B.1 LogMiner for Rdbの制約と制限

LogMiner for Rdb機能には次の制約があります。

B.2 LogMiner for Rdbによって返される情報

LogMiner for Rdbは、いくつかの出力フィールドをデータ・フィールドに追加して、出力レコードを作成します。出力レコードには、バイナリ・データ形式の固定長フィールドが含まれます(つまり、整数フィールドはテキスト文字列に変換されません)。データ・フィールドは抽出された表の列に対応します。この情報は、すべてのアプリケーションやデータの読取り処理で必要になる場合とならない場合があります。出力フィールドの制限や並替えのための方法は現在ありません。

抽出されたデータ・フィールドの内容は、Oracle Rdbデータベースに実際に格納されているフィールドです。COMPUTED BYフィールドが抽出されないのは、データベースまたはアフター・イメージ・ジャーナル・ファイルに格納されていないためです。セグメント文字列(BLOB)の内容は抽出されません。

「表B-1」に、出力レコードの出力フィールドとデータ型を示します。

表B-1 出力フィールド
フィールド名 データ型 バイト長 説明
ACTION CHAR (1) 1 レコードの状態を示します。Mは、挿入または変更アクションを示します。Dは、削除アクションを示します。Eは、コールバック・ルーチンが使用されているときにストリームのEOFを示します。Pは、コールバック・ルーチンが使用されているときにコマンドラインのParameter修飾子の値を示します(Parameter修飾子の説明を参照してください)。Cは、Include=Action=Commit修飾子が指定されたときに、トランザクションのコミット情報を示します。
RELATION_NAME CHAR (31) 31 表名。31文字になるように空白が埋め込まれます。
RECORD_TYPE INTEGER
(Longword)
4 Oracle Rdb内部リレーション識別子。
DATA_LEN SMALLINT(Word) 2 データ・レコードの内容の長さ(バイト)。
NBV_LEN SMALLINT(Word) 2 NULLビット・ベクターの内容の長さ(ビット)。
DBK BIGINT(Quadword) 8 レコード論理データベース・キー。データベース・キーは3つのフィールドの構造で、16ビットの行番号、32ビットのページ番号、16ビットの領域番号を含みます。
START_TAD DATE VMS(Quadword) 8 トランザクションの開始日時。
COMMIT_TAD DATE VMS(Quadword) 8 トランザクションのコミット日時。
TSN BIGINT(Quadword) 8 レコードの操作を実行したトランザクションのトランザクション順序番号。
RECORD_VERSION SMALLINT(Word) 2 レコードのバージョン。
Record Data データにより異なる。   実際のデータ・レコード・フィールドの内容。
Record NBV BIT VECTOR(ビット配列)   NULLビット・ベクター。データ・レコードの各フィールドに対して1ビットがあります。ビット値が1の場合、対応するフィールドはNULLです。ビット値が0の場合、対応するフィールドはNULLではなく実際のデータ値を含みます。NULLビット・ベクターはバイト境界から開始します。最後のNULLビットの後のベクターの最終バイトに他のビットがあっても使用されません。

B.3 LogMinerフィールドのレコード定義接頭辞

出力フィルのレコード構造定義を含むRMSファイルは、抽出されたデータをOracle Rdbデータベースにロードする場合に、RMU Loadコマンドの入力として使用できます。レコード定義では、CDOレコードおよびフィールド定義形式が使用されます(これは、RMU LoadおよびRMU UnloadコマンドでRecord_Definition修飾子が使用されるときに使用される形式です)。デフォルトのファイル拡張子は.rrdです。

LogMiner for Rdbが出力に書き込むフィールドのレコード定義を、次の例に示します。アンロードされる実際のユーザー・データ・フィールドのレコード定義ファイルにこれらのフィールドを手動で追加できます。または、Record_Definition修飾子を、Table修飾子と一緒に、またはオプション・ファイル内で使用すると、レコード定義ファイルが自動的に作成されます。これは、データベース内のトランザクション表をロードするために使用できます。トランザクション表は、LogMiner for Rdbが書き込む出力です。データベースで実行された順次トランザクションで構成されます。


DEFINE FIELD RDB$LM_ACTION          DATATYPE IS TEXT SIZE IS 1.
DEFINE FIELD RDB$LM_RELATION_NAME      DATATYPE IS TEXT SIZE IS 31.
DEFINE FIELD RDB$LM_RECORD_TYPE     DATATYPE IS SIGNED LONGWORD.
DEFINE FIELD RDB$LM_DATA_LEN        DATATYPE IS SIGNED WORD.
DEFINE FIELD RDB$LM_NBV_LEN         DATATYPE IS SIGNED WORD.
DEFINE FIELD RDB$LM_DBK             DATATYPE IS SIGNED QUADWORD.
DEFINE FIELD RDB$LM_START_TAD       DATETYPE IS DATE
DEFINE FIELD RDB$LM_COMMIT_TAD      DATATYPE IS DATE
DEFINE FIELD RDB$LM_TSN             DATATYPE IS SIGNED QUADWORD.
DEFINE FIELD RDB$LM_RECORD_VERSION  DATATYPE IS SIGNED WORD.

B.4 LogMinerフィールドのSQL表定義接頭辞

LogMiner for Rdbが出力に書き込むフィールドのSQLレコード定義を、次の例に示します。アンロードされる実際のユーザー・データ・フィールドに対する表作成コマンドにこれらのフィールドを手動で追加できます。または、Table_Definition修飾子を使用してSQL定義ファイルを自動的に作成できます。これは、Table修飾子と一緒に使用するか、オプション・ファイル内で指定します。これは変更データのトランザクション表を作成するために使用できます。


SQL> create table MYLOGTABLE (
cont> RDB$LM_ACTION          CHAR,
cont> RDB$LM_RELATION_NAME      CHAR (31),
cont> RDB$LM_RECORD_TYPE     INTEGER,
cont> RDB$LM_DATA_LEN        SMALLINT,
cont> RDB$LM_NBV_LEN         SMALLINT,
cont> RDB$LM_DBK             BIGINT,
cont> RDB$LM_START_TAD       DATE VMS,
cont> RDB$LM_COMMIT_TAD      DATE VMS,
cont> RDB$LM_TSN             BIGINT,
cont> RDB$LM_RECORD_VERSION  SMALLINT ...);

B.5 セグメント文字列の列

セグメント文字列(BLOBまたはLIST OF BYTE VARYINGとも呼ばれる)の列データは抽出されません。ただし、フィールド定義そのものは、オリジナルのセグメント文字列データのデータベース・キーを表すquadword整数として抽出されます。生成される表定義またはレコード定義ファイルでは、セグメント文字列データ型はLogMiner for Rdbではサポートされないことを示すコメントが追加されます。

B.6 メンテナンス時のアプリケーション停止時間を最小限に抑えるためのLogMinerの使用

アプリケーションまたはデータベースの時間がかかるオフライン・メンテナンス操作は、高可用性本番環境で重大な問題になることがあります。LogMiner for Rdb機能を使用して、停止時間を数分間に短縮することができます。

データベースのバックアップをメンテナンス操作に使用すると、長時間のメンテナンス操作中にもアプリケーションを引き続き変更することができます。メンテナンスが終了したら、アプリケーションを停止し、本番システムの.aijファイル(1つまたは複数)をバックアップすることができます。また、LogMiner for Rdbを使用して、データベースがバックアップされてから本番表に行われた変更を抽出できます。その後、これらの変更を新しいデータベースに適用できます(アプリケーション・プログラムまたは前に説明したトリガー技法を使用)。新しいデータベースの更新が完了したら、新しいデータベースを使用するアプリケーションを再起動できます。

必要な操作の順序は次のようになります。

  1. 本番データベースの全体オンライン・クワイエットポイント・データベース・バックアップを実行します。

  2. バックアップをリストアして、本番データベースにするための新しいデータベースを作成します。

  3. 新しいデータベースでメンテナンス操作を実行します。(本番システムは稼働し続けていることに注意してください。)

  4. 本番データベースのオンライン・クワイエットポイント・アフター・イメージ・ジャーナル・バックアップを実行します。

  5. RMU Unload After_Journalコマンドを使用して、.aijバックアップ・ファイルからすべてのデータベース表を個々の出力ファイルにアンロードします。

  6. トリガー技法またはアプリケーション・プログラムを使用して、新しいデータベースの表を変更されたデータで更新します。

  7. 本番アプリケーションを停止し、データベースを閉じます。

  8. 本番データベースのオフライン・クワイエットポイント・アフター・イメージ・ジャーナル・バックアップを実行します。

  9. RMU Unload After_Journalコマンドを使用して、.aijバックアップ・ファイルからすべてのデータベース表を個々の出力ファイルにアンロードします。

  10. トリガー技法またはアプリケーション・プログラムを使用して、新しいデータベースの表を変更されたデータで更新します。

  11. 新しいデータベースのオンライン・クワイエットポイント・バックアップを開始します。

  12. 論理名または環境を変更して、新しいデータベース・ルート・ファイルを本番データベースとして指定します。

  13. 新しいデータベースでアプリケーションを再起動します。

アプリケーションのデータベース・アクティビティの量によって異なりますが、手順4、5および6を繰り返すことで、手順8、9および10の最後のアフター・イメージ・ジャーナルのバックアップと適用の段階で、適用する必要があるデータ容量(および必要な停止時間)を制限することができます。

B.7 OpenVMSパイプの使用

OpenVMSパイプを使用して、RMU Unload After_Journalコマンドのデータを別のアプリケーション(たとえばRMU Load)に渡すことができます。LogMinerが追加の出力をSYS$OUTPUTデバイスに送るオプション(LogまたはVerify修飾子など)を使用しないでください。そのような情報も、次のパイプライン・セグメントへの入力データ・ソース・ストリームに含まれてしまうためです。

抽出されるレコード(LogMinerのフィールドを含む)が256バイトよりも大きい場合は、OpenVMSのデフォルト・サイズのパイプが小さすぎることがあります。パイプが小さすぎる場合は、SYSGENのパラメータMAXBUFおよびDEFMBXMXMSGを増やして、システムを再起動します。

次の例は、LogMiner for Rdbを使用して出力をOpenVMSパイプ・デバイスに送り、RMU Loadを使用して入力データ・レコード・ストリームとしてパイプ・デバイスを読み取ります。パイプラインを使用することで、パラレル処理が可能になり、中間ディスク・ファイルの必要性がなくなります。コマンドを実行する前にレコード定義(.rrd)ファイルを作成しておく必要があることに注意してください。


$ PIPE (RMU /UNLOAD /AFTER_JOURNAL OLTP.RDB AIJ1.AIJ -
    /TABLE = (NAME = MYTBL, OUTPUT = SYS$OUTPUT:)) -
     |  (RMU /LOAD REPORTS.RDB MYLOGTBL SYS$PIPE: -
        /RECORD_DEFINITION = FILE = MYLOGTBL.RRD)