この付録では、LogMiner for Rdb機能の使用に関する情報を提供します。
Oracle Rdbのアフター・イメージ・ジャーナル(.aij)ファイルには、データベースのトランザクション履歴について役立つ情報が豊富に含まれます。アフター・イメージ・ジャーナル・ファイルには、データベース・リカバリの実行に必要なすべてのデータが含まれます。これらのファイルには、データベースのデータやメタデータに行われたすべての変更が記録されます。LogMiner for Rdb機能により、Oracle Rdb アフター・イメージ・ジャーナル・ファイルのデータ・レコード内容に対するインタフェースが提供されます。コミット済トランザクションで追加、更新または削除されたデータ・レコードを、.aijファイルから適切な形式で抽出(アンロード)してから、別のデータベースにロードするか、ユーザー作成のアプリケーション・プログラムで使用することができます。
Oracle Rdbのアフター・イメージ・ジャーナルでは、コミット済トランザクションでデータベースに対して行われたすべての変更を、順次ログすなわちジャーナル・ファイルに記録することで、データの整合性を守ります。データベースのリストアおよびリカバリ戦略の一環として、アフター・イメージ・ジャーナルを有効にして、全体バックアップ操作の間のデータベース・トランザクション・アクティビティを記録することをお薦めします。また、アフター・イメージ・ジャーナル・ファイルは、いくつかのデータベース・パフォーマンス拡張機能(高速コミット、行キャッシュ、ホット・スタンバイ機能など)を有効にするためにも使用されます。
アフター・イメージ・ジャーナルの設定の詳細は、『Oracle Rdb7 Guide to Database Maintenance』を参照してください。
LogMiner for Rdbを使用するには、次の手順を実行します。
LogMiner for Rdb機能には次の制約があります。
B.2 LogMiner for Rdbによって返される情報
LogMiner for Rdbは、いくつかの出力フィールドをデータ・フィールドに追加して、出力レコードを作成します。出力レコードには、バイナリ・データ形式の固定長フィールドが含まれます(つまり、整数フィールドはテキスト文字列に変換されません)。データ・フィールドは抽出された表の列に対応します。この情報は、すべてのアプリケーションやデータの読取り処理で必要になる場合とならない場合があります。出力フィールドの制限や並替えのための方法は現在ありません。
抽出されたデータ・フィールドの内容は、Oracle Rdbデータベースに実際に格納されているフィールドです。COMPUTED BYフィールドが抽出されないのは、データベースまたはアフター・イメージ・ジャーナル・ファイルに格納されていないためです。セグメント文字列(BLOB)の内容は抽出されません。
「表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ビットの後のベクターの最終バイトに他のビットがあっても使用されません。 |
出力フィルのレコード構造定義を含む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. |
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 ...); |
セグメント文字列(BLOBまたはLIST OF BYTE VARYINGとも呼ばれる)の列データは抽出されません。ただし、フィールド定義そのものは、オリジナルのセグメント文字列データのデータベース・キーを表すquadword整数として抽出されます。生成される表定義またはレコード定義ファイルでは、セグメント文字列データ型はLogMiner for Rdbではサポートされないことを示すコメントが追加されます。
B.6 メンテナンス時のアプリケーション停止時間を最小限に抑えるためのLogMinerの使用
アプリケーションまたはデータベースの時間がかかるオフライン・メンテナンス操作は、高可用性本番環境で重大な問題になることがあります。LogMiner for Rdb機能を使用して、停止時間を数分間に短縮することができます。
データベースのバックアップをメンテナンス操作に使用すると、長時間のメンテナンス操作中にもアプリケーションを引き続き変更することができます。メンテナンスが終了したら、アプリケーションを停止し、本番システムの.aijファイル(1つまたは複数)をバックアップすることができます。また、LogMiner for Rdbを使用して、データベースがバックアップされてから本番表に行われた変更を抽出できます。その後、これらの変更を新しいデータベースに適用できます(アプリケーション・プログラムまたは前に説明したトリガー技法を使用)。新しいデータベースの更新が完了したら、新しいデータベースを使用するアプリケーションを再起動できます。
必要な操作の順序は次のようになります。
アプリケーションのデータベース・アクティビティの量によって異なりますが、手順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) |