Oracle® GoldenGate Application Adapters

Oracle GoldenGate Adaptersの管理

12c (12.1.2.1.1)

E67383-01(原本部品番号:E61853-01)

2015年5月

このドキュメントでは、Oracle GoldenGateアダプタを構成、カスタマイズおよび実行して、フラット・ファイルの生成、JMSメッセージの取得およびOracle GoldenGate証跡としての配信を行う方法、または証跡を読み取ってトランザクションをメッセージング・システムに配信する方法について説明します。

Oracle GoldenGate Application Adapters Oracle GoldenGateアダプタの管理, 12c (12.1.2.1.1)

E67383-01

Copyright © 2015, Oracle and/or its affiliates.All rights reserved.

原本著者:

原本協力者:

原本協力者:

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXはThe Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社との間で該当する取決めにて別途規定しないかぎり、オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社との間で該当する取決めにて別途規定する場合を除き、オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

第I部 Oracle GoldenGateアダプタの理解

1 Oracle GoldenGateアダプタの理解

- 1.1 アダプタの概要

- 1.1.1 Oracle GoldenGate

- 1.1.2 アダプタ統合オプション

- 1.2 Oracle GoldenGateアダプタのプロパティの使用

- 1.2.1 プロパティ・ファイル内の値

- 1.2.2 プロパティ・ファイルの場所

- 1.2.3 プロパティ・ファイルでのコメントの使用

- 1.2.4 プロパティ名内の変数

- 1.3 Oracle GoldenGateのドキュメント

2 ファイル・ライターの概要

- 2.1 フラット・ファイル用アダプタの概要

- 2.2 一般的な構成

3 Javaアダプタの概要

- 3.1 Oracle GoldenGate VAMメッセージの取得

- 3.1.1 メッセージ取得構成オプション

- 3.1.2 一般的な構成

- 3.2 Oracle GoldenGate Javaユーザー・イグジット

- 3.2.1 配信構成オプション

4 ロギングの構成

- 4.1 Oracle GoldenGateアダプタのデフォルト・ロギング

- 4.1.1 デフォルト実装タイプ

- 4.1.2 デフォルト・メッセージ・ロギング

- 4.2 デフォルト・ロギングの変更

- 4.2.1 ロギング・タイプの変更

- 4.2.2 ロギング構成の変更

- 4.2.3 デバッグの有効化

第II部 フラット・ファイルの作成

5 フラット・ファイル・アダプタの構成

- 5.1 フラット・ファイルの書込み用アダプタの構成

- 5.1.1 ユーザー・イグジットExtractのパラメータ

- 5.1.2 ユーザー・イグジット・プロパティ

- 5.2 推奨されるデータ統合方法

- 5.3 データ・ファイルの生成

6 フラット・ファイル・アダプタの使用

- 6.1 制御ファイルの使用

- 6.2 統計サマリーの使用

- 6.3 Oracle GoldenGateプロセスの管理

- 6.4 証跡リカバリ・モード

- 6.5 エラー・メッセージの特定

7 あらかじめ定義されているデフォルトおよび形式

- 7.1 あらかじめ定義されているデフォルトおよび形式の概要

- 7.1.1 デフォルト・プロパティ

- 7.1.2 コンシューマ形式の指定

- 7.2 Siebel Remote形式

- 7.3 Ab Initio形式

- 7.4 Netezza形式

- 7.5 Greenplum形式

- 7.6 カンマ区切り形式

8 フラット・ファイルのプロパティ

- 8.1 ユーザー・イグジット・プロパティ

- 8.1.1 ロギング・プロパティ

- 8.1.2 一般プロパティ

- 8.2 ファイル・ライター・プロパティ

- 8.2.1 出力形式のプロパティ

- 8.2.2 出力ファイルのプロパティ

- 8.2.3 ファイル・ロールオーバー・プロパティ

- 8.2.4 データ内容のプロパティ

- 8.2.5 DSV固有のプロパティ

- 8.2.6 LDV固有のプロパティ

- 8.2.7 統計およびレポート

第III部 JMSメッセージの取得

9 メッセージ取得の構成

- 9.1 VAM Extractの構成

- 9.1.1 Extractの追加

- 9.1.2 Extractパラメータの構成

- 9.1.3 メッセージ取得の構成

- 9.2 メッセージの接続と取得

- 9.2.1 JMSへの接続

- 9.2.2 メッセージの取得

- 9.2.3 トランザクションの完了

10 メッセージの解析

- 10.1 解析の概要

- 10.1.1 パーサー・タイプ

- 10.1.2 ソースおよびターゲットのデータ定義

- 10.1.3 必須データ

- 10.1.4 オプション・データ

- 10.2 固定幅解析

- 10.2.1 ヘッダー

- 10.2.2 ヘッダーとレコード・データ型の翻訳

- 10.2.3 キー識別子

- 10.3 区切り解析

- 10.3.1 メタデータ列

- 10.3.2 解析プロパティ

- 10.3.3 解析手順

- 10.4 XML解析

- 10.4.1 XMLのスタイル

- 10.4.2 XML解析ルール

- 10.4.3 XPath式

- 10.4.4 他の値式

- 10.4.5 トランザクション・ルール

- 10.4.6 操作ルール

- 10.4.7 列ルール

- 10.4.8 ルール全体の例

- 10.5 ソース定義生成ユーティリティ

11 メッセージ取得プロパティ

- 11.1 ロギングおよび接続のプロパティ

- 11.1.1 ロギング・プロパティ

- 11.1.2 JMS接続プロパティ

- 11.1.3 JNDIプロパティ

- 11.2 パーサー・プロパティ

- 11.2.1 パーサーのタイプの設定

- 11.2.2 固定パーサー・プロパティ

- 11.2.3 区切りパーサー・プロパティ

- 11.2.4 XMLパーサー・プロパティ

第IV部 Javaメッセージの配信

12 メッセージ配信の構成

- 12.1 ユーザー・イグジット・プロパティ・ファイルでのJREの構成

- 12.2 ユーザー・イグジットを実行するためのデータ・ポンプの構成

- 12.3 Javaハンドラの構成

13 Javaユーザー・イグジットの使用

- 13.1 アプリケーションの起動

- 13.2 証跡の先頭でのアプリケーションの再起動

14 イベント・ハンドラの構成

- 14.1 イベント・ハンドラの指定

- 14.2 JMSハンドラ

- 14.3 ファイル・ハンドラ

- 14.4 カスタム・ハンドラ

- 14.5 出力のフォーマット

- 14.6 レポート

15 メッセージ配信プロパティ

- 15.1 ユーザー・イグジット・プロパティ

- 15.1.1 ロギング・プロパティ

- 15.1.2 一般プロパティ

- 15.1.3 JVM起動オプション

- 15.1.4 統計およびレポート

- 15.2 Javaアプリケーション・プロパティ

- 15.2.1 すべてのハンドラ用のプロパティ

- 15.2.2 フォーマットされた出力用のプロパティ

- 15.2.3 CSVおよび固定形式の出力用プロパティ

- 15.2.4 ファイル・ライター・プロパティ

- 15.2.5 JMSハンドラ・プロパティ

- 15.2.6 JNDIプロパティ

- 15.2.7 一般プロパティ

16 カスタム・フィルタ、フォーマッタおよびハンドラの開発

- 16.1 イベントのフィルタリング

- 16.2 カスタム・フォーマット

- 16.2.1 Javaでのカスタム・フォーマッタのコーディング

- 16.2.2 Velocityテンプレートの使用

- 16.3 Javaでのカスタム・ハンドラのコーディング

- 16.4 追加リソース

第V部 Oracle GoldenGateアダプタのトラブルシューティング

17 フラット・ファイル・アダプタのトラブルシューティング

- 17.1 Oracle GoldenGateの確認

- 17.2 構成の確認

- 17.3 ログ・ファイルの確認

- 17.4 Oracleサポートへの連絡

18 Javaアダプタのトラブルシューティング

- 18.1 エラーの確認

- 18.2 異常終了後のリカバリ

- 18.3 問題のレポート

第VI部 付録

A アダプタの例

- A.1 含まれているサンプルのリスト

- A.2 ロギングの構成

- A.2.1 Oracle GoldenGate Javaユーザー・イグジット・デフォルトの例

- A.2.2 ロギングのカスタマイズ

はじめに

このガイドには、Oracle GoldenGateアダプタの構成および実行、Oracle GoldenGateインスタンスの機能の拡張に関する情報が含まれています。

対象読者

このガイドは、Oracle GoldenGateアダプタを構成および実行するシステム管理者を対象としています。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWeb サイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoか、聴覚に障害のあるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。

関連ドキュメント

Oracle GoldenGateの完全なドキュメント・セットには、次のコンポーネントが含まれます。

HP NonStopプラットフォーム

- Oracle GoldenGateリファレンスfor HP NonStop Guardian

- Oracle GoldenGateの管理for HP NonStop (Guardian)

- Oracle GoldenGate Application Adapters BASE24管理者ガイドfor HP NonStop (Guardian)

- Oracle GoldenGate Application Adapters for BASE24 D24デュアル・サイト補足ガイドfor HP NonStop (Guardian)

- Oracle GoldenGate Application Adapters for BASE24 N24通知補足ガイドfor HP NonStop (Guardian)

- Oracle GoldenGate Application Adapters for BASE24 T24トークン化データ補足ガイドfor HP NonStop (Guardian)

Windows、UNIXおよびLinuxプラットフォーム

- DB2 for iのためのOracle GoldenGateのインストールおよび構成

- DB2 LUWのためのOracle GoldenGateのインストールおよび構成

- DB2 z/OSのためのOracle GoldenGateのインストールおよび構成

- Oracle GoldenGate for Informixのインストールおよび構成

- MySQLのためのOracle GoldenGateのインストールおよび構成

- NonStop SQL/MXのためのOracle GoldenGateのインストールおよび構成

- Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成

- Oracle TimesTenのためのOracle GoldenGateのインストールおよび構成

- SQL ServerのためのOracle GoldenGateのインストールおよび構成

- SybaseのためのOracle GoldenGateのインストールおよび構成

- TeradataのためのOracle GoldenGateのインストールおよび構成

- Oracle GoldenGateの管理for Windows and UNIX

- 『Oracle GoldenGate Windows and UNIXリファレンス・ガイド』

- Oracle GoldenGateログダンプ・リファレンス

- Oracle GoldenGateのアップグレードfor Windows and UNIX

- Oracle GoldenGateエラー・メッセージ・リファレンスfor Windows and UNIX

Oracle GoldenGateのその他の製品

- Oracle GoldenGate Adaptersの管理

- Oracle GoldenGateアダプタのインストール

- Oracle GoldenGateアダプタのアップグレード

- Oracle GoldenGate Directorの管理

- Oracle GoldenGate Monitorの管理

- Oracle GoldenGate Veridataの管理

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するグラフィカル・ユーザー・インタフェース要素("「ファイル」メニューから「保存」を選択します"など)を示します。太字は、本文中で定義されている用語および用語集に記載されている用語も示します。

イタリック
イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数(パラメータ文TABLE table_nameなど)を示します。イタリックは、ドキュメントのタイトルおよび強調にも使用されます。

固定幅フォント
大文字の固定幅フォント

固定幅フォントは、ユーザー・イグジットやスクリプトなどのコードのコンポーネント、ファイルおよびデータベース・オブジェクトの名前、URLのパス、および画面に表示される入出力テキストを示します。大文字の固定幅フォントは、Oracle GoldenGateのパラメータ、コマンド、ユーザーが構成可能な関数およびSQLコマンドとキーワードを表すために使用されます。

大文字

通常フォントの大文字は、特別な場合を除き、ユーティリティの名前を表します。

{ }

構文内の中カッコは、パイプ記号で区切ったオプションのセットを囲み、その中の1つを選択する必要があることを表します。たとえば、{option1 | option2 | option3}です。

[ ]

構文内の大カッコは、オプションの要素を示します。たとえば、CLEANUP REPLICAT group_name [, SAVE count]という構文では、SAVE句がオプションです。オプション要素内の複数の要素は、パイプ記号で区切ります(例: [option1 | option2])。

第I部

Oracle GoldenGateアダプタの理解

この部では、Oracle GoldenGateアダプタの概念および基本的な構造について説明します。

第I部には、次の章があります。

- 第1章「Oracle GoldenGateアダプタの理解」

- 第2章「ファイル・ライターの概要」

- 第3章「Javaアダプタの概要」

1 Oracle GoldenGateアダプタの理解

この章では、Oracle GoldenGateインスタンスとの統合によってJava Message Service (JMS)情報を取り込んだり、JMSメッセージまたはファイルとして情報を配信するOracle GoldenGateアダプタの概要を示します。

この章の内容は次のとおりです。

- アダプタの概要

- Oracle GoldenGateアダプタのプロパティの使用

- Oracle GoldenGateのドキュメント

1.1 アダプタの概要

この項では、Oracle GoldenGateアダプタの概要を示します。

1.1.1 Oracle GoldenGate

Oracle GoldenGateアダプタは、コアOracle GoldenGateインスタンスと統合されます。

コアOracle GoldenGate製品での処理は、次のとおりです。

- トランザクション変更をソース・データベースから取得します

- Oracle GoldenGate証跡と呼ばれる、データベースに依存しないファイルのセットとしてこれらの変更を送信およびキューイングします

- オプションで、マッピング・パラメータおよび関数を使用してソース・データを変更します

- 証跡内のトランザクションをターゲット・システム・データベースに適用します

Oracle GoldenGateでは、この取得と適用が異種データベース、プラットフォームおよびオペレーティング・システム間でほぼリアルタイムで行われます。

1.1.2 アダプタ統合オプション

Oracle GoldenGateアダプタはOracle GoldenGateコア製品のインストールと統合され、次のいずれかを行います。

- JMSメッセージを読み取り、Oracle GoldenGate証跡として配信します

- Oracle GoldenGate証跡を読み取り、トランザクションをJMSプロバイダ、他のメッセージング・システムまたはカスタム・アプリケーションに配信します

- Oracle GoldenGate証跡を読み取り、他のアプリケーションによって使用可能なファイルにトランザクションを書き込みます

1.1.2.1 トランザクションの証跡への取得

Oracle GoldenGateのメッセージ取得を使用して、キューからメッセージを読み取り、Oracle GoldenGate Extractプロセスと通信して、処理したデータを含む証跡を生成します。

メッセージ取得処理は、通常のExtractプロセスのベンダー・アクセス・モジュール(VAM)プラグインとして実装されます。プロパティ、ルールおよび外部ファイルのセットによってメッセージ接続情報が指定され、メッセージの解析方法とターゲットGoldenGate証跡のレコードへのマップ方法が定義されます。

現在このアダプタでは、JMSテキスト・メッセージからの取得がサポートされています。

1.1.2.2 トランザクションの証跡からの適用

Oracle GoldenGateの配信を使用して、トランザクションの変更をリレーショナル・データベース以外のターゲット(DataStage、Ab Initio、InformaticaなどのETLツール、JMSメッセージング、カスタムAPIなど)に適用します。Oracle GoldenGateとの統合には、様々なオプションがあります。

- フラット・ファイル統合: 主にETL(プロプライエタリまたはレガシー・アプリケーション)用で、Oracle GoldenGateファイル・ライターは、バッチ・ファイルを入力とするツールによって消費されるマイクロ・バッチをディスクに書き込むことができます。データは、デリミタ区切り、長さ区切り、バイナリなどターゲット・アプリケーションの仕様に合せてフォーマットされます。バッチ・ファイル・ロールオーバーの時間ウィンドウを分または秒に短縮することで、これらのシステムへのほぼリアルタイムでのフィードが実現されます。

- メッセージング: トランザクションまたは操作はメッセージ(XML形式など)としてJMSにパブリッシュされます。ActiveMQ、JBoss Messaging、TIBCO、WebLogic JMS、WebSphere MQなどのJMSプロバイダを構成できます。

- Java API: カスタム・イベント・ハンドラをJavaで記述し、Oracle GoldenGateによってソース・システムで取得されたトランザクション、操作およびメタデータの変更を処理できます。これらのカスタムJavaハンドラで、ターゲット・システムで公開されているサードパーティJava APIにこれらの変更を適用します。

これらの3つのオプションとも、Oracle GoldenGateのユーザー・イグジット・インタフェースであるC APIを使用したコアOracle GoldenGate製品の拡張として実装されています。

- フラット・ファイル統合の場合、Oracle GoldenGateファイル・ライターによって、OracleGoldenGate Extractプロセスに動的にリンクされるユーザー・イグジット・ライブラリが提供されます。構成はプロパティ・ファイルを使用して行われ、プログラミングは必要ありません。

- JMSまたはJava APIを使用したJava統合の場合、Java用Oracle GoldenGateを使用します。

1.2 Oracle GoldenGateアダプタのプロパティの使用

Oracle GoldenGateアダプタは、あらかじめ定義されたプロパティによって構成および制御されます。

1.2.1 プロパティ・ファイル内の値

Oracle GoldenGateアダプタのプロパティ・ファイル内のプロパティはすべて次の形式です。

property.name=value

値は、単一またはカンマ区切りの文字列、整数またはブール値です。

1.2.2 プロパティ・ファイルの場所

サンプルOracle GoldenGateアダプタ・プロパティ・ファイルは、インストール・ディレクトリのAdapterExamplesサブディレクトリにインストールされます。これらのファイルを必要に応じて変更し、dirprmサブディレクトリに移動します。

次の説明のとおり、これらの各プロパティ・ファイルは、パラメータまたは環境変数を介して指定する必要があります。これらの設定によって名前または場所を変更できますが、やむを得ない場合を除き変更しないことをお薦めします。

次のサンプル・ファイルが含まれています。

- ffwriter.properties
これには、ファイル・ライターのプロパティが格納されます。CUSEREXIT Extractパラメータで設定されます。

- jmsvam.properties
これには、JMSメッセージ取得VAMのプロパティが格納されます。これは、Extract VAMパラメータで設定されます。

- javaue.properties
これには、メッセージの配信に使用されるユーザー・イグジットおよびJavaアプリケーションを合せたプロパティが格納されます。次の環境変数を介して設定されます。

SETENV (GGS_USEREXIT_CONF = "dirprm/javaue.properties")

オプションで、Javaアプリケーション・プロパティおよびネイティブ・ユーザー・イグジット・ライブラリ・プロパティを別個のファイルにすることもできます。これを行うには、GGS_USEREXIT_CONFをユーザー・イグジット・プロパティ・ファイルに設定し、GGS_JAVAUSEREXIT_CONFをJavaアプリケーション・プロパティ・ファイルに設定します。

1.2.3 プロパティ・ファイルでのコメントの使用

行の先頭に#接頭辞を付けることで、プロパティ・ファイルにコメントを入力できます。次に例を示します。

# This is a property comment
some.property=value

プロパティ自体をコメントにすることもできます。これによって、前のプロパティ設定を保持したまま構成をテストできます。

1.2.4 プロパティ名内の変数

一部のプロパティは、プロパティ名に変数を含みます。これによって、特定のインスタンスでのみ適用されるプロパティを示すことができます。

たとえば、goldengate.flatfilewriter.writersプロパティを使用して複数のファイル・ライターを宣言し、ファイル・ライターの名前を使用して、異なるプロパティを設定できます。

1. writerおよびwriter2という名前の2つのファイル・ライターを宣言します。

goldengate.flatfilewriter.writers=writer,writer2

2. 各ファイル・ライターのプロパティを指定します。

writer.mode=dsv
writer.files.onepertable=true
writer2.mode=ldv
writer2.files.onpertable=false

1.3 Oracle GoldenGateのドキュメント

Oracle GoldenGateファイル・ライターまたはJavaアダプタと組み合せて使用するためのコアOracle GoldenGateソフトウェアのインストールおよび構成の詳細は、次のOracle GoldenGateのドキュメントを参照してください。

- インストレーションおよびセットアップ・ガイド: Oracle GoldenGate for Mainframeによってサポートされるデータベースごとにこのガイドがあります。システム要件、インストール前後の処置、インストール手順、およびOracle GoldenGate for Mainframeレプリケーション・ソリューションをインストールするためのその他のシステム固有の情報が含まれます。

- Oracle GoldenGateの管理for Windows and UNIX: WindowsおよびUNIXプラットフォームでのOracle GoldenGate for Mainframeレプリケーション・ソリューションの計画、構成および実装方法について説明します。

- Oracle GoldenGate Windows and UNIXリファレンス・ガイド: WindowsおよびUNIXプラットフォーム向けOracle GoldenGate for Mainframeのパラメータ、コマンドおよび関数の詳細が含まれます。

2 ファイル・ライターの概要

この章では、Oracle GoldenGateフラット・ファイル用アダプタの概要を示します。このアダプタでは、OracleGoldenGate Extractプロセスに動的にリンクされるユーザー・イグジット・ライブラリが提供されます。ライブラリは、.ddlまたは.so形式です。プロパティ・ファイルを使用して構成されるため、プログラミングは必要ありません。

この章の内容は次のとおりです。

- フラット・ファイル用アダプタの概要

- 一般的な構成

2.1 フラット・ファイル用アダプタの概要

Oracle GoldenGateフラット・ファイル用アダプタでは、Oracle GoldenGateによって取得されたトランザクション・データがサード・パーティ製品によって使用されるローリング・フラット・ファイルに出力されます。

ユーザー・イグジットでは、次の2つの出力モードがサポートされます。

- DSV - デリミタ(カンマなど)区切りの値

- LDV - 長さ区切りの値

次のようにデータを出力できます。

- すべてを1ファイルに

- 表ごとに1ファイル

- 操作コードごとに1ファイル

ユーザー・イグジットは、時間またはサイズの基準に基づいてロールオーバーできます。ファイルをフラッシュし、Oracle GoldenGateのチェックポイントのたびにチェックポイントを保持してリカバリを保証します。サポートされているデータ統合製品との同期用にロールオーバーしたファイルのリストを含む制御ファイルを作成します。監査で使用するサマリー・ファイルを生成することもできます。

その他のプロパティによって、フォーマット(デリミタやその他の値)、ディレクトリ、ファイル拡張子、メタデータ列(表名、ファイルの場所など)およびデータ・オプションを制御します。

2.2 一般的な構成

次の図に、Oracle GoldenGateフラット・ファイル用アダプタの一般的な構成を示します。

この構成では、ソース・データベースのトランザクションがプライマリExtractプロセスによって取得され、Oracle GoldenGate証跡に書き込まれます。データ・ポンプExtractによってこの証跡がOracle GoldenGateアダプタExtractに送信され、これに関連付けられているユーザー・イグジット・プロセスによってサード・パーティ・アプリケーションに合せた形式のフラット・ファイルにデータが書き込まれます。

図2-1 フラット・ファイル用Oracle GoldenGate

3 Javaアダプタの概要

この章では、Oracle GoldenGate Java用アダプタの概要を示します。Oracle GoldenGate Java用アダプタでは、1) 送信して処理し、Oracle GoldenGate証跡データにするためのJava Message Service (JMS)メッセージの取得、および2) JMSメッセージとして配信するためのOracle GoldenGateによって取得されたトランザクション・データの処理が実装されます。

この章の内容は次のとおりです。

- Oracle GoldenGate VAMメッセージの取得

- Oracle GoldenGate Javaユーザー・イグジット

3.1 Oracle GoldenGate VAMメッセージの取得

Oracle GoldenGateのメッセージの取得では、JMSメッセージングに接続してメッセージを解析し、メッセージ・データからOracle GoldenGate証跡を作成するOracle GoldenGate ExtractにVAMインタフェースを介して送信します。これによって、ターゲット・データベース用に稼働しているOracle GoldenGateシステムにJMSメッセージが配信されます。

Oracle GoldenGate JMSメッセージ取得を使用するには、次の2つのコンポーネントが必要です。

- 動的にリンクされた共有VAMライブラリ。Oracle GoldenGate Extractプロセスにアタッチされています。

- 個別のユーティリティであるGendef。メッセージ取得プロパティ・ファイルおよびパーサー固有のデータ定義を使用してOracle GoldenGateソース定義ファイルを作成します。

3.1.1 メッセージ取得構成オプション

メッセージ取得の3つの部分を構成するオプションは次のとおりです。

- メッセージ接続: プロパティ・ファイルの値によって、JMSクライアントのJavaクラスパス、JMSソース宛先名、JNDI接続プロパティ、セキュリティ情報などの接続プロパティが設定されます。

- 解析: プロパティ・ファイルの値によって、固定幅、カンマ区切りまたはXMLのメッセージの解析ルールが設定されます。これには、使用されるデリミタ、トランザクションの先頭と末尾の値、日付形式などの設定があります。

- VAMインタフェース: VAM、dllまたはsoライブラリを識別するパラメータおよびプロパティ・ファイルがOracle GoldenGateコアExtractプロセス用に設定されます。

3.1.2 一般的な構成

次の図に、JMSメッセージを取得するための一般的な構成を示します。

この構成では、JMSメッセージはOracle GoldenGateアダプタJMSハンドラによって取得され、アダプタのメッセージ取得VAMを使用してExtractプロセスに転送されます。Extractによってデータが証跡に書き込まれ、証跡がデータ・ポンプExtractによってネットワーク経由でOracle GoldenGateターゲット・インスタンスに送信されます。ターゲットReplicatは証跡を使用してターゲット・データベースを更新します。

図3-1 JMSメッセージ取得用の構成

3.2 Oracle GoldenGate Javaユーザー・イグジット

Oracle GoldenGateによって取得されたトランザクション・データは、Oracle GoldenGate Java APIを介してリレーショナル・データベース以外のターゲット(JMS (Java Message Service)、ディスクに書き込まれたファイル、カスタム・アプリケーションのJava APIとの統合など)に配信できます。

Java用Oracle GoldenGateには、Oracle GoldenGate ExtractプロセスからJavaコードを実行する機能があります。Java用Oracle GoldenGateを使用するには、次の2つのコンポーネントが必要です。

- C/C++で実装され、ユーザー・イグジット(UE)としてC APIを介してOracle GoldenGate Extractプロセスと統合される、動的にリンクされたか、共有のライブラリ。

- Oracle GoldenGate Java APIを構成するJavaライブラリのセット(jar)。このJavaフレームワークは、Java Native Interface (JNI)を介してユーザー・イグジットと通信します。

図3-2 JMSメッセージを配信するための構成

3.2.1 配信構成オプション

動的にリンクされたライブラリは、単純なプロパティ・ファイルを使用して構成できます。Javaフレームワークは、ユーザー・イグジットによってロードされ、プロパティ・ファイルによって初期化もされます。アプリケーションの動作は、次のようにしてカスタマイズできます。

- プロパティ・ファイルの編集。たとえば、次のような編集があります。

- ホスト名、ポート番号、出力ファイル名、JMS接続設定の設定

- トランザクションの送信先である任意の数のアクティブ・ハンドラをリストすることによるターゲット(JMS、ファイルなど)の追加/削除

- デバッグレベルのロギングなどの有効化/無効化

- 使用されるメッセージ形式の識別。

- JMSまたはファイルに送信されるメッセージの形式のカスタマイズ。メッセージ形式は次のようにしてカスタマイズできます。

- 既存のフォーマット・プロセス(固定長またはフィールド区切りのメッセージ形式用)のプロパティの設定

- Velocityテンプレート・マクロ言語を使用したメッセージ・テンプレートのカスタマイズ

- (オプション)カスタムJavaコードの記述。

- (オプション)トランザクションおよび操作のカスタム処理、フィルタリング、またはカスタム・メッセージ形式の実装を行うカスタムJavaコードの記述。

JMSを介したメッセージの送信およびディスクへのファイルの書込み用に既存の実装(ハンドラ)があります。メッセージの送信用にあらかじめ定義されたメッセージ形式がいくつかあります(XML、フィールド区切りなど)。あるいは、テンプレートを使用してカスタム形式を実装できます。各ハンドラには、その構成プロパティを表すドキュメンテーションがあります。たとえば、ファイル名をファイル・ライターに対して指定したり、JMSキュー名をJMSハンドラに対して指定できます。一部のプロパティは複数のハンドラに適用されます。たとえば、同一のメッセージ形式をJMSとファイルに使用できます。

4 ロギングの構成

この章では、Oracle GoldenGateアダプタのデフォルト・ロギングおよび各種ロギング・オプションの構成方法について説明します。

この章の内容は次のとおりです。

- Oracle GoldenGateアダプタのデフォルト・ロギング

- デフォルト・ロギングの変更

4.1 Oracle GoldenGateアダプタのデフォルト・ロギング

ロギングは、Oracle GoldenGateアダプタに対してデフォルトで設定されます。

4.1.1 デフォルト実装タイプ

Oracle GoldenGateアダプタのデフォルトの実装タイプは、JDKオプションです。これは、java.util.logging (JUL)という名前の組込みJavaロギングです。

4.1.2 デフォルト・メッセージ・ロギング

デフォルト・ログ・ファイルは、標準のレポート・ディレクトリに作成されます。関連付けられているExtractプロセスに由来する名前が付けられます。問題は、レポート・ファイルおよびログ・ファイルに出力されます。

4.1.2.1 問題のログ出力

問題の概要はExtractレポート・ファイルに書き込まれ、問題の詳細はログ・ファイルに書き込まれます。

4.1.2.2 ログ・ファイル名

デフォルトでは、ログ・ファイルはinstallation_directory/dirrptディレクトリに書き込まれます。ログ・ファイルの名前には、Extract group_nameが含まれ、拡張子はlogです。

4.2 デフォルト・ロギングの変更

Oracle GoldenGateアダプタのロギングはJULから別のタイプに変更できます。デバッグを有効にし、構成ファイルを指定できます。

4.2.1 ロギング・タイプの変更

ロギングの実装タイプを変更するには、gg.logプロパティをlog4jまたはlogbackに設定します。たとえば、次のように設定します。

gg.log=log4j

4.2.2 ロギング構成の変更

特定の構成ファイルを指定するには、jvm.bootoptionsをこれを定義するシステム・プロパティに設定します。これによって実装タイプが暗黙的に設定され、クラスパスへの適切なバインドが追加されます。このオプションの使用の詳細は、Oracleサポートにお問い合せください。

4.2.3 デバッグの有効化

デバッグ・ロギングを有効にするには、次に示すようにgg.log.levelプロパティをdebugに設定します。

gg.log.level=debug

第II部

フラット・ファイルの作成

この部では、フラット・ファイルに書き込むOracle GoldenGateアダプタの構成方法および管理方法について説明します。

第III部には、次の章があります。

- 第5章「フラット・ファイル・アダプタの構成」

- 第6章「フラット・ファイル・アダプタの使用」

- 第7章「あらかじめ定義されているデフォルトおよび形式」

- 第8章「フラット・ファイルのプロパティ」

5 フラット・ファイル・アダプタの構成

この章では、ユーザー・イグジット・パラメータとファイル・ライターのプロパティを設定し、フラット・ファイルの書込み用にOracle GoldenGateアダプタを構成する方法について説明します。

この章の内容は次のとおりです。

- フラット・ファイルの書込み用アダプタの構成

- 推奨されるデータ統合方法

- データ・ファイルの生成

5.1 フラット・ファイルの書込み用アダプタの構成

図5-1「フラット・ファイルの書込み用の一般的な構成」に、フラット・ファイルを書き込むOracle GoldenGate Application Adapterの一般的な構成を示します。プライマリExtractプロセスによってトランザクションがソース・データベースから取得され、データがOracle GoldenGate証跡に書き込まれます。その後、データ・ポンプExtractを使用してトランザクションが証跡に送信され、アダプタExtractによって読み取られます。アダプタExtractに関連付けられているユーザー・イグジット・ライブラリは、サード・パーティ・アプリケーション用にフォーマットされたフラット・ファイルにデータを書き込みます。

ソース・データベース・システムを構成するには、次のようにします。

GGSCI > ADD EXTRACT pump, EXTTRAILSOURCE dirdat/aa
GGSCI > ADD RMTTRAIL dirdat/bb, EXTRACT pump, MEGABYTES 20

データ統合を構成するには、次のようにします。

GGSCI > ADD EXTRACT ffwriter, EXTTRAILSOURCE dirdat/bb

前述のサンプルのプロセス名および証跡名を任意の有効な名前に置き換えます。プロセス名は8文字以下、証跡名は2文字である必要があります。

図5-1 フラット・ファイルの書込み用の一般的な構成

5.1.1 ユーザー・イグジットExtractのパラメータ

ユーザー・イグジットExtractのパラメータ(ffwriter.prm)は、次のとおりです。

パラメータ

説明

EXTRACT FFWRITER

すべてのExtractパラメータ・ファイルはExtract名で始まります。この場合は、ユーザー・イグジットのファイル・ライター名です。

SOURCEDEFS dirdef/hr_ora.def

証跡の内容を決めるソース定義ファイル。

CUSEREXIT flatfilewriter.dll CUSEREXIT
PASSTHRU, INCLUDEUPDATEBEFORES,
PARAMS ffwriter.properties

CUSEREXITパラメータのオプションは次のとおりです。

- flatfilewriter.dllは、ユーザー・イグジット.dllまたは.soライブラリの名前です。

- CUSEREXITは、起動されるユーザー・イグジット・ルーチンの名前です(大文字/小文字は区別されます)。

- PASSTHRUは、Extractプロセスが証跡に書き込む必要がないことを指定します。

- INCLUDEUPDATEBEFORESは、ビフォア・イメージとアフター・イメージの両方を出力に含めることを許可します。整合性目的およびトランザクションの追跡用にも必要です。

- PARAMSでは、ユーザー・イグジット・プロパティ・ファイルの名前を指定できます。

TABLE HR.*;

処理する表のリストを指定します。

5.1.2 ユーザー・イグジット・プロパティ

ユーザー・イグジットは、CUSEREXIT PARAMSで識別されるファイルからプロパティを読み取ります。デフォルトは、ffwriter.propertiesからの読取りです。

プロパティ・ファイルには、ユーザー・イグジットによる操作方法の詳細が含まれています。各プロパティの詳細は、第8章「フラット・ファイルのプロパティ」を参照してください。

5.2 推奨されるデータ統合方法

マイクロ・バッチ機能を最大限利用するには、データ統合ツールで次の処理を行う必要があります。

1. 制御ファイルを処理します。

2. 処理するファイルのリストを制御ファイルから読み取ります。

3. 制御ファイルの名前を変更します。

4. 制御ファイルから読み取ったカンマ区切りのファイルのリストを順に処理します。

5. 各データ・ファイルを処理し、完了したら、データ・ファイルを削除します。

6. 名前を変更した制御ファイルを削除します。

起動時、データ統合ツールは、名前が変更された制御ファイルをチェックし、以前に失敗した処理からリカバリする必要があるか確認します。

制御ファイルの名前が変更されている場合、最初のファイル・ロールオーバー時、ユーザー・イグジットは新規ファイルに書き込みます。これに、次のバッチ用のファイルのリストが含まれます。

ユーザー・イグジットがサマリー・ファイルも出力するよう構成されている場合、オプションでデータ統合ツールはそのサマリー・ファイルも読み取り、処理した各データ・ファイルについて処理した操作の数とサマリー・ファイル内のデータをクロスチェックできます。

5.3 データ・ファイルの生成

データ・ファイルは、ユーザー・イグジットのプロパティでライターを構成することで生成されます。1つのユーザー・イグジット・プロパティ・ファイルは複数のライターを持つことができるため、同じ入力データに対して複数の異なる形式の出力データ・ファイルを生成できます。

ライターは、goldengate.flatfilewriter.writersプロパティに名前で追加されます。次に例を示します。

goldengate.flatfilewriter.writers=dsvwriter,diffswriter,binarywriter

プロパティ・ファイルの残りの部分には、指定された各ライターの詳細なプロパティが含まれます。プロパティの前にライター名を付けます。次に例を示します。

dsvwriter.files.onepertable=true
binarywriter.files.onepertable=false
binarywriter.files.oneperopcode=true

各ライターは、すべてのデータを1つの(ローリング)データ・ファイルに出力することも、入力表または操作タイプごとに1つの(ローリング)データ・ファイルを生成することもできます。これは、前述の例にあるfiles.onepertableおよびfiles.oneperopcodeプロパティで制御されます。

各ライターによって書き込まれるデータの出力形式は2つあり、モード・プロパティによって制御されます。これは次のいずれかです。

- DSV - デリミタ区切りの値

- LDV - 長さ区切りの値

次に例を示します。

dsvwriter.mode=dsv
binarywriter.mode=ldv

データ・ファイルが初めてディスクに書き込まれる際、一時的な拡張子が付けられます。ファイルがロールオーバーの基準を満たすと、拡張子はロールされた拡張子に変わります。制御ファイルが使用されている場合、必要に応じて制御ファイルが作成され、最終的なファイル名が制御ファイル内のリストに追加されます。また、ファイル・レベルの統計サマリーが生成される場合、ファイルのロールオーバー時に作成されます。

出力ディレクトリ(データ・ファイルと制御ファイルで異なる)、一時的な拡張子、ロールされた拡張子、制御ファイルの拡張子および統計サマリーの拡張子はすべてプロパティを使用して構成できます。出力構成の詳細は、「出力ファイルのプロパティ」を参照してください。

書き込まれる各データ・ファイルは、出力スタイルに応じた命名規則に従います。表ごとに1つのファイルに書き込むファイルの場合、次のように名前に表名が含まれます。

MY.TABLE_2013-08-03_11:30:00_data.dsv

すべてのデータを1つのファイルに書き込むファイルの場合、次のように名前に表名は含まれません。

output_2013-08-03_11:30:00_data.dsv

基本的なデータの内容以外に、データ消費の際に便利なようにメタデータ列を出力データに追加できます。これには、スキーマ(所有者)と表情報、ソース・コミット・タイムスタンプ、Oracle GoldenGate読取り位置などがあります。メタデータ列の詳細は、「メタデータ列」を参照してください。

データ・ファイルの内容は、モードや入力データ、および追加するメタデータ列(追加する場合)、列名を含めるかどうか、ビフォア・イメージを含めるかどうかなどを決める各種プロパティによって異なります。出力データを制御するすべてのプロパティの詳細は、「データ内容のプロパティ」を参照してください。

6 フラット・ファイル・アダプタの使用

この章では、ファイル・ロールオーバーの管理、システムのチューニングに役立つOracle GoldenGateアダプタ・インスタンスでの統計の収集、プロセスの管理、およびエラーの処理によってシステムの進行中の操作を管理する方法について説明します。

この章の内容は次のとおりです。

- 制御ファイルの使用

- 統計サマリーの使用

- Oracle GoldenGateプロセスの管理

- 証跡リカバリ・モード

- エラー・メッセージの特定

6.1 制御ファイルの使用

制御ファイルには、ロールオーバーしたデータ・ファイルに関する情報が格納されます。制御ファイルが存在する場合、そのファイルに追加されます。存在しない場合、作成されます。すべてのデータを1つのファイルに出力するライターの場合、1つの制御ファイルが作成されます。ライターが表ごと、または操作タイプごとに1つのファイルに出力する場合、制御ファイルも表ごと、または操作タイプごとに作成されます。

制御ファイルの生成、その出力ディレクトリ、接頭辞および拡張子は、「出力ファイルのプロパティ」で定義されているプロパティによって制御されます。

各制御ファイルには、制御ファイルの作成以降ロールオーバーされたデータ・ファイルのカンマ区切りのリストが含まれます。ファイルはロールオーバーされた順にリストされます。これによって、データ統合ツールは、データ・ファイルが正しい順序で読み取られることと、すべて消費されたことを確認できます。

6.2 統計サマリーの使用

データ生成プロセスに関するサマリー統計を収集できます。この統計サマリー情報は、Oracle GoldenGateレポート・ファイルまたは個々のサマリー・ファイルに書き込まれます。

レポート・ファイルに書き込む場合、ユーザーは、この情報をファイルのロールオーバー時に書き込むか、期間に応じて定期的に書き込むかを決定できます。レポート・ファイルに書き込まれる情報は標準形式の出力で、レコード合計、各データベース操作タイプの合計、最後のレポート以降のデルタ、速度情報および各表の詳細が含まれます。

個々のサマリー・ファイルに書き込む場合、ファイルはロールオーバー・ファイルごとに作成されます。ロールオーバー・ファイルの統計情報は、デリミタで区切ってリストされます。サマリー・ファイルの拡張子、出力されるデータ、データ・デリミタおよび行デリミタはすべて制御できます。

「統計およびレポート」に、統計ファイルとサマリー・ファイルのプロパティの詳細が記載されています。

6.3 Oracle GoldenGateプロセスの管理

標準的なデータ統合ソリューションに関係するプロセスは次のとおりです。

- ソース・データベースからトランザクションのデータを取得するプライマリExtractプロセス

- 取得されたトランザクションのデータをソース・データベース・マシンからデータ統合マシンへネットワークを経由して移動するPASSTHRUデータ・ポンプExtract

- ユーザー・イグジットを実行するよう構成されている配信データ・ポンプExtract

通常、元の取得とPASSTHRUデータ・ポンプが含まれるOracle GoldenGateインストールと、配信データ・ポンプが含まれるインストールは異なります。これらのインストールの両方ともで、Oracle GoldenGate Managerプロセスが稼働している必要があります。

これらのインストール内のプロセスは、Oracle GoldenGate GGSCIコマンドラインで起動や停止などの簡単なコマンドを使用して管理されます。これらのプロセスとその構成の管理の詳細は、Oracle GoldenGate管理者ガイドを参照してください。

6.4 証跡リカバリ・モード

RECOVERYOPTIONS Extractパラメータによって、証跡への書き込み時に異常終了したExtractの再起動の動作が決まります。APPENDMODEは、リリース10以上の証跡のデフォルトです。異常終了したExtractは、追加モードで再起動する場合、リカバリ・マーカーと中断されたトランザクション全体を証跡に書き込みます。

Oracle GoldenGateフラット・ファイル・アダプタのファイル・ライターがこの証跡を読み取ると、部分的なトランザクションを受信し、続いて部分的なトランザクションを破棄する必要があることを示すリカバリ・マーカーを受信します。ファイル・ライターは、自身の出力ファイル内の位置を部分的なトランザクションの先頭に移動し、証跡ファイルの次のトランザクションで上書きします。

6.5 エラー・メッセージの特定

フラット・ファイル用Oracle GoldenGateの操作時発生する可能性のあるエラーには3つのタイプがあります。

1. ユーザー・イグジットを実行するExtractプロセスが起動しません

2. プロセスは起動しますが、その後異常終了します

3. プロセスは正常に稼働しますが、データが正しくないか、存在しません

最初の2つのケースでは、エラー・メッセージを検索する場所が多数あります。

- 標準のggserr.logファイル。Oracle GoldenGateプロセスの基本的な情報、実行履歴と短いエラー・メッセージ(エラーが発生した場合)が含まれます。

- dirrptサブディレクトリにある、ユーザー・イグジットを実行するExtractプロセスのOracle GoldenGateレポート・ファイル。たとえば、プロセス名がffwriterの場合、レポート・ファイルはffwriter.rptです。これには、エラーに関するより詳細な情報が含まれる場合(特に、ユーザー・イグジットではなくOracle GoldenGateコア製品の問題の場合)があります。

- ユーザー・イグジット・ログ・ファイル内。名前はlog.lognameプロパティによって異なります。このファイルが存在しない場合、ユーザー・イグジットが起動していない可能性が高く、レポート・ファイルがその問題の切離しに役立ちます。

第17章「フラット・ファイル・アダプタのトラブルシューティング」に、エラー処理の詳細が含まれています。

7 あらかじめ定義されているデフォルトおよび形式

この章では、Oracle GoldenGateアダプタに含まれている標準およびアプリケーション固有のプロパティのデフォルトについて説明します。

この章の内容は次のとおりです。

- あらかじめ定義されているデフォルトおよび形式の概要

- Siebel Remote形式

- Ab Initio形式

- Netezza形式

- Greenplum形式

- カンマ区切り形式

7.1 あらかじめ定義されているデフォルトおよび形式の概要

Oracle GoldenGateアダプタでは次のようにしてファイル・ライターのプロパティの設定タスクを容易にしています。

- 一部の標準プロパティにデフォルトが設定されています

- 出力を受信する特定のアプリケーション用に一般的な形式を作成する、あらかじめ定義されたプロパティのセットが含まれています。
これらのあらかじめ定義された形式を使用すると、そのアプリケーションで通常必要とされる事項に基づいて標準のデフォルトが変更されます。形式のプロパティは、プロパティ・ファイルに手動で設定することでオーバーライドできます。形式からプロパティを処理する場合、システムでは、まずプロパティ・ファイル自体にそのプロパティが設定されているかをチェックします。されている場合、プロパティ・ファイルの設定が使用されます。されていない場合、形式の設定が使用されます。

7.1.1 デフォルト・プロパティ

すべてのライターで、次のプロパティが使用されます。各プロパティに示されている値はデフォルトです。

writer.files.data.rootdir=./out
writer.files.data.rollover.time=10
writer.files.data.rollover.size=100000
writer.files.data.norecords.timeout=10
writer.files.control.use=true
writer.files.control.ext=.ctrl
writer.files.control.rootdir=./out

7.1.2 コンシューマ形式の指定

templateプロパティを使用して、使用される形式ファイルの名前を指定します。

構文

writer.template=format_name

writer - フラット・ファイル・ライターの名前を指定します。

format_name - 特定のアプリケーション用の既存のデフォルト・プロパティ設定ファイル名を指定します。有効な値は次のとおりです。

SIEBEL - Siebel Remote用にトランザクション情報を使用して1つのDSV形式の出力ファイルを作成する場合のプロパティ。
ABINITIO - Ab Initioによって消費されるLDV形式の出力を作成する場合のプロパティ。
NETEZZA - Netezza用に表ごとに1つのDSV形式の出力ファイルを作成する場合のプロパティ。
GREENPLUM - Greenplum用に1つのDSV形式の出力ファイルを作成する場合のプロパティ。
COMMADELIM - 表ごとに1つのカンマ区切りの出力ファイルを作成する場合のプロパティ。

7.2 Siebel Remote形式

goldengate.userexit.outputmode=txs
goldengate.userexit.buffertxs=true
goldengate.userexit.datetime.removecolon=true
goldengate.userexit.timestamp=utc
writer.mode=DSV
writer.rawchars=false
writer.includebefores=true
writer.includecolnames=true
writer.omitvalues=false
writer.diffsonly=false
writer.omitplaceholders=true
writer.files.onepertable=false
writer.files.data.ext=_data.csv
writer.files.data.tmpext=_data.csv.temp
writer.files.data.bom.code=efbbbf
writer.dsv.nullindicator.chars=NULL
writer.dsv.nullindicator.escaped.chars=
writer.dsv.fielddelim.chars=,
writer.dsv.fielddelim.escaped.chars=
writer.dsv.linedelim.chars=\n
writer.dsv.linedelim.escaped.chars=
writer.dsv.quotes.chars="
writer.dsv.quotes.escaped.chars=""
writer.dsv.quotealways=true
writer.groupcols=true
writer.afterfirst=true
writer.begintx.metacols="B","S",position,"GGMC",%LAST_UPD_BY,"1",
numops
writer.metacols="R",opcode,%ROW_ID,%LAST_UPD_BY,%LAST_UPD,
%MODIFICATION_NUM,%CONFLICT_ID,position,txoppos,table,"","","","","",
"",%DB_LAST_UPD,%DB_LAST_UPD_SRC,numcols
writer.metacols.DB_LAST_UPD.omit=true
writer.metacols.DB_LAST_UPD_SRC.omit=true
writer.metacols.opcode.updatepk.chars=U
writer.metacols.position.format=dec
writer.endtx.metacols="E"

7.3 Ab Initio形式

writer.mode=LDV
writer.files.onepertable=false
writer.files.data.ext=.data
writer.files.data.tmpext=.temp
writer.metacols=position,timestamp,opcode,txind,catalog,schema,table
writer.metacols.timestamp.fixedlen=26
writer.metacols.schema.fixedjustify=right
writer.metacols.schema.fixedpadchar.chars=Y
writer.metacols.opcode.fixedlen=1
writer.metacols.opcode.insert.chars=I
writer.metacols.opcode.update.chars=U
writer.metacols.opcode.delete.chars=D
writer.metacols.txind.fixedlen=1
writer.metacols.txind.begin.chars=B
writer.metacols.txind.middle.chars=M
writer.metacols.txind.end.chars=E
writer.metacols.txind.whole.chars=W
writer.metacols.position.format=dec
writer.ldv.vals.missing.chars=M
writer.ldv.vals.present.chars=P
writer.ldv.vals.null.chars=N
writer.ldv.lengths.record.mode=binary
writer.ldv.lengths.record.length=4
writer.ldv.lengths.field.mode=binary
writer.ldv.lengths.field.length=2
writer.statistics.period=onrollover
writer.statistics.tosummaryfile=true
writer.statistics.overall=true
writer.statistics.summary.fileformat=catalog,schema,table,schemaandtable,total,
gctimestamp,ctimestamp
writer.statistics.summary.delimiter.chars=|
writer.statistics.summary.eol.chars=\n

7.4 Netezza形式

writer.mode=DSV
writer.rawchars=false
writer.includebefores=false
writer.includecolnames=false
writer.omitvalues=false
writer.diffsonly=false
writer.omitplaceholders=false
writer.files.onepertable=true
writer.files.data.ext=_data.dsv
writer.files.data.tmpext=_data.dsv.temp
writer.dsv.nullindicator.chars=
writer.dsv.fielddelim.chars=;
writer.dsv.fielddelim.escaped.chars=

7.5 Greenplum形式

writer.mode=DSV
writer.rawchars=false
writer.includebefores=false
writer.includecolnames=false
writer.omitvalues=false
writer.diffsonly=false
writer.omitplaceholders=false
writer.files.onepertable=true
writer.files.data.ext=_data.dsv
writer.files.data.tmpext=_data.dsv.temp
writer.dsv.nullindicator.chars=
writer.dsv.fielddelim.chars=|
writer.dsv.fielddelim.escaped.chars=
writer.metacols=opcode,timestamp
writer.metacols.opcode.insert.chars=I
writer.metacols.opcode.update.chars=U
writer.metacols.opcode.delete.chars=D

7.6 カンマ区切り形式

writer.mode=DSV
writer.rawchars=false
writer.includebefores=false
writer.includecolnames=false
writer.omitvalues=false
writer.diffsonly=false
writer.omitplaceholders=false
writer.files.onepertable=true
writer.files.data.ext=_data.dsv
writer.files.data.tmpext=_data.dsv.temp
writer.dsv.nullindicator.chars=NULL
writer.dsv.fielddelim.chars=,
writer.dsv.linedelim.chars=\n
writer.dsv.quotes.chars="
writer.dsv.quotes.escaped.chars=""
writer.metacols=position,txind,opcode,timestamp,catalog,schema,table
writer.statistics.period=onrollover
writer.statistics.overall=true

8 フラット・ファイルのプロパティ

この章では、Oracle GoldenGateフラット・ファイル・アダプタのプロパティ・ファイルで構成可能なプロパティについて説明します。

この章の内容は次のとおりです。

- ユーザー・イグジット・プロパティ

- ファイル・ライター・プロパティ

8.1 ユーザー・イグジット・プロパティ

ユーザー・イグジットのプロパティには、ロギングを制御するプロパティ、名前やトランザクションの処理を制御する一般プロパティなどがあります。

8.1.1 ロギング・プロパティ

ロギングは次のプロパティによって制御されます。

8.1.1.1 goldengate.log.logname

ログ・ファイル名の接頭辞を指定します。これは有効なASCII文字列である必要があります。ログ・ファイル名には、yyyymmdd形式の現在の日付と.log拡張子が付加されます。

次の例では、writer_20140803.logという名前のログ・ファイルが2014年8月3日に作成されます。

goldengate.log.logname=writer

8.1.1.2 goldengate.log.level

すべてのモジュールを対象とする全体的なログ・レベルを指定します。構文は次のとおりです。

goldengate.log.level=ERROR | WARN | INFO| DEBUG

ログ・レベルは次のように定義されています。

- ERROR - エラーが発生した場合にのみメッセージを書き込ます。

- WARN - エラーおよび警告メッセージを書き込みます。

- INFO - エラー、警告および情報メッセージを書き込みます。

- DEBUG - デバッグ・メッセージを含むすべてのメッセージを書き込みます。

デフォルトのロギング・レベルはINFOです。この場合、メッセージは、起動時、停止時および操作中に定期的に生成されます。たとえば、次の例ではグローバル・ロギング・レベルをINFOに設定します。

goldengate.log.level=INFO

注意:
レベルをDEBUGに切り替えると、メッセージが大量に生成され、パフォーマンスに影響する場合があります。

8.1.1.3 goldengate.log.tostdout

標準出力にログ情報が書き込まれるかどうかを制御します。この設定は、コマンドラインから起動されたVAMとExtractプロセスが連携している場合、またはstdoutがレポート・ファイルに設定されているオペレーティング・システムでExtractプロセスが実行されている場合に有用です。ただし、Oracle GoldenGateプロセスは通常バックグラウンド・プロセスとして実行されます。構文は次のとおりです。

goldengate.log.tostdout={true | false}

デフォルトは、falseです。

8.1.1.4 goldengate.log.tofile

指定されたログ・ファイルにログ情報が書き込まれるかどうかを制御します。構文は次のとおりです。

goldengate.log.tofile={true | false}

デフォルトは、falseです。trueに設定されている場合、ログ出力は指定されたログ・ファイルに書き込まれます。

8.1.2 一般プロパティ

一般プロパティは、ファイル・ライター名、チェックポイント、トランザクションの処理、タイムスタンプの表示および列とオブジェクト名に使用される形式を制御します。

8.1.2.1 goldengate.flatfilewriter.writers

ユーザー・イグジット内で実行されるライターの名前を指定します。複数の文字列値を入力すると、同一ユーザー・イグジット内で複数の名前のライターを実行できます。次に例を示します。

goldengate.flatfilewriter.writers=dsvwriter,diffswriter,binwriter

等号記号またはカンマの前後に空白がないようにしてください。ファイル内の他のすべてのプロパティにいずれかのライター名を接頭辞として付けます。

8.1.2.2 goldengate.userexit.buffertxs

出力の前にトランザクション全体が読み取られるかどうかを制御します。trueに設定されている場合、出力の前にトランザクション全体が証跡から読み取られます。次に例を示します。

goldengate.userexit.buffertxs=true

デフォルトは、falseです。これをtrueに設定することは、numopsメタデータ列が使用される場合にのみ有用です。現在、numops値を算出する唯一の方法は、トランザクションをバッファし、一度に1つのトランザクションを出力することです。

8.1.2.3 goldengate.userexit.chkptprefix

チェックポイント・ファイル名に追加される接頭辞の文字列値を指定します。複数のデータ・ポンプを実行する場合、チェックポイント接頭辞をプロセスの名前に設定します。次に例を示します。

goldengate.userexit.chkptprefix=pump1_

8.1.2.4 goldengate.userexit.chkpt.ontxend

ファイルをロールオーバーする必要があるかをトランザクションごとにチェックするか、Extractプロセスのチェックポイント時にのみチェックするかを制御します。trueに設定されている場合、アダプタは、トランザクションの処理後、ファイルをロールオーバーする必要があるかをチェックします。必要がある場合、ロールオーバーが実行され、チェックポイント・ファイルが更新されます。これは、出力ファイルの内容を厳格に管理する必要がある場合に有用です。たとえば、午前0時にロールオーバーする前に午前0時までのすべてのデータをファイルに書き込む必要がある場合、トランザクションごとにチェックが行われることが重要です。次に例を示します。

goldengate.userexit.chkpt.ontxend=true

デフォルトは、falseです。falseに設定されている場合、アダプタは、Extractのチェックポイント時(デフォルトでは10秒ごと)にロールオーバーについてチェックします。

8.1.2.5 goldengate.userexit.datetime.removecolon

日付と時間の間にコロンが書き込まれるかどうかを制御します。falseに設定されている場合、日付と時間の列値は、Oracle GoldenGate証跡のデフォルト形式YYYY-MM-DD:HH:MI:SS.FFFFで出力ファイルに書き込まれます。trueに設定されている場合、日付と時間の間にコロンがないYYYY-MM-DD HH:MI:SS.FFFに形式が変更されます。デフォルトは、falseです。

goldengate.userexit.datetime.removecolon=true

8.1.2.6 goldengate.userexit.timestamp

レコードのタイムスタンプをローカル時間で出力するか、協定世界時(UTC)で出力するかを制御します。これがutcに設定されていない場合、レコードのタイムスタンプはローカル・タイムゾーンを使用してローカル時間で出力されます。デフォルトは、ローカル時間です。

goldengate.userexit.timestamp=utc

8.1.2.7 goldengate.userexit.datetime.maxlen

日時列の出力最大長を制御します。これを整数値に設定すると、列値がその長さに切り捨てられます。日時の形式はYYYY-MM-DD:HH:MI:SS.F(9)のため、日時列の最大長は29文字です。

次に例を示します。

goldengate.userexit.datetime.maxlen=19

goldengate.userexit.maxlen=19に設定すると、秒の小数部のない日時に切り捨てられます。goldengate.userexit.maxlen=10に設定すると、日付のみに切り捨てられます。デフォルトは、完全な日時列値を出力することです。

8.1.2.8 goldengate.userexit.utf8mode

列データ、表名、ファイル名および列名がUTF8文字セットで返されるかどうかを制御します。これがfalseに設定されている場合、すべてのデータはオペレーティング・システムの文字セットになります。デフォルトは、trueです。

構文は次のとおりです。

goldengate.userexit.utf8mode=true|false

8.2 ファイル・ライター・プロパティ

ファイル・ライター・プロパティは、出力ファイルの形式およびファイルの書込み方法を制御します。

8.2.1 出力形式のプロパティ

次のプロパティは、値のデリミタ・タイプと列のグループ化を設定します。

8.2.1.1 writer.mode

出力形式がDSVかLDVかを制御します。

- DSV - デリミタ区切りの値。次に例を示します。

POSITION|OPCODE|TIMESTAMP|COLVALA|COLVALB|. . .

注意:
DSVはカンマ区切りの値(CSV)に限定されません。

- LDV - 長さ区切りの値。次に例を示します。

0109TIMESTAMPI302MY05TABLEP042000P03ETC

注意:
長さはASCIIまたはバイナリです。一部のメタデータ列は固定長で(「メタデータ列」を参照)、この形式ではUnicodeマルチバイト・データがサポートされます。

次に例を示します。

writer.mode=dsv
writer2.mode=ldv

注意:
下位互換のために、dsvのかわりにcsvが、ldvのかわりにバイナリが許容されます。かわりのオプションを使用する場合、出力形式に違いはありません。

8.2.1.2 writer.groupcols

列名、ビフォア値およびアフター値をグループ化するかどうかを制御します。

構文は次のとおりです。

writer.groupcols=true|false

デフォルトは、falseです。これによって、COL1とCOL2の次の例に示すように、名前、ビフォア値およびアフター値がセットとして一緒にリストされます。

"COL1", COL1_B4, COL1, "COL2", COL2_B4, COL2

プロパティがtrueに設定されている場合、列は、すべての名前のセット、すべてのビフォア値のセットおよびすべてのアフター値のセットにグループ化されます。

"COL1", "COL2", COL1_B4, COL2_B4, COL1, COL2

8.2.2 出力ファイルのプロパティ

次のプロパティは、ファイルの書込み方法、書込み先とその拡張子を制御します。これは、ライター・モードとデータの内容に依存しません。

8.2.2.1 writer.files.onepertable

データが複数のローリング・ファイル(入力データ内の表ごとに1つ)に分割されるか、すべてのデータが1つのローリング・ファイルに書き込まれるかを制御します。デフォルトは、trueです。

構文は次のとおりです。

writer.files.onepertable=true|false

次の例では、writerファイル・ライターは表ごとに1つのファイルを作成し、writer2はすべてのデータを1つのファイルに書き込みます。

writer.files.onepertable=true
writer2.files.onepertable=false

8.2.2.2 writer.files.oneperopcode

挿入、更新、削除または主キー操作コードに基づいてデータが分割されるかどうか制御されます。

たとえば、次の設定では、挿入、更新、削除および主キーの更新に対して個別の出力ファイルが作成されます。

writer.files.oneperopcode=true

デフォルトはfalseで、操作のタイプに関係なく、すべてのレコードが同一ファイルに出力されます。

このプロパティ以外にfiles.formatstringプロパティも変更し、%Oプレースホルダを受け入れる必要があります。files.oneperopcodeプロパティが設定されている場合、これは、ファイル名が作成される際に操作コードが書き込まれる位置を示します。そのプロパティが設定されている場合、デフォルトのファイル名にも操作コードが含まれます。

8.2.2.3 writer.files.prefix

データ・ファイルおよび制御ファイルの接頭辞として使用される値を指定します。このプロパティは、ライターが表ごとに1つのモード(files.onepertable=true)でない場合にのみ適用されます。データ・ファイルでは、property files.formatstringが使用されている場合、接頭辞は無視されます。

デフォルトでは、接頭辞は文字列outputに設定されます。data1という名前のファイルは、デフォルトでoutputdata1になります。次の例を使用すると、ファイル名はtest_data1になります。

writer.files.prefix=test_

8.2.2.4 writer.files.data.rootdir、writer.files.data.ext、writer.files.data.tmpext

すべてのデータ・ファイルの場所と拡張子を指定します。ロールオーバー前のファイルの拡張子はtmpextで、ロールオーバー後はextです。拡張子は.extのみである必要はありません。ファイル名の拡張子の前に文字を追加してデータ出力を区別できます。指定された出力ディレクトリが存在すること、Oracle GoldenGateプロセスを実行しているユーザーに、そのディレクトリへの適切な書込み権限があることを確認してください。次に例を示します。

# specify the root directory for outputting data files
writer.files.data.rootdir=./out

# determine the extension for data files when rolled over
writer.files.data.ext=_data.dsv

# determine the extension for data files before rolling over
writer.files.data.tmpext=_data.dsv.temp

8.2.2.5 writer.files.control.use、writer.files.control.rootdir、writer.files.control.ext

writer.files.control.useはtrueまたはfalseのブール値で、デフォルトはtrueです。その他はASCII値です。これらのプロパティによって、制御ファイルのユーザー、場所および拡張子が決まります。制御ファイルは、関係するデータ・ファイルと同じ名前の接頭辞を共有しますが、定義された拡張子を持ちます。デフォルトでは、files.control.extは.controlです。次に例を示します。

# specify whether or not to output a control file
writer.files.control.use=true

# specify the extension to use for control files
writer.files.control.ext=_data.control

# directory in which to place control files, defaults to data directory
writer.files.control.rootdir=./out

8.2.2.6 writer.files.control.delim.chars/code、writer.files.control.eof.chars/code

データ・デリミタまたは行末インジケータとして使用される値を文字または16進コードで指定します。デリミタのデフォルトはカンマ(,)です。デフォルトの新規行トリガーは、プラットフォームで有効なnewline文字です。

たとえば、カンマをデータ・デリミタとしてオーバーライドするには、次のようにします。

writer.files.control.delim.chars=#

たとえば、新規行インジケータを設定するには、次のようにします。

writer.files.control.eol.chars=\n

8.2.2.7 writer.files.formatstring

データ・ファイルのファイル名の作成時に使用されるファイル名フォーマット文字列を指定します。フォーマット文字列はfiles.prefixプロパティをオーバーライドします。このファイル名フォーマット文字列の構文は、次のプレースホルダがファイル名に追加可能な点以外、標準のCのフォーマットの構文と似ています。

- %c = catalog

- %s = schema

- %t = table

- %n = seqno

- %d = timestamp

- %o = opcode

seqnoの形式を指定できます。たとえば、%05nは、5桁が表示され、0でパディングされます。seqnoは0から始まり、ファイルがロールオーバーするたびに1ずつ増分されます。long intとして格納されるため、最大値はプラットフォームによって異なります。たとえば、64ビット・マシンの場合、最大値は2^64-1です。

これらのプレースホルダは、ユーザーが指定するテキストと組み合せて任意の順序で使用できます。次に例を示します。

writer.files.formatstring=myext_%d_%010n_%s_%

8.2.2.8 writer.files.data.bom.code

ファイルの先頭に書き込まれるバイト順マーカー(BOM)である16進数の値を指定します。BOMがファイル内のデータと合致していることを確認する必要があります。16進値が指定されていない場合、マーカーは書き込まれません。

次の例では、すべての出力ファイルの最初のバイトとしてUTF8 BOM efbbfが書き込まれます。

writer.files.data.bom.code=efbbbf

8.2.2.9 writer.files.includeprocessname

Extractプロセスの名前がファイル名の一部として含められるかどうかを制御します。デフォルトは、falseです。

構文は次のとおりです。

writer.files.includeprocessname=true|false

8.2.2.10 writer.files.useownerfiles

ファイルを所有するExtractプロセスを識別するための隠しファイルが作成されるかどうかを制御します。これを使用して、異なるOracle GoldenGateインストールからファイルが上書きされないようにすることができます。デフォルトは、falseです。

構文は次のとおりです。

writer.files.useownerfiles=true|false

8.2.3 ファイル・ロールオーバー・プロパティ

次のプロパティによって、ファイルのロールオーバーのポリシーが決まります。

8.2.3.1 writer.files.data.rollover.time

最初のレコードがファイルに書き込まれてからファイルがロールオーバーされるまでの経過時間の最大秒数を指定します。次に例を示します。

# number of seconds before rolling over
writer.files.data.rollover.time=10

8.2.3.2 writer.files.data.rollover.size

ファイルがロールオーバーされるまでにファイルに書き込まれる最小KB数を指定します。

この例では、最小値を10,000KBに設定します。

# min file size in KB before rolling over
writer.files.data.rollover.size=10000

8.2.3.3 writer.files.data.norecords.timeout

データがファイルに書き込まれてからファイルがロールオーバーされるまで待機する経過時間の最大秒数を指定します。デフォルトは120秒です。

この例では、タイムアウト間隔を10秒に設定します。

# roll over in case no records for a period of time
writer.files.data.norecords.timeout=10

8.2.3.4 writer.files.rolloveronshutdown

Extractプロセスの停止時のロールオーバーのポリシーを制御します。この値がfalseの場合、空の一時ファイルはすべて削除されますが、データが含まれたファイルは一時ファイルのまま残されます。このプロパティがtrueの場合、空でない一時ファイルはすべて、ロールされたファイル名にロールオーバーされ、チェックポイントが書き込まれて、空の一時ファイルが削除されます。次に例を示します。

# roll over non-empty and delete all empty files when Extract stops
writer.files.rolloveronshutdown=true

注意:
時間またはサイズ、あるいはその両方を使用できます。両方を使用する場合、先に達した方でロールオーバーが発生します。タイムアウト間隔によって、処理されるレコードがない場合でも、データが含まれているファイルはロールオーバーされることが保証されます。時間もサイズも指定されていない場合、最大サイズのデフォルトである1MBを超えると、ファイルはロールオーバーされます。

8.2.3.5 writer.files.data.rollover.timetype

ファイル・ロールオーバーのトリガーにシステム時間ではなく、ユリウスのコミット・タイムスタンプを使用するかどうかを制御します。構文は次のとおりです。

writer.files.data.rollover.timetype=commit|system

次の例では、ソース証跡レコードのコミット・タイムスタンプを使用してロールオーバーを決定します。

writer.files.data.rollover.timetype=commit

デフォルトでは、システム時間を使用していつファイルをロールオーバーするかを決定します。

8.2.3.6 writer.files.data.rollover.multiple

最初にレコードを受信した時間に関係なく、すべてのファイルを同時にロールオーバーするかどうかを制御します。通常、ファイルは時間またはサイズのプロパティに基づいて個々にロールオーバーされます。時間はロールオーバー期間に基づくため、レコードが特定のファイルに最初に書き込まれた時間に依存します。場合によっては(特に、表ごとに1つのファイルにデータを出力する場合)、データが最初にファイルに書き込まれた時間に関係なく、現在開いているすべてのファイルを同時にロールオーバーすることがあります。

次の例では、すべてのファイルを同時にロールオーバーするようアダプタに指定します。

writer.files.data.rollover.multiple=true

デフォルト値は、falseです。

8.2.3.7 writer.files.data.rollover.attime

アダプタがファイルをロールオーバーする時間を指定します。指定する時間を24時間形式(HH:MM)で入力します。1つの値の入力のみサポートされます。ワイルドカード(*)は、時間に対してのみサポートされます。構文は次のとおりです。

writer.files.data.rollover.attime=time_specifier

次の例では、毎正時に新しいファイルにロールオーバーします。

writer.files.data.rollover.attime=*:00

次の例では、毎時15分にロールオーバーします。

writer.files.data.rollover.attime=*:15

writer.rollover.timetypeプロパティによって、使用される時間がシステム時間かコミット時間かが決まることに注意してください。

8.2.3.8 writer.writebuffer.size

書込みバッファ・チャンク・サイズを指定します。システム書込みコール数の削減に使用します。次に例を示します。

writer.writebuffer.size=36863

8.2.4 データ内容のプロパティ

次のプロパティによって、データ・ファイルに書き込まれるデータが決まります。これらのプロパティは、出力データの形式に依存しません。

8.2.4.1 writer.rawchars

文字データを元のバイナリ形式のままにするか、ASCIIとして出力するかを制御します。デフォルトは、falseです。ASCIIに変換しないUnicodeマルチバイト・データが入力データに含まれている場合、このプロパティを設定します。次に例を示します。

# whether to output characters as ASCII or binary (for Unicode data)
writer.rawchars=false
writer2.rawchars=true

8.2.4.2 writer.includebefores

データのビフォア・イメージとアフター・イメージの両方が更新操作の出力に含まれるかどうかを制御します。デフォルトは、falseです。これは、ビフォア・イメージが元のデータで提供されていて、getupdatebeforesが処理チェーンのすべてのOracle GoldenGateパラメータ・ファイルに含まれている場合にのみ関係します。次に例を示します。

# whether to output update before images
writer.includebefores=true

これによって、. . ."VAL_BEFORE_1","VAL_1","VAL_BEFORE_2","VAL_2". . .が生成されます。

8.2.4.3 writer.afterfirst

includebeforesがtrueに設定されている場合に、アフター・イメージがビフォア・イメージの前に書き込まれるかどうかを制御します。

次に例を示します。

writer.afterfirst=true

このtrueの設定によって、アフター・イメージがビフォア・イメージの前にリストされます。

"VAL_1", "VAL_BEFORE_1", "VAL_2", "VAL_BEFORE_2"

デフォルトは、falseです。この場合、アフター・イメージはビフォア・イメージの後に書き込まれます。

8.2.4.4 writer.includecolnames

列値の前に列名が出力されるかどうかを制御します。デフォルトは、falseです。次に例を示します。

# whether to output column names
writer.includecolnames=true

これによって、…"COL_1","VAL_1","COL_2","VAL_2"…が生成されます。

8.2.4.5 writer.omitvalues

出力ファイルで列値が省略されるかどうかを制御します。デフォルトは、falseです。次に例を示します。

# whether to output column values
writer.omitvalues=false

includecolnamesもtrueに設定されている場合、これによって…"COL_1","COL_2"…が生成されます。

8.2.4.6 writer.diffsonly

すべての列が出力されるか、ビフォア・イメージがアフター・イメージと異なるもののみ出力されるかを制御します。デフォルトは、falseです。これは更新にのみ適用され、処理チェーンのすべてのOracle GoldenGateパラメータ・ファイルにGETUPDATEBEFORESが必要です。このプロパティは、includebeforesプロパティに依存しません。次に例を示します。

# whether to output only columns with differences between before and
# after images (deletes and inserts have all available columns)
writer.diffsonly=true

これによって、. . ."VAL_1",,,"VAL_4",,,"VAL_7". . .が生成されます。

8.2.4.7 writer.omitplaceholders

欠落している列のデリミタ/長さが出力に含まれるかどうかを制御します。デフォルトは、falseです。これは、COMPRESSUPDATESまたはCOMPRESSDELETESフラグが処理チェーンのOracle GoldenGateパラメータ・ファイルに含まれていた場合の更新および削除に適用されます。この場合、値が欠落している場合があります。また、writer.diffsonlyがtrueの場合、差異のない値も欠落していることになります。次に例を示します。

# whether to skip record delimiters if columns are missing
writer.omitplaceholders=true

これによって、. . ."VAL_1",,,"VAL_4",,,"VAL_7". . .が次のように変更されます。

. . ."VAL_1","VAL_4","VAL_7". . .

8.2.4.8 メタデータ列

メタデータ列は、実際のレコード・データではなく、レコードに関するデータを含むオプションのExtract列です。これらの列は、出力レコードの先頭、すべての列値の前に書き込まれます。

8.2.4.9 有効なメタデータ列

有効なメタデータ列は次のとおりです。

- position - 証跡内のレコードの一意の位置インジケータ。

- opcode - 挿入、更新、削除、主キー更新の各レコードに対してそれぞれ、I、U、D、K。

- txind - トランザクション内の通常のレコードの位置(0 - 先頭、1 - 中間、2 - 末尾、3 - 専用)。

- txoppos - 0から始まるトランザクション内のレコードの位置。

- catalog - 変更レコードのカタログ名。

- schema - 変更レコードのスキーマ(所有者)名。

- table - 変更レコードの表名。

- schemaandtable - スキーマ名と表名がschema.tableと連結されます。

- timestamp - レコードのコミット・タイムスタンプ。

- @<token name> - Extractパラメータ・ファイルに定義されているトークン値。

- $getenv - Oracle GoldenGateリファレンス・ガイドで説明されているGETENV値。たとえば、$GGHEADER.OPCODEです。

- %COLNAME - データ列の値。

- numops - 現在のトランザクションの操作の数。goldengate.userexit.buffertxsがtrueでない場合、この値は常に1です。

- numcols - 出力される列の数。この値は、このメタデータ列が使用される時点までにメタデータ列として出力された列数を元のレコードの列数から引いた数に等しくなります。

- "<value>" - 任意のリテラル値。

8.2.4.10 メタデータ列の使用

メタデータ列を使用する場合、検討の必要な事項があります。

- opcodeおよびtxindに対するASCII値はオーバーライドできます。

- LDVの場合、メタデータ列は可変または固定長です。

- positionは、16進数または10進数で書き込まれます。

- メタデータ列は内部の値でも、元のデータの列から読み取ることもできます。

- リテラル値は、引用符で囲んで表します。リテラル値が指定される場合、その値は、指定されたメタデータ列の位置に適切な引用符ポリシーを使用して文字列として出力されます。

- 列値は%COLNAMEで表します。列値が指定されている場合、列値は、出力レコードの列値セクションではなくメタデータ・セクションに出力されます。これを使用して、出力される表に関係なく、列が常にレコード内の同じ位置に出力されるようにすることができます。

次のプロパティがメタデータ列に適用されます。

8.2.4.11 writer.metacols

出力するメタデータ列を出力順に指定します。ASCII値の複数の名前をカンマで区切って入力します。次に例を示します。

# which metacols to output and in which order
writer.metacols=timestamp,opcode,txind,position,catalog,schema,table

8.2.4.12 writer.metacols.metacol_name.fixedlen

metacol_nameで指定されるメタデータ列に対して書き込まれるデータの長さを決める整数値を指定します。実際のデータが固定長より長い場合、切り捨てられます。短い場合、出力はパディングされます。次に例を示します。

# timestamp is fixed length
writer.metacols.timestamp.fixedlen=23

これによって、2011-08-03 10:30:51.123456が2011-08-03 10:30:51.123に切り捨てられます。

8.2.4.13 writer.metacols.metacol_name.column

メタデータ列のmetacol_name値を使用するかわりにデータ値の列名として使用するASCII値を指定します。設定される場合、この列名は、ユーザー・イグジットで処理されるすべての表に存在する必要があります。この列名を表ごとにオーバーライドする方法は現在ありません。たとえば、列の内部タイムスタンプをオーバーライドするには、次のようにします。

# timestamp is read from a column
writer.metacols.timestamp.column=MY_TIMESTAMP_COL

8.2.4.14 writer.metacols.token_name.novalue.chars | writer.metacols.token_name.novalue.code

token_nameの値が使用できない場合に使用される文字または16進コードを表す値を指定します。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。デフォルト値は、NO VALUEです。次に例を示します。

writer.metacols.TKN-SCN.novalue.chars=0

8.2.4.15 writer.metacols.metacol_name.fixedjustify

metacol_name列値の位置合せが左か右かを制御します。デフォルトでは、すべてのメタデータ列は左詰めです。たとえば、トークンを右詰めにするには、次のようにします。

writer.metacols.TKN-SCN.fixedjustify=right

8.2.4.16 writer.metacols.metacol_name.fixedpadchar.chars | writer.metacols.metacol_name.fixedpadchar.code

メタデータ列のパディングに使用される文字またはコード値を指定します。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。パディングに使用されるデフォルトの文字は空白(" ")です。次に例を示します。

writer.metacols.TKN-SCN.fixedpadchar.chars=0

8.2.4.17 writer.metacols.opcode.insert.chars | writer.metacols.opcode.insert.code

挿入操作を識別するデフォルト文字Iのオーバーライド値を指定します。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。

次の例では、挿入の場合INSを使用するようアダプタに指定します。

writer.metacols.opcode.insert.chars=INS

8.2.4.18 writer.metacols.opcode.update.chars | writer.metacols.opcode.update.code

更新操作を識別するデフォルト文字Uのオーバーライド値を指定します。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。

次の例では、更新の場合UPDを使用するようアダプタに指定します。

writer.metacols.opcode.update.chars=UPD

8.2.4.19 writer.metacols.opcode.delete.chars | writer.metacols.opcode.delete.code

削除操作を識別するデフォルト文字Dのオーバーライド値を指定します。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。

次の例では、削除の場合DELを使用するようアダプタに指定します。

writer.metacols.opcode.delete.chars=DEL

8.2.4.20 writer.metacols.opcode.updatepk.chars | writer.metacols.opcode.updatepk.code

主キーの更新操作を識別するデフォルト文字Kのオーバーライド値を指定します。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。

次の例では、主キーの更新の場合PKUを使用するようアダプタに指定します。

writer.metacols.opcode.updatepk.chars=PKU

8.2.4.21 writer.metacols.txind.begin.chars | writer.metacols.txind.begin.code

トランザクションの先頭、中間、末尾か、あるいはトランザクション全体の操作かの識別に使用される値のオーバーライド値を指定します。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。デフォルト値は、先頭の場合0です。

次の例では、0を文字Bでオーバーライドします。

# tx indicator values is overridden
writer.metacols.txind.begin.chars=B

8.2.4.22 writer.metacols.txind.middle.chars | writer.metacols.txind.middle.code

トランザクションの中間の識別に使用されるオーバーライド値を指定します。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。デフォルト値は、中間の場合1です。

次の例では、1を文字Mでオーバーライドします。

# tx indicator value is overridden
writer.metacols.txind.middle.chars=M

8.2.4.23 writer.metacols.txind.end.chars | writer.metacols.txind.end.code

トランザクションの末尾の識別に使用されるオーバーライド値を指定します。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。デフォルト値は、末尾の場合2です。

次の例では、2を文字Eでオーバーライドします。

# tx indicator value is overridden
writer.metacols.txind.end.chars=E

8.2.4.24 writer.metacols.txind.whole.chars | writer.metacols.txind.whole.code

トランザクション全体の操作の識別に使用されるオーバーライド値を指定します。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。デフォルト値は、全体の場合3です。

次の例では、3を文字Wでオーバーライドします。

# tx indicator value is overridden
writer.metacols.txind.whole.chars=W

8.2.4.25 writer.metacols.position.format

positionメタデータ列の出力を10進形式で行うか、16進形式で行うかを制御します。16進の場合、通常16文字の値です。10進の場合、長さは変わります。これには、現在Extractプロセスが読み取るOracle GoldenGate証跡のシーケンス番号とRBAが含まれます。次に例を示します。

# position is in decimal format (seqno0000000rba)
writer.metacols.position.format=dec

seqnoが12、rbaが12345の場合、これによって120000012345が生成されます。

writer2.metacols.position.format=hex

seqnoが12、rbaが12345の場合、これによって0000000c00003039が生成されます。

8.2.4.26 writer.metacols.colname.omit

COLNAME列をメタデータとして使用するが、出力しないかどうかを制御します。

次の例では、numcolsをメタデータとして使用するが、出力しないことを指定します。

writer.metacols.numcols.omit=true

8.2.4.27 writer.begintx.metacols、writer.endtx.metacols

トランザクションの先頭と末尾をマークするために使用するメタデータ列を指定します。これらのマーカー・レコードは、トランザクションを構成する操作レコードの前後に出力ファイルに(行末デリミタ付きで)書き込まれます。

構文は次のとおりです。

writer.begintx.metacols=metacols_list

次の例では、トランザクションの先頭を文字Bとトランザクション内の操作の数でマークすることを指定します。

writer.begintx.metacols="B",numops

次の例では、トランザクションの末尾のマーカーは文字Eになります。

writer.endtx.metacols="E"

既存のメタデータ列をトランザクションの先頭と末尾のマーカーに使用できます。レコードの列値または特定のプロパティ(表名など)をbegintx.metacolsに指定する場合、トランザクション内の最初のレコードの値が使用されます。endtx.metacolsの場合、最後のレコードの値が使用されます。

たとえば、トランザクションに次のレコードがあるとします。

rec=0,table=tabA,operation=insert,col1=val1,col2=val2
rec=1,table=tabA,operation=update,col1=val3,col2=val4
rec=2,table=tabA,operation=delete,col1=val5,col2=val6
rec=3,table=tabB,operation=update,col1=val7,col2=val8

プロパティは次のように設定されています。

writer.begintx.metacols="B",table,%col2
writer.endtx.metacols="E",table,%col2

トランザクションの先頭のマーカーは"B","tabA","val2"、末尾のマーカーは"E","tabB","val8"になります。

先頭または末尾のマーカーにnumopsを使用してトランザクション内の操作の数を出力する場合、次の設定も必要です。

goldengate.userexit.buffertxs=true

注意:
このプロパティが設定されている場合、アダプタはトランザクションをメモリーにバッファするため、システムによって処理されるトランザクション内の操作の数を制限する必要があります。

8.2.5 DSV固有のプロパティ

DSVファイルのレコード形式は次のようになります。

{[METACOL][FD]}n{[COL][FD]}m[LD]

説明:

- METACOLは、任意の定義済メタデータ列です。

- COLは、任意のデータ列です。

- FDは、フィールド・デリミタです。

- LDは、行デリミタです。

列値は、"2013-01-10 10:20:31","U","MY.TABLE", 2000,"DAVE"のように引用符で囲むことができます。

8.2.5.1 writer.dsv.nullindicator.chars | writer.dsv.nullindicator.code

デリミタ区切りファイルでNULL値に使用する文字を指定します。これらの値は、空の文字列のデフォルトであるNULL値をオーバーライドします。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。次に例を示します。

writer.dsv.nullindicator.chars=NULL
writer.dsv.nullindicator.code=0a0a0a0a

8.2.5.2 writer.dsv.fielddelim.chars | writer.dsv.fielddelim.code

フィールド・デリミタのオーバーライド値を指定します。デフォルトは、カンマ(,)です。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。次に例を示します。

# define the characters to use for field delimiters in DSV files
writer.dsv.fielddelim.chars=|

8.2.5.3 writer.dsv.linedelim.chars | writer.dsv.linedelim.code

行デリミタのオーバーライド値を指定します。デフォルトは、オペレーティング・システムに対応した改行文字です。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。次に例を示します。

# define the characters to use for line delimiters in DSV files
writer.dsv.linedelim.chars=\n

8.2.5.4 writer.dsv.quote.chars | writer.dsv.quote.code

引用符のオーバーライド値を指定します。デフォルトは、二重引用符(")です。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。次に例を示します。

# define the characters to use for quotes in DSV files
writer.dsv.quotes.chars='

8.2.5.5 writer.dsv.quotes.policy

引用符を付けるためのポリシーを制御します。

構文は次のとおりです。

writer.dsv.quotes.policy={default|none|always|datatypes}

説明:

- default - 日付と文字にのみ引用符を付けます。

- none - メタデータ列にも列値にも引用符を付けません。

- always - すべてのメタデータ列と列値に引用符を付けます。

- datatypes - 特定のデータ型にのみ引用符を付けます。

このプロパティが設定されている場合、dsv.quotealwaysプロパティはオーバーライドされます。dsv.quotes.datatypesプロパティを使用して引用符を付けるデータ型を指定します。

8.2.5.6 writer.dsv.quotes.datatypes

dsv.quotes.policyがdatatypeに設定されている場合に整数、文字、単精度浮動小数点または日時データ型に引用符が付けられるかどうかを制御します。

構文は次のとおりです。

writer.dsv.quotes.datatypes=[char][,integer][,float][,date]

たとえば、次の指定では、アダプタは文字値と日時値にのみ引用符を付けます。

writer.dsv.quotes.datatypes=char,date

データ型が指定されない場合、データ型オプションのデフォルトはすべてのデータ型で、alwaysと同じです。

8.2.5.7 writer.dsv.nullindicator.escaped.chars | writer.dsv.nullindicator.escaped.code

nullインジケータに対するエスケープ値を指定します。設定されている場合、nullインジケータ値がないかすべての値がチェックされ、出力時にエスケープされた値に置き換えられます。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。次に例を示します。

# (optionally) you can define the characters (or code) to use
# to escape these values if found in data values
writer.dsv.nullindicator.escaped.chars=NULL

これによって、nullインジケータはNULLに変更されます。

8.2.5.8 writer.dsv.fielddelim.escaped.chars | writer.dsv.fielddelim.escaped.code

フィールド・デリミタに対するエスケープ値を指定します。設定されている場合、フィールド・デリミタ値がないかすべての値がチェックされ、出力時にエスケープされた値に置き換えられます。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。次に例を示します。

writer.dsv.fielddelim.escaped.chars=|

これによって、フィールド・デリミタは|に変更されます。

8.2.5.9 writer.dsv.linedelim.escaped.chars | writer.dsv.linedelim.escaped.code

行デリミタに対するエスケープ値を指定します。設定されている場合、行デリミタ値がないかすべての値がチェックされ、出力時にエスケープされた値に置き換えられます。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。次に例を示します。

writer.dsv.linedelim.escaped.chars=\n
writer.dsv.linedelim.escaped.code=D

両者とも、行デリミタを\nに変更します。

8.2.5.10 writer.dsv.quotes.escaped.chars | writer.dsv.quotes.escaped.code

フィールド・デリミタに対するエスケープ値を指定します。設定されている場合、フィールド・デリミタ値がないかすべての値がチェックされ、出力時にエスケープされた値に置き換えられます。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。次に例を示します。

writer.dsv.quotes.escaped.chars=""

これによって、"some text"は""some text""に変更されます。

8.2.5.11 writer.dsv.onecolperline

列値ごとに強制的に改行されるかどうかを制御します。各行に、このライター用に定義されたメタデータ列も含まれます。デフォルトは、falseです。次に例を示します。

# Force each column onto a new line with its own meta cols
writer.dsv.onecolperline=true

これによって、{metacols},val_1,val_2が次のように変更されます。

{metacols},val1
{metacols},val2

8.2.5.12 writer.dsv.quotealways

数値の場合でも、各列が引用符で囲まれるかどうかを制御します。デフォルトは、falseです。

注意:
このプロパティのかわりにdsv.quotes.policyが導入され、このプロパティは下位互換のためにのみサポートされます。dsv.quotes.policyが設定されている場合、dsv.quotealwaysに設定された値は無視されます。

次に例を示します。

writer.dsv.quotealways=true

. . .,1234,"Hello",10が. . .,"1234","Hello","10"に変更されます。

8.2.6 LDV固有のプロパティ

LDVファイルのレコード形式は次のようになります。

[RECLEN][METACOLS]{[FLAG][LEN][VALUE]}n

説明:

- RECLENは、フル・レコードの長さ(バイト)です。

- METACOLSは、すべての選択されたメタデータ列です。

- FLAGは、M(欠落している)、P(存在している)またはN(null)です。

- LENは、列値の長さ(欠落またはnullの場合0)です。

- VALUEは、列値です。

次に例を示します。

01072007-01-10 10:20:31U302MY05TABLEP042000M00N00P04DAVE

8.2.6.1 writer.ldv.vals.missing.chars | writer.ldv.vals.missing.code

欠落しているインジケータのオーバーライド値を指定します。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。次に例を示します。

writer.ldv.vals.missing.chars=MI

8.2.6.2 writer.ldv.vals.present.chars | writer.ldv.vals.present.code

存在しているインジケータのオーバーライド値を指定します。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。次に例を示します。

writer.ldv.vals.present.chars=PR

8.2.6.3 writer.ldv.vals.null.chars | writer.ldv.vals.null.code

nullインジケータのオーバーライド値を指定します。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。次に例を示します。

writer.ldv.vals.null.chars=NL

8.2.6.4 writer.ldv.lengths.record.mode、writer. ldv.lengths.field.mode

レコード長とフィールド長の出力モードを制御します。値は、binaryまたはASCIIのいずれかです。デフォルトは、binaryです。

binaryの場合、ファイルに書き込まれる数値はバイナリ・バイトでエンコードされます。ASCIIの場合、長さの10進値を表す文字が使用されます。次に例を示します。

writer.ldv.lengths.record.mode=binary
writer.ldv.lengths.field.mode=binary

8.2.6.5 writer.ldv.lengths.record.length、writer.ldv.lengths.field.length

レコード長およびフィールド長を整数値として指定します。モードがASCIIの場合、これは使用される10進数の定数を表します。binaryの場合、バイト数を表します。

ASCIIモードでは長さは任意の値にできますが、長さが最大値を超えると、イグジットは停止します。バイナリ・モードでは、長さは2、4または8にできますが、レコード長はフィールド長より大きい値である必要があります。次に例を示します。

# Lengths can be binary (2,4, or 8 bytes) or ASCII (any length)
writer.ldv.lengths.record.length=4
writer.ldv.lengths.field.length=2

8.2.7 統計およびレポート

データ・ファイルに書き込まれるデータに関する統計を取得する方法は2つあります。

- Oracle GoldenGateレポート・ファイルに書き込まれるレポートとして

- ロールオーバー時にデータ・ファイルに関連付けられる個別のサマリー・ファイルとして

これらの2つのメカニズムを組み合せて、あるいは別々に使用できます。

取得可能なデータには、1)処理されたレコードの総数とこれを挿入、更新、削除に分類したもの、2)表ごとの処理されたレコード数とこれを分類したもの、3)全体的な速度および表ごとの速度、4)最後のレポート以降のこれらのデルタ、などがあります。レポートは時間ベースにも、ファイルのロールオーバーに同期させることもできます。

このデータはレポート・ファイルに、またはロールオーバー時にデータ・ファイルにリンクされるサマリー・ファイルとして書き込まれます。レポートの形式は固定です。サマリー・ファイルにはデータが区切られた形式で含まれますが、特定のデータ・ファイルの内容に関するものが含まれます。これはデータ統合製品によって使用され、処理がクロスチェックされます。データ・ファイルと同じ名前が付けられますが、拡張子は異なります。

8.2.7.1 writer.statistics.toreportfile

統計がOracle GoldenGateレポート・ファイルに出力されるかどうかを制御します。次に例を示します。

writer.statistics.toreportfile=true

8.2.7.2 writer.statistics.period

統計の期間を指定します。値は、timebasedまたはonrolloverのいずれかです。

次に例を示します。

writer.statistics.period=onrollover
writer.statistics.period=timebased

timebasedの場合、期間はstatistics.timeで設定されます。

注意:
これらの値は、統計をレポート・ファイルに出力する場合にのみ有効です。統計は、ロールオーバー時にのみサマリー・ファイルに出力されます。

8.2.7.3 writer.statistics.time

統計がレポートされる間隔(秒)を指定します。

次に例を示します。

writer.statistics.time=5

8.2.7.4 writer.statistics.tosummaryfile

各データ・ファイルに対する統計を含むサマリー・ファイルがロールオーバー時に作成されるかどうかを制御します。

次の例では、サマリー・ファイルが作成されます。

writer.statistics.tosummaryfile=true

8.2.7.5 writer.statistics.summary.fileformat

サマリー・ファイルの内容とその内容が書き込まれる順序を制御します。複数のカンマ区切りのASCII値が指定されます。

有効な値は、次のとおりです。

- catalog – 統計の対象のスキーマのカタログ

- schema - 統計の対象の表のスキーマまたは所有者

- table - 統計の対象の表

- schemaandtable - 1列にピリオド'.'で区切ったスキーマと表

- gtotal - ユーザー・イグジットの起動以降、指定された表について出力されたレコードの総数

- gtotaldetail - デリミタで区切られた、ユーザー・イグジットの起動以降の挿入、更新および削除の総数

- gctimestamp - 指定された表のユーザー・イグジットの起動以降の最小および最大コミット・タイムスタンプ

- ctimestamp - 関連付けられたデータ・ファイル内の指定された表の最小および最大コミット・タイムスタンプ。

- total - 関連付けられたデータ・ファイル内の指定された表のレコード出力の総数

- totaldetail - 関連付けられたデータ・ファイル内の指定された表の挿入、更新および削除出力の総数

- rate - 関連付けられたデータ・ファイル内の指定された表のデータ出力の平均速度(レコード数/秒)

- ratedetail - 関連付けられたデータ・ファイル内の指定された表の挿入、更新および削除の平均速度(レコード数/秒)

次に例を示します。

writer.statistics.summary.fileformat=
catalog,schema,table,total,totaldetail,gctimestamp,ctimestamp

8.2.7.6 writer.statistics.overall

追加の統計行がサマリー・ファイルに書き込まれるかどうかを制御します。行には、statistics.summary.fileformatプロパティを使用してユーザーによって定義された全体的な(すべての表にわたる)統計が含まれます。

次の例では、この行が書き込まれます。

writer.statistics.overall=true

8.2.7.7 writer.statistics.summary.delimiter.chars/code、writer.statistics.summary.eol.chars/code

サマリー・ファイルのフィールド・デリミタおよび行末デリミタのオーバーライド値を指定します。charsの場合、ASCII値を使用し、codeの場合、16進値を使用します。デフォルトは、カンマ(,)デリミタと改行文字です。次に例を示します。

writer.statistics.summary.delimiter.chars=|
writer.statistics.summary.eol.code=0a0c

8.2.7.8 writer.statistics.summary.extension

データ・ファイルごとに出力される統計サマリー・ファイルに使用される拡張子のオーバーライドを指定します。デフォルトは、statsです。

次の例では、拡張子が.statsから.statisticsに変更されます。

writer.statistics.summary.extension=.statistics

第III部

JMSメッセージの取得

この部では、Oracle GoldenGateアダプタを使用したJava Message Service (JMS)メッセージの取得およびOracle GoldenGate証跡への書込みについて説明します。

第IV部には、次の章があります。

- 第9章「メッセージ取得の構成」

- 第10章「メッセージの解析」

- 第11章「メッセージ取得プロパティ」

9 メッセージ取得の構成

この章では、JMSメッセージを取得するVAM Extractの構成方法について説明します。

この章の内容は次のとおりです。

- VAM Extractの構成

- メッセージの接続と取得

9.1 VAM Extractの構成

Javaメッセージ取得アプリケーションを実行するには、次のものが必要です。

- Java用Oracle GoldenGateアダプタ

- Extractプロセス

- メッセージ取得用に構成されたExtractパラメータ・ファイル

- ソース定義ファイルなどの受信データ形式の説明。

9.1.1 Extractの追加

メッセージ取得VAMをOracle GoldenGateインストールに追加するには、GGSCIコマンドを使用してExtractとExtractが作成する証跡を追加します。

ADD EXTRACT jmsvam, VAM
ADD EXTTRAIL dirdat/id, EXTRACT jmsvam, MEGABYTES 100

プロセス名(jmsvam)は、8文字以下のプロセス名に置き換えます。証跡識別子(id)は、任意の2文字です。

注意:
BEGIN、EXTRBAなどのExtractの位置を設定するコマンドは、メッセージ取得に対してサポートされません。Extractの再開では、常にメッセージ・キューの末尾からメッセージを読み取ります。

9.1.2 Extractパラメータの構成

Extractパラメータ・ファイルには、VAMの定義および起動に必要なパラメータが含まれます。VAMと通信するためのサンプルExtractパラメータを表に示します。

パラメータ

説明

EXTRACT jmsvam

Extractプロセスの名前。

VAM ggjava_vam.dll,
PARAMS dirprm/jmsvam.properties

VAMライブラリの名前とプロパティ・ファイルの場所を指定します。VAMプロパティは、Oracle GoldenGateインストールの場所のdirprmディレクトリにある必要があります。

TRANLOGOPTIONS VAMCOMPATIBILITY 1

VAMの元の実装が使用されること(1)を指定します。

TRANLOGOPTIONS GETMETADATAFROMVAM

メタデータがVAMによって送信されることを指定します。

EXTTRAIL dirdat/id

Extractが作成するターゲット証跡の識別子を指定します。

TABLE OGG.*

処理する表のリスト。表名にワイルドカードを使用できます。

9.1.3 メッセージ取得の構成

メッセージ取得は、VAMプロパティ・ファイルのプロパティによって構成されます。このファイルは、Extract VAMパラメータのPARAMSオプションによって識別され、ロギング特性、パーサーのマッピングおよびJMS接続設定の決定に使用されます。

9.2 メッセージの接続と取得

JMSメッセージを処理するには、JMSインタフェースへの接続の構成、トランザクションのメッセージの取得と解析、各メッセージの証跡への書込み、トランザクションのコミットおよびメッセージのキューからの削除を行う必要があります。

9.2.1 JMSへの接続

JMSへの接続は、汎用JMSインタフェースを介して行われます。プロパティを設定して次の接続の特性を構成できます。

- JMSクライアントのJavaクラスパス

- JMSキューまたはトピック・ソース宛先の名前

- Java Naming and Directory Interface (JNDI)接続プロパティ

- 初期コンテキストの接続プロパティ

- 接続ファクトリ名

- 宛先名

- セキュリティ情報

- JNDI認証資格証明

- JMSユーザー名とパスワード

VAMと連携するよう構成されたExtractプロセス(例のjmsvamなど)は、起動時にメッセージ・システムに接続します。

注意:
処理時に接続の問題があった場合に自動的に再起動されるよう、ExtractをManagerのAUTORESTARTリストに含めることができます。

現在、Oracle GoldenGate Javaメッセージ取得アダプタではJMSテキスト・メッセージのみサポートされます。

9.2.2 メッセージの取得

次のメッセージを要求されると、接続処理によって次の手順が実行されます。

- ローカルJMSトランザクションがまだ開始されていない場合は開始します。

- メッセージ・キューからメッセージを読み取ります。

- メッセージがないために読取りが失敗した場合、ファイル終端メッセージを返します。

- そうではない場合、メッセージのコンテンツを返します。

9.2.3 トランザクションの完了

トランザクションを構成するメッセージがすべて正常に取得および解析され、Oracle GoldenGate証跡に書き込まれると、ローカルJMSトランザクションがコミットされ、メッセージがキューまたはトピックから削除されます。エラーが発生した場合、ローカル・トランザクションはロールバックされ、メッセージはJMSキューに残されます。

10 メッセージの解析

この章では、Oracle GoldenGate Javaアダプタに含まれるパーサーのタイプと各パーサーのJMSテキスト・メッセージの翻訳方法について説明します。

この章の内容は次のとおりです。

- 解析の概要

- 固定幅解析

- 区切り解析

- XML解析

- ソース定義生成ユーティリティ

10.1 解析の概要

パーサーの役割は、JMSテキスト・メッセージ・データとヘッダー・プロパティを適切なトランザクションと操作のセットに翻訳し、VAMインタフェースに渡すことです。これを行うために、パーサーは必ず特定のデータを検出する必要があります。

- トランザクション識別子

- シーケンス識別子

- タイムスタンプ

- 表名

- 操作タイプ

- 特定の表名と操作タイプに固有の列データ

構成で必要とされる場合、他のデータが使用されます。

- トランザクション・インジケータ

- トランザクション名

- トランザクションの所有者

パーサーは、このデータをJMSヘッダー・プロパティ、システム生成値、静的な値から、またはパーサー固有の方法で取得できます。これは、情報の性質によって異なります。

10.1.1 パーサー・タイプ

Oracle GoldenGateメッセージ取得アダプタでは、3種類のパーサーがサポートされます。

- 固定 - メッセージは、連続したテキストに固定幅フィールドとして表されるデータを含みます。

- 区切り - メッセージは、フィールドとレコード終端文字で区切られたデータを含みます。

- XML - メッセージは、XPath式でアクセスされるXMLデータを含みます。

10.1.2 ソースおよびターゲットのデータ定義

プロパティと外部ファイルの組合せを使用してソース・データ定義を定義する方法はいくつかあります。Oracle GoldenGate Gendefユーティリティでは、これらのデータ定義とパーサー・プロパティに基づいて標準ソース定義ファイルを生成します。オプションはパーサー・タイプによって異なります。

- 固定 - COBOLコピーブック、ソース定義またはユーザー定義

- 区切り - ソース定義またはユーザー定義

- XML - ソース定義またはユーザー定義

選択されたパーサーのデータの取得方法およびソース定義のターゲット定義への変換方法を構成するプロパティがいくつかあります。

10.1.3 必須データ

パーサーがメッセージを翻訳するには、次の情報が必要です。

10.1.3.1 トランザクション識別子

トランザクション識別子(txid)によって、Oracle GoldenGate証跡ファイルに書き込まれる操作はトランザクションにグループ化されます。Oracle GoldenGateメッセージ取得アダプタでは、連続し、インターリーブされていないトランザクションのみサポートされます。トランザクション識別子は、トランザクションごとに増分される一意の値です。通常、システム生成値が使用されます。

10.1.3.2 シーケンス識別子

シーケンス識別子(seqid)によって、各操作が内部で識別されます。これはリカバリ処理時に使用され、Oracle GoldenGate証跡に書込み済の操作が識別されます。シーケンス識別子は、操作ごとに増分される一意の値です。長さは固定です。

プロバイダのメッセージ識別子が増分され、一意の場合、JMSメッセージIDをシーケンス識別子として使用できます。ただし、(クラスタリングの使用や失敗したトランザクションなどのため)JMSでメッセージの順序が保証されない場合やIDは一意ではあるが、増分されない場合があります。システム生成のシーケンスIDを使用できますが、リカバリの状況によってはメッセージが重複する場合があります。推奨される方法は、メッセージをキューに追加するJMSクライアントでメッセージID、ヘッダー・プロパティまたはデータ要素をアプリケーションで生成される一意の増分値に設定することです。

10.1.3.3 タイムスタンプ

タイムスタンプ(timestamp)は、Oracle GoldenGate証跡内で操作のコミット・タイムスタンプとして使用されます。増分されますが、増分が必須ではありません。トランザクションまたは操作間で一意である必要はありません。解析可能な任意のデータ形式でかまいません。

10.1.3.4 表名

表名を使用して、列データが属する論理表が識別されます。アダプタは、SCHEMA_NAME.TABLE_NAME形式の2つの部分で構成される表名を必要とします。これは、個別に(schemaおよびtable)定義するか、スキーマと表の組合せとして(schemaandtable)定義します。

1つのフィールドにスキーマ名と表名の両方が含まれることも、スキーマ名と表名が別々のフィールドに含まれることも、スキーマがソフトウェア・コードに含まれ、表名のみが必要なこともあります。スキーマ名と表名の指定方法は、パーサーによって異なります。いずれの場合も、2つの部分で構成される論理表名を使用してOracle GoldenGate証跡にレコードが書き込まれ、証跡を表すソース定義ファイルが生成されます。

10.1.3.5 操作タイプ

操作タイプ(optype)を使用して、Oracle GoldenGate証跡への書込み時に操作が挿入、更新、削除のいずれかが決定されます。特定の操作の操作タイプ値は、各操作タイプに定義された値と照合されます。

各操作タイプについてOracle GoldenGate証跡に書き込まれるデータは、Extractの構成によって異なります。

- 挿入

- すべての列のアフター値が証跡に書き込まれます。

- 更新

- デフォルト - キーのアフター値が書き込まれます。ビフォア値が存在し、比較可能な場合、変更された列のアフター値が書き込まれます。ビフォア値がない場合、すべての列が書き込まれます。

- NOCOMPRESSUPDATES - すべての列のアフター値が証跡に書き込まれます。

- GETUPDATEBEFORES - ビフォア値が存在し、比較可能な場合、変更された列のビフォア値とアフター値が証跡に書き込まれます。ビフォア値がない場合、アフター値のみが書き込まれます。

- NOCOMPRESSUPDATESとGETUPDATEBEFORESの両方が含まれ、ビフォア値が存在する場合、すべての列のビフォア値とアフター値が証跡に書き込まれます。

- 削除

- デフォルト - すべてのキーのビフォア値が証跡に書き込まれます。

- NOCOMPRESSDELETES - すべての列のビフォア値が証跡に書き込まれます。

キーのビフォア値が存在し、アフター値と一致しない場合、主キー更新操作も生成されます。

10.1.3.6 列データ

すべてのパーサーは列データをメッセージ・テキストから取得し、Oracle GoldenGate証跡に書き込みます。列は、ソース定義で定義されている索引順に読み取られる場合もあれば、名前でアクセスされる場合もあります。

構成および元のメッセージ・テキストに応じて、列データのビフォア・イメージとアフター・イメージの両方が使用可能な場合とアフター・イメージのみが使用可能な場合があります。更新の場合、更新されていない列が使用可能な場合と使用可能でない場合があります。

すべての列データはテキストとして取得されます。ソース定義に基づいて、その列の正しいデータ型に内部で変換されます。変換に問題があるとエラーになり、プロセスは異常終了します。

10.1.4 オプション・データ

次のデータを含めることができますが、必須ではありません。

10.1.4.1 トランザクション・インジケータ

トランザクションとメッセージの関係には次のものがあります。

- 各メッセージに1つのトランザクション
これは、メッセージのスコープによって自動的に決定されます。

- 各メッセージに複数のトランザクション
これは、トランザクション・インジケータ(txind)によって決定されます。トランザクション・インジケータがない場合、XMLパーサーは、対応するトランザクション・ルールに基づいてトランザクションを作成できます。

- 各トランザクションに複数のメッセージ
操作がトランザクションの先頭か、中間か、末尾かトランザクション全体かを指定するために、トランザクション・インジケータ(txind)が必要です。特定の操作のトランザクション・インジケータ値は、各トランザクション・インジケータ・タイプに定義された値と照合されます。インジケータ値が先頭または全体の場合はトランザクションが開始され、中間の場合は続行されます。末尾または全体の場合は終了されます。

10.1.4.2 トランザクション名

トランザクション名(txname)は、任意の名前とトランザクションとの関連付けに使用できるオプション・データです。これは、GETENV関数を使用してトークンとして証跡に追加できます。

10.1.4.3 トランザクションの所有者

トランザクションの所有者(txowner)は、任意のユーザー名とトランザクションとの関連付けに使用できるオプション・データです。これは、GETENV関数を使用してトークンとして証跡に追加したり、EXCLUDEUSER Extractパラメータを使用して特定のトランザクションを処理から除外するために使用できます。

10.2 固定幅解析

固定幅解析は、各フィールドの位置と長さを定義するデータ定義に基づきます。この形式は、COBOLコピーブックの形式です。プロパティのセットで、コピーブックをOracle GoldenGate証跡およびソース定義ファイルの論理レコードにマップするためのルールを定義します。

受信データは、標準形式のヘッダーとその後に続くデータ・セグメントで構成されます。両方とも固定幅のフィールドを含みます。データは、コピーブックのPIC定義に基づいて解析されます。「ヘッダーとレコード・データ型の翻訳」の説明のように翻訳されて証跡に書き込まれます。

10.2.1 ヘッダー

ヘッダーは、次の情報を含むコピーブック01レベル・レコードによって定義される必要があります。

- レコードのコミット・タイムスタンプまたは変更時間

- 操作のタイプ(挿入、更新または削除)を示すコード

- データ・セグメントの解析時使用するコピーブック・レコード名

Oracle GoldenGateヘッダー・フィールドにマップされないヘッダー・レコードのフィールドは列として出力されます。

次の例では、必須ヘッダー値を含むコピーブック定義を示します。

例10-1 ヘッダーの指定

01 HEADER.
20 Hdr-Timestamp            PIC X(23)
20 Hdr-Source-DB-Function PIC X
20 Hdr-Source-DB-Rec-ID    PIC X(8)

前述の例に対して次のプロパティを設定します。

fixed.header=HEADER
fixed.timestamp=Hdr-Timestamp
fixed.optype=Hdr-Source-DB-Function
fixed.table=Hdr-Source-DB-Rec-Id

この場合の論理名表出力は、Hdr-Source-DB-Rec-Idという値になります。

10.2.1.1 複合表名の指定

複数のフィールドを表名に使用できます。たとえば、次のような静的プロパティを介して論理スキーマ名を定義できます。

fixed.schema=MYSCHEMA

コピーブック・ヘッダー定義から複数フィールドのデータ・レコードを定義するプロパティを追加できます。

例10-2 複合表名の指定

01  HEADER.
20  Hdr-Source-DB              PIC X(8).
20  Hdr-Source-DB-Rec-Id       PIC X(8).
20  Hdr-Source-DB-Rec-Version  PIC 9(4).
20  Hdr-Source-DB-Function     PIC X.
20  Hdr-Timestamp              PIC X(22).

前述の例に対して次のプロパティを設定します。

fixed.header=HEADER
fixed.table=Hdr-Source-DB-Rec-Id,Hdr-Source-DB-Rec-Version
fixed.schema=MYSCHEMA

フィールドが連結されて、次のような論理スキーマと表名になります。

MYSCHEMA.Hdr-Source-DB-Rec-Id+Hdr-Source-DB-Rec-Version

10.2.1.2 タイムスタンプ形式の指定

タイムスタンプは、デフォルトの形式YYYY-MM-DD HH:MM:SS.FFF(FFFはフィールドのサイズよって異なる)を使用して解析されます。

次の例に示すように日時フィールドの前にコメントを入力し、異なる受信形式を指定します。

例10-3 タイムスタンプ形式の指定

01  HEADER.
* DATEFORMAT YYYY-MM-DD-HH.MM.SS.FF
20  Hdr-Timestamp       PIC X(23)

10.2.1.3 関数の指定

プロパティを使用して、標準のOracle GoldenGate操作タイプをoptype値にマップします。次の例では、操作タイプはHdr-Source-DB-Functionフィールドにあることと、挿入の値はA、更新はU、削除はDであることを指定します。

例10-4 関数の指定

fixed.optype=Hdr-Source-DB-Function
fixed.optype.insert=A
fixed.optype.update=U
fixed.optype.delete=D

10.2.2 ヘッダーとレコード・データ型の翻訳

ヘッダーのデータとレコード・データは、翻訳されたデータ型に基づいて証跡に書き込まれます。

- 日付形式のコメントが前に付いたフィールド定義は、指定されたサイズのOracle GoldenGate日時フィールドに翻訳されます。日付形式のコメントがない場合、フィールドは基になるデータ型によって定義されます。

- PIC Xフィールドは、指定されたサイズのCHARデータ型に翻訳されます。

- PIC 9フィールドは、定義された精度と位取りのNUMBERデータ型に翻訳されます。符号付きの数値、符号なしの数値、小数部のある数値、小数部のない数値がサポートされます。

次の例では、様々なPIC定義に対する翻訳を示します。

入力

出力

PIC XX

CHAR(2)

PIC X(16)

CHAR(16)

PIC 9(4)

NUMBER(4)

* YYMMDD
PIC 9(6)

DATE(10)
YYYY-MM-DD

PIC 99.99

NUMBER(4,2)

PIC 9(5)V99

NUMBER(7,2)

この例で、入力YYMMDD日付の100522は、2010-05-22に翻訳されます。指定されたPIC 9(5)V99形式の数値1234567は、小数部が2桁の7桁の数値12345.67に翻訳されます。

10.2.3 キー識別子

コメントを使用して、データ・レコード内のキー列を識別します。ソース定義を生成するGendefユーティリティは、コメントを使用してキー列を特定します。

次の例では、AccountがTABLE1のキー列としてマークされています。

01 TABLE1
* KEY
20  Account      PIC X(19)
20  PAN_Seq_Num PIC 9(3)

10.3 区切り解析

区切り解析は、既存のソース定義ファイルとプロパティのセットに基づきます。プロパティで、使用するデリミタ、および列名とビフォア値があるかどうかなどの他のルールが指定されます。ソース定義ファイルによって、処理される有効な表、および表内の列の順序とデータ型が決まります。

区切りメッセージの形式は次のとおりです。

{METACOLS}n[,{COLNAMES}]m[,{COLBEFOREVALS}]m,{COLVALUES}m\n

説明:

- メタデータ列はn個含めることができ、各メタデータ列の後に形式文に示すカンマなどのフィールド・デリミタが続きます。

- 列値はm個含めることができます。各々、カンマなどのフィールド・デリミタがその前に付きます。

- 列名とビフォア値はオプションです。

- 各レコードは、\nなどの行末デリミタで終わります。

10.3.1 メタデータ列

メタデータ列はヘッダーに相当し、特別な意味を持つフィールドを含みます。メタデータ列には、次の情報が含まれます。

- optypeには、レコードが挿入か、更新か、削除かを示す値が含まれます。デフォルト値は、I、UおよびDです。

- timestampは、レコードのコミット・タイムスタンプに使用する値の型を示します。タイムスタンプの形式のデフォルトは、YYYY-DD-MM HH:MM:SS.FFFです。

- schemaandtableは、SCHEMA.TABLE形式のレコードの完全表名です。

- schemaは、レコードのスキーマ名です。

- tableは、レコードの表名です。

- txindは、レコードがトランザクションの先頭か、中間か、末尾か、唯一のレコードかを示す値です。デフォルト値は、0、1、2、3です。

- idは、レコードのシーケンス番号(RSNまたはCSN)として使用される値です。トランザクションの最初のレコード(操作)のidは、トランザクションのシーケンス番号に使用されます。

10.3.2 解析プロパティ

デリミタ、値および日時の形式を表すプロパティを設定できます。

10.3.2.1 デリミタを表すプロパティ

次のプロパティは、レコードを区切るための解析ルールを決定します。

- fielddelimは、1つ以上のASCIIまたは16進文字をフィールド・デリミタの値として指定します。

- recorddelimは、1つ以上のASCIIまたは16進文字をレコード・デリミタの値として指定します。

- quoteは、引用符付きの値に使用する1つ以上のASCIIまたは16進文字を指定します。

- nullindicatorは、NULL値に使用する1つ以上のASCIIまたは16進文字を指定します。

デリミタのエスケープ文字を定義し、その文字がテキスト内にあった場合に置き換えられるようにすることができます。たとえば、バックスラッシュとアポストロフィ(\')が指定されている場合、入力"They used Mike\'s truck" は"They used Mike's truck"に翻訳されます。また、2つの引用符("")が指定されている場合、"They call him ""Big Al"""は"They call him "Big Al""に翻訳されます。

レコード内に引用符なしのデータ値が存在することがありますが、引用符付きの値内のエスケープ文字のみシステムで削除されます。nullインジケータと一致する引用符なしの文字列は、nullとして処理されます。

10.3.2.2 値を表すプロパティ

次のプロパティで詳細情報が提供されます。

- hasbeforesは、各レコードにビフォア値が存在することを示します。

- hasnamesは、各レコードに列名が存在することを示します。

- afterfirstは、列のアフター値がビフォア値の前に来ることを示します。

- isgroupedは、すべての列名、ビフォア値およびアフター値が列ごとに順にではなく、3つのブロックにまとめられることを示します。

10.3.2.3 日時を表すプロパティ

デフォルトの形式YYYY-DD-MM HH:MM:SS.FFFがデータの解析に使用されます。ユーザーはプロパティを使用してグローバル、表または列レベルでこれをオーバーライドできます。形式の変更の例を次に示します。

delim.dateformat.default=MM/DD/YYYY-HH:MM:SS
delim.dateformat.MY.TABLE=DD/MMM/YYYY
delim.dateformat.MY.TABLE.COL1=MMYYYY

10.3.3 解析手順

区切り解析の手順は次のとおりです。

1. パーサーはまず各レコードのメタデータ列を読み取り、確認します。

2. これによって表名が取得され、これを使用してソース定義ファイル内の表の列定義が検索されます。

3. 表の定義が見つからない場合、処理は停止します。

4. それ以外の場合、列が解析され、ソース定義に定義されている順序と形式で証跡に出力されます。

10.4 XML解析

XML解析は、既存のソース定義ファイルとプロパティのセットに基づきます。プロパティによって、トランザクション、操作および列に対応するXML要素および属性を決定するルールが指定されます。ソース定義ファイルによって、処理される有効な表、およびそれらの表内の列の順序とデータ型が決まります。

10.4.1 XMLのスタイル

XMLメッセージは動的または静的なXMLにフォーマットされます。実行時、動的XMLのコンテンツは、サンプルXMLまたはXSDドキュメントを使用してあらかじめ決定できないデータ値です。表および列の要素または属性名を決定する静的XMLのコンテンツは、それらのサンプル・ドキュメントを使用してあらかじめ決定できます。

次の2つの例には同じデータが含まれています。

例10-5 静的XMLの例

<NewMyTableEntries>
<NewMyTableEntry>
<CreateTime>2010-02-05:10:11:21</CreateTime>
<KeyCol>keyval</KeyCol>
<Col1>col1val</Col1>
</NewMyTableEntry>
</NewMyTableEntries>

NewMyTableEntries要素は、トランザクション境界をマークします。NewMyTableEntryは、MY.TABLEへの挿入を表します。タイムスタンプは要素テキスト値内にあり、列名は要素名で表されます。

XPathに似た形式のプロパティのセットを介してこれらの2つのスタイルのXMLを解析するルールをプロパティ・ファイルに定義できます。プロパティの目的は、XPath照合を介してあらかじめ定義されたソース定義ファイルにXMLをマップすることです。

例10-6 動的XMLの例

<transaction id="1234" ts="2010-02-05:10:11:21">
<operation table="MY.TABLE" optype="I">
<column name="keycol" index="0">
<aftervalue><![CDATA[keyval]]></aftervalue>
</column>
<column name="col1" index="1">
<aftervalue><![CDATA[col1val]]></aftervalue>
</column>
</operation>
</transaction>

各表に対する各操作は、トランザクション、操作および列の各要素で構成される同じ基本的メッセージ構造を持ちます。表名、操作タイプ、タイムスタンプ、列名、列値などは属性または要素テキスト値から取得されます。

10.4.2 XML解析ルール

XMLのスタイルに関係なく、解析プロセスは次の事項を決定する必要があります。

- トランザクション境界

- 次のような操作エントリとメタデータ

- 表名

- 操作タイプ

- タイムスタンプ

- 次のような列エントリとメタデータ

- 列名または索引のいずれか。両方が指定されている場合、システムは、指定されたデータを含む列の名前が指定された名前かをチェックします。

- 列のビフォア値またはアフター値(両方の場合も)。

これは、相互に関係のあるルールのセットを介して行われます。処理される各タイプのXMLメッセージに対して、必要なデータの取得に使用されるルールを指定します。指定されたこれらの各ルールに対し、次の目的のプロパティを追加します。

- トランザクション、操作または列ルール・タイプとしてルールを指定します。どのタイプのルールも、指定された名前とタイプが必要です。

- 処理されるドキュメントに対してルールがアクティブかどうかを確認するために照合するXPath式を指定します。これはオプションです。定義されていない場合、パーサーは親ルールのノードを照合し、これが最初のルールの場合はドキュメント全体を照合します。

- リストされた順で処理される詳細ルール(subrules)をリストします。有効なsubrulesは、ルール・タイプによって決まります。Subrulesはオプションです。

次の例では、最上位レベルのルールはgenericruleと定義されています。これは、transactionタイプ・ルールです。そのsubrulesはopruleで定義され、このタイプはoperationです。

xmlparser.rules=genericrule
xmlparser.rules.genericrule.type=tx
xmlparser.rules.genericrule.subrules=oprule
xmlparser.rules.oprule.type=op

10.4.3 XPath式

XMLパーサーでは、要素の照合およびデータの抽出に必要なXPath式のサブセットがサポートされます。式は、特定の要素の照合またはデータの抽出に使用されます。

データ抽出の際、パスの大部分が照合に使用されます。式の末尾が抽出に使用されます。

10.4.3.1 サポートされるコンストラクト

サポートされるコンストラクト

説明

/e

ドキュメントのルートからの絶対パスを使用してeを照合します。

./e or e

処理対象の現在のノードからの相対パスを使用してeを照合します。

../e

現在のノードの親に基づいたパスを使用して(繰返し可能)eを照合します。

//e

ドキュメント内の任意の場所にあるeに一致します。

*

任意の要素に一致します。注意: 部分的にワイルドカードが使用された名前はサポートされません。

[n]

式のn番目の出現に一致します。

[x=v]

xが値vに等しい場合、一致します。ここで、xは次のいずれかです。

- @att - 属性値

- text() - テキスト値

- name() - 要素名

- position() - 要素の位置

10.4.3.2 サポートされる式

サポートされる式

説明

ルート要素に一致

/My/Element

現在のノードのサブ要素に一致

./Sub/Element

n番目の要素に一致

/My/*[n]

n番目のSome要素に一致

/My/Some[n]

任意のテキスト値に一致

/My/*[text() ='value']

Some要素のテキストに一致

/My/Some[text() = 'value']

任意の属性に一致

/My/*[@att = 'value']

Some要素の属性に一致

/My/Some[@att = 'value']

10.4.3.3 データ値の取得

パスの照合以外に、XPath式は、データ値の取得にも使用できます(絶対または処理対象の現在のノードとの相対)。データ値の式には前述のパス要素を含めることができますが、後述のいずれかの値アクセッサで終わる必要があります。

値アクセッサ

説明

@att

属性値。

text()

要素のテキスト・コンテンツ(値)。

content()

任意の子XMLノードを含む、要素のフル・コンテンツ。

name()

要素の名前。

position()

親内の要素の位置。

例10-7 データ値の抽出の例

相対要素テキスト値を抽出する場合:

/My/Element/text()

絶対属性値を抽出する場合:

/My/Element/@att

照合を使用して要素テキスト値を抽出する場合:

/My/Some[@att = 'value']/Sub/text()

注意:
ancestor、descendent、selfなどのパス・アクセッサはサポートされません。

10.4.4 他の値式

XMLパーサーによって抽出される値は、列値、またはトランザクションまたは操作のプロパティ(表、タイムスタンプなど)です。これらの値はXPathを使用するか、JMSメッセージのプロパティ、システム値またはハードコードされた値を介してXMLから取得されます。XMLパーサー・プロパティは、これらのオプションのうち、そのプロパティの値を取得するために有効なオプションを指定します。

次の例では、timestampは、XPath式、JMSプロパティまたはシステム生成タイムスタンプであることを指定します。

{txrule}.timestamp={xpath-expression}|${jms-property}|*ts

次の例では、tableは、XPath式、JMSプロパティまたはハードコードされた値であることを指定します。

{oprule}.table={xpath-expression}|${jms-property}|"value"

最後の例では、nameは、XPath式またはハードコードされた値であることを指定します。

{colrule}.timestamp={xpath-expression}|"value"

10.4.5 トランザクション・ルール

トランザクションの境界を指定するルールが最上位です。メッセージには、1つのトランザクション、複数のトランザクションまたは複数メッセージにわたるトランザクションの一部を含めることができます。これらは次のように指定されます。

- single - トランザクション・ルール照合は定義されません。

- multiple - 各トランザクション・ルール照合は新規トランザクションを定義します。

- span - トランザクション・ルールは定義されません。かわりに、トランザクション・インジケータが操作ルールに指定されます。

トランザクション・ルールの場合、XPathまたは他の式を介して次のルールのプロパティも定義できます。

- timestamp - トランザクションが発生した時間。

- txid - トランザクションの識別子。

トランザクション・ルールは複数のsubrulesを持つことができますが、各サブルールは操作タイプのルールである必要があります。

次の例では、メッセージ全体であるトランザクションを指定し、JMSプロパティから取得されるタイムスタンプを含めます。

例10-8 JMSタイムスタンプ

singletxrule.timestamp=$JMSTimeStamp

次の例はルート要素トランザクションに一致し、ts属性からタイムスタンプを取得します。

例10-9 tsタイムスタンプ

dyntxrule.match=/Transaction
dyntxrule.timestamp=@ts

10.4.6 操作ルール

操作ルールはトランザクション・ルールのサブルールまたは最上位ルール(トランザクションが操作のプロパティの場合)のいずれかです。

標準ルール・プロパティ以外に、操作ルールは、XPathまたは他の式を介して次のものも定義します。

- timestamp - 操作のタイムスタンプ。トランザクション・ルールが定義されている場合、これはオプションです。

- table - この操作の対象の表の名前。これをスキーマと組み合せて使用します。

- schema - 表のスキーマの名前。

- schemaandtable - SCHEMA.TABLEの形式のスキーマ名と表名の両方。これは、個々の表およびスキーマのプロパティのかわりに使用できます。

- optype - optype値に基づいて、これが挿入、更新、削除のいずれの操作かを指定します。

- optype.insertval - 挿入を表す値。デフォルトは、Iです。

- optype.updateval - 更新を表す値。デフォルトは、Uです。

- optype.deleteval - 削除を表す値。デフォルトは、Dです。

- seqid - 操作の識別子。txidがトランザクション・レベルで定義されていない場合、これがトランザクション識別子になります。

- txind - この操作がトランザクションの先頭か、中間か、末尾か、操作全体かを指定します。このプロパティはオプションで、操作ルールがトランザクション・ルールのサブルールの場合、無効です。

操作ルールは、操作タイプまたは列タイプの複数のサブルールを持つことができます。

次の例では、/Transactionの/Operation要素から操作情報を動的に取得します。

例10-10 操作

dynoprule.match=./Operation
dynoprule.schemaandtable=@table
dynoprule.optype=@type

次の例は、/NewMyTableEntry要素をMY.TABLE表に対する挿入操作に静的に対応付けます。

例10-11 操作例

statoprule.match=./NewMyTableEntry
statoprule.schemaandtable="MY.TABLE"
statoprule.optype="I"
statoprule.timestamp=./CreateTime/text()

10.4.7 列ルール

列ルールは、操作ルールのサブルールである必要があります。標準ルール・プロパティ以外に、列ルールは、XPathまたは他の式を介して次のものも定義します。

- name - 表定義内の列の名前。

- index - 表定義内の列の索引。

注意:
name、indexのいずれか一方のみが定義されている場合、他方が決定されます。

- before.value - 列のビフォア値。これは、削除の場合必須ですが、更新の場合オプションです。

- before.isnull - 列のビフォア値がnullかどうかを示します。

- before.ismissing - 列のビフォア値が欠落しているかどうかを示します。

- after.value - 列のビフォア値。これは、削除の場合必須ですが、更新の場合オプションです。

- after.isnull - 列のビフォア値がnullかどうかを示します。

- after.ismissing - 列のビフォア値が欠落しているかどうかを示します。

- value - 特定のビフォア値またはアフター値でオーバーライドされない場合にbefore.valueとafter.valueの両方に使用する式。これは、更新に対する異なるビフォア値をサポートしないことに注意してください。

- isnull - オーバーライドされない場合にbefore.isnullとafter.isnullの両方に使用する式。

- ismissing - オーバーライドされない場合にbefore.ismissingとafter.ismissingの両方に使用する式。

次の例では、/Operationの/Column要素から列情報を動的に取得します。

例10-12 列情報の動的抽出

dyncolrule.match=./Column
dyncolrule.name=@name
dyncolrule.before.value=./beforevalue/text()
dyncolrule.after.value=./aftervalue/text()

次の例は、/KeyColおよび/Col1要素をMY.TABLEの列に静的に対応付けます。

例10-13 要素の列との静的対応

statkeycolrule.match=/KeyCol
statkeycolrule.name="keycol"
statkeycolrule.value=./text()
statcol1rule.match=/Col1
statcol1rule.name="col1"
statcol1rule.value=./text()

10.4.8 ルール全体の例

次の例では、前述のXMLサンプルおよび適切なルールを使用して、MY.TABLEに対する同じ結果の操作を生成します。

動的XML

静的XML

<transaction id="1234"
ts="2010-02-05:10:11:21">
<operation table="MY.TABLE" optype="I">
<column name="keycol" index="0">
<aftervalue>
<![CDATA[keyval]]>
</aftervalue>
</column>
<column name="col1" index="1">
<aftervalue>
<![CDATA[col1val]]>
</aftervalue>
</column>
</operation>
</transaction>

NewMyTableEntries>
<NewMyTableEntry>
<CreateTime>
2010-02-05:10:11:21
</CreateTime>
<KeyCol>keyval</KeyCol>
<Col1>col1val</Col1>
</NewMyTableEntry>
</NewMyTableEntries>

動的

静的

dyntxrule.match=/Transaction
dyntxrule.timestamp=@ts
dyntxrule.subrules=dynoprule
dynoprule.match=./Operation
dynoprule.schemaandtable=@table
dynoprule.optype=@type
dynoprule.subrules=dyncolrule
dyncolrule.match=./Column
dyncolrule.name=@name

stattxrule.match=/NewMyTableEntries
stattxrule.subrules= statoprule
statoprule.match=./NewMyTableEntry
statoprule.schemaandtable="MY.TABLE"
statoprule.optype="I"
statoprule.timestamp=./CreateTime/text()
statoprule.subrules= statkeycolrule,
statcol1rule
statkeycolrule.match=/KeyCol

dyncolrule.before.value=./beforevalue/text()
dyncolrule.after.value=./aftervalue/text()

statkeycolrule.name="keycol"
statkeycolrule.value=./text()
statcol1rule.match=/Col1
statcol1rule.name="col1"
statcol1rule.value=./text()

INSERT INTO MY.TABLE (KEYCOL, COL1)
VALUES ('keyval', 'col1val')

10.5 ソース定義生成ユーティリティ

Java用Oracle GoldenGateには、プロパティ・ファイルに定義されているプロパティからOracle GoldenGateソース定義ファイルを生成するGendefユーティリティが含まれています。プロパティ設定および他のパーサー固有のデータ定義値に基づいて、表の標準化された定義を作成します。

このユーティリティを実行する構文は次のとおりです。

gendef –prop {property_file} [-out {output_file}

これは、デフォルトではソース定義を標準出力に送信しますが、-outパラメータを使用してファイルに仕向けることができます。次に例を示します。

gendef –prop dirprm/jmsvam.properties -out dirdef/msgdefs.def

出力ソース定義ファイルをポンプまたは配信プロセスで使用し、VAMを介して作成された証跡データを解釈します。

11 メッセージ取得プロパティ

この章では、Java用Oracle GoldenGate VAMのプロパティ・ファイルの構成に使用できるオプションについて説明します。

この章の内容は次のとおりです。

- ロギングおよび接続のプロパティ

- パーサー・プロパティ

11.1 ロギングおよび接続のプロパティ

次のプロパティは、JMSへの接続、ログ・ファイル名、エラー処理およびメッセージ出力を制御します。

11.1.1 ロギング・プロパティ

ロギングは次のプロパティによって制御されます。

11.1.1.1 gg.log

使用されるロギングのタイプを指定します。デフォルトの実装は、JDKオプションです。これは、java.util.logging (JUL)という名前の組込みJavaロギングです。その他のロギング・オプションは、log4jまたはlogbackです。構文は次のとおりです。

gg.log={JDK|log4j|logback}

たとえば、ロギングのタイプをlog4jに設定するには、次のようにします。

gg.log=log4j

ログ・ファイルは、インストールのレポート・サブディレクトリに作成されます。デフォルトのログ・ファイル名には、関連付けられているExtractのグループ名が含まれ、ファイル拡張子はlogです。

11.1.1.2 gg.log.level

すべてのモジュールを対象とする全体的なログ・レベルを指定します。構文は次のとおりです。

gg.log.level={ERROR|WARN|INFO|DEBUG}

ログ・レベルは次のように定義されています。

- ERROR - エラーが発生した場合にのみメッセージを書き込ます。

- WARN - エラーおよび警告メッセージを書き込みます。

- INFO - エラー、警告および情報メッセージを書き込みます。

- DEBUG - デバッグ・メッセージを含むすべてのメッセージを書き込みます。

デフォルトのロギング・レベルはINFOです。この場合、メッセージは、起動時、停止時および操作中に定期的に生成されます。レベルをDEBUGに切り替えると、メッセージが大量に生成され、パフォーマンスに影響する場合があります。たとえば、次の例ではグローバル・ロギング・レベルをINFOに設定します。

# global logging level
gg.log.level=INFO

11.1.1.3 gg.log.file

ログ・ファイルのパスを指定します。構文は次のとおりです。

gg.log.file=path_to_file

ここで、path_to_fileは完全に定義されたログ・ファイルの場所です。これによってログの名前の変更が可能になりますが、複数のExtractがある場合、誤って他のログを上書きすることがないようExtract名を含める必要があります。

11.1.1.4 gg.log.classpath

ロギングの実装に使用されるjarのクラスパスを指定します。

gg.log.classpath=path_to_jars

11.1.2 JMS接続プロパティ

JMS接続プロパティでは、JMS統合用のJVMの起動方法など、接続を設定します。

11.1.2.1 jvm.boot options

JVMの起動時に適用されるクラスパスおよび起動オプションを指定します。パスには、UNIX/Linuxの場合コロン(:)、Windowsの場合セミコロン(;)の区切り文字が必要です。

構文は次のとおりです。

jvm.bootoptions=option[, option][. . .]

optionsは、コマンドラインから実行されるJavaに渡されるものと同じです。これには、クラスパス、システム・プロパティ、使用されているJavaのバージョンに対して有効なJVMメモリー・オプション(最大メモリー、初期メモリーなど)などがあります。有効なオプションは、JVMのバージョンおよびプロバイダによって異なります。

次に例を示します(すべて1行に記述します)。

jvm.bootoptions= -Djava.class.path=ggjava/ggjava.jar
-Dlog4j.configuration=my-log4j.properties

log4j.configurationプロパティには、log4jプロパティ・ファイルの完全修飾URLを指定できます。デフォルトでは、このファイルはクラスパスで検索されます。独自のlog4j構成を使用することも、あらかじめ構成されたlog4j設定であるlog4j.properties(デフォルト・レベルのロギング)、debug-log4j.properties(デバッグ・ロギング)またはtrace-log4j.properties(非常に詳細なロギング)のいずれかを使用することもできます。

11.1.2.2 jms.report.output

JMSレポートを書き込む場所を指定します。構文は次のとおりです。

jms.report.output={report|log|both}

Where:

- reportは、JMSレポートをOracle GoldenGateレポート・ファイルに送信します。これはデフォルトです。

- logは、Javaログ・ファイル(構成されている場合)に書き込みます。

- bothは、両方の場所に送信します。

11.1.2.3 jms.report.time

レポート生成の頻度を時間に基づいて指定します。

jms.report.time=time_specification

次の例では、30秒ごと、45分ごと、8時間ごとにレポートを書き込みます。

jms.report.time=30sec
jms.report.time=45min
jms.report.time=8hr

11.1.2.4 jms.report.records

レポート生成の頻度をレコード数に基づいて指定します。構文は次のとおりです。

jms.report.records=number

次の例では、1000レコードごとにレポートを書き込みます。

jms.report.records=1000

11.1.2.5 jms.id

指定された形式の一意の識別子がJMS統合からメッセージ取得VAMに渡されることを指定します。これをレコードの一意のシーケンスIDとしてVAMで使用できます。

jms.id={ogg|time|wmq|activemq|message_header|custom_java_class}

Where:

- ogg - Oracle GoldenGate JMS配信によって設定されるメッセージ・ヘッダー・プロパティGG_IDを返します。

- time - システム・タイムスタンプをメッセージIDの開始点として使用します。

- wmq - WebSphere MQ Message IDをVAMとともに使用するために再フォーマットします。

- activemq - ActiveMQ Message IDをVAMとともに使用するために再フォーマットします。

- message_header - ユーザーがカスタマイズしたJMSメッセージ・ヘッダー(JMSMessageID、JMSCorrelationID、JMSTimestampなど)を含めるよう指定します。

- custom_java_class - IDとして使用される文字列を作成するカスタムJavaクラスを指定します。

次に例を示します。

jms.id=time
jms.id=JMSMessageID

返されるIDは、一意、増分かつ固定長です。数字が重複する場合、重複はスキップされます。メッセージIDの長さを変更すると、Extractプロセスが異常終了します。

11.1.2.6 jms.destination

JNDIを介して検索されるキュー名またはトピック名を指定します。

jms.destination=jndi_name

次に例を示します。

jms.destination=sampleQ

11.1.2.7 jms.connectionFactory

JNDIを介して検索される接続ファクトリ名を指定します。

jms.connectionFactory=jndi_name

次に例を示します。

jms.connectionFactory=ConnectionFactory

11.1.2.8 jms.user、jms.password

JMSプロバイダで指定される、JMS接続のユーザー名とパスワードを設定します。

jms.user=user_name
jms.password=password

これは、JNDIセキュリティに使用されません。JNDI認証を設定するには、JNDI java.naming.securityプロパティを参照してください。

次に例を示します。

jms.user=myuser
jms.password=mypasswd

11.1.3 JNDIプロパティ

JMS統合では、メッセージ取得VAMの特定のプロパティ以外に、接続ファクトリと宛先を検索するための初期コンテキストへの接続に必要なJNDIプロパティの設定もサポートされます。次のプロパティを設定する必要があります。

java.naming.provider.url=url
java.naming.factory.initial=java_class_name

JNDIセキュリティが有効な場合、次のプロパティを設定できます。

java.naming.security.principal=user_name
java.naming.security.credentials=password_or_other_authenticator

次に例を示します。

java.naming.provider.url= t3://localhost:7001
java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
java.naming.security.principal=jndiuser
java.naming.security.credentials=jndipw

11.2 パーサー・プロパティ

プロパティで、各タイプのパーサー(固定、区切り、XML)のメッセージの形式および翻訳ルールを指定します。parser.typeプロパティを設定して、使用するパーサーを指定します。残りのプロパティは、パーサー固有です。

11.2.1 パーサーのタイプの設定

次のプロパティはパーサー・タイプを設定します。

11.2.1.1 parser.type

使用するパーサーを指定します。

parser.type={fixed|delim|xml}

Where:

- fixedは、固定幅パーサーを起動します。

- delimは、区切りパーサーを起動します。

- xmlは、XMLパーサーを起動します。

次に例を示します。

parser.type=delim

11.2.2 固定パーサー・プロパティ

固定パーサーには次のプロパティが必要です。

11.2.2.1 fixed.schematype

メッセージ取得のメタデータとして使用されるファイルのタイプを指定します。有効なオプションは、sourcedefsおよびcopybookの2つです。

fixed.schematype={sourcedefs|copybook}

次に例を示します。

fixed.schematype=copybook

このプロパティの値によって、受信データを正常に解析するために設定する必要がある他のプロパティが決まります。

11.2.2.2 fixed.sourcedefs

fixed.schematype=sourcedefsの場合、このプロパティで、使用されるソース定義ファイルの場所を指定します。

fixed.sourcedefs=file_location

次に例を示します。

fixed.sourcedefs=dirdef/hrdemo.def

11.2.2.3 fixed.copybook

fixed.schematype=copybookの場合、このプロパティで、メッセージ取得プロセスで使用されるコピーブック・ファイルの場所を指定します。

fixed.copybook=file_location

次に例を示します。

fixed.copybook=test_copy_book.cpy

11.2.2.4 fixed.header

データ・ブロック構造の決定に使用されるヘッダー情報を含むsourcedefsエントリまたはコピーブック・レコードの名前を指定します。

fixed.header=record_name

次に例を示します。

fixed.header=HEADER

11.2.2.5 fixed.seqid

各レコードを一意に識別するために使用されるseqidを含むヘッダー・フィールドの名前、JMSプロパティまたはシステム値を指定します。この値は継続的に増分され、最後の文字が最下位である必要があります。

fixed.seqid={field_name|$jms_property|*seqid}

Where:

- field_nameは、seqidを含むヘッダー・フィールドの名前を示します。

- jms_propertyは、指定されたJMSヘッダー・プロパティの値を使用します。この特別な値は$jmsidで、jms.idプロパティで選択されたメカニズムによって返される値を使用します。

- seqidは、システムによって生成される、単純増分の64ビット整数を示します。

次に例を示します。

fixed.seqid=$jmsid

11.2.2.6 fixed.timestamp

タイムスタンプを含むフィールドの名前、JMSプロパティまたはシステム値を指定します。

fixed.timestamp={field_name|$jms_property|*ts}

次に例を示します。

fixed.timestamp=TIMESTAMP
fixed.timestamp=$JMSTimeStamp
fixed.timestamp=*ts

11.2.2.7 fixed.timestamp.format

タイムスタンプ・フィールドの形式を指定します。

fixed.timestamp.format=format

形式には、句読文字と次のものを含めることができます。

- YYYY - 4桁の年

- YY - 2桁の年

- M[M] - 1桁または2桁の月

- D[D] - 1桁または2桁の日

- HH - 24時間表記の時間

- MI – 分

- SS – 秒

- Fn - n個の小数部

デフォルトの形式は、"YYYY-MM-DD:HH:MI:SS.FFF"です。

次に例を示します。

fixed.timestamp.format=YYYY-MM-DD-HH.MI.SS

11.2.2.8 fixed.txid

トランザクションを一意に識別するために使用されるtxidを含むフィールドの名前、JMSプロパティまたはシステム値を指定します。この値は、トランザクションごとに増分されます。

fixed.txid={field_name|$jms_property|*txid}

ほとんどの場合、システム値*txidを使用することが推奨されます。

次に例を示します。

fixed.txid=$JMSTxId
fixed.txid=*txid

11.2.2.9 fixed.txowner

トランザクションに関連付けられているユーザー名を含むフィールドの名前、JMSプロパティまたは静的値を指定します。この値は、特定のトランザクションを処理から除外する場合に使用できます。これは、オプションのプロパティです。

fixed.txowner={field_name|$jms_property|"value"}

次に例を示します。

fixed.txowner=$MessageOwner
fixed.txowner="jsmith"

11.2.2.10 fixed.txname

トランザクションに関連付けられている任意の名前を含むフィールドの名前、JMSプロパティまたは静的値を指定します。これは、オプションのプロパティです。

fixed.txname={field_name|$jms_property|"value"}

次に例を示します。

fixed.txname="fixedtx"

11.2.2.11 fixed.optype

操作タイプを含むフィールドの名前またはJMSプロパティを指定します。これは、後述の項で指定されるfixed.optype値に対して検証されます。

fixed.header.optype={field_name|$jms_property}

次に例を示します。

fixed.header.optype=FUNCTION

11.2.2.12 fixed.optype.insertval

この値は、挿入操作を識別します。デフォルトは、Iです。

fixed.optype.insertval={value|\xhex_value}

次に例を示します。

fixed.optype.insertval=A

11.2.2.13 fixed.optype.updateval

この値は、更新操作を識別します。デフォルトは、Uです。

fixed.optype.updateval={value|\xhex_value}

次に例を示します。

fixed.optype.updateval=M

11.2.2.14 fixed.optype.deleteval

この値は削除操作を識別します。デフォルトは、Dです。

fixed.optype.deleteval={value|\xhex_value}

次に例を示します。

fixed.optype.deleteval=R

11.2.2.15 fixed.table

表の名前を指定します。これによって、ヘッダー以外のデータ部分の翻訳に必要なデータ・レコード定義をパーサーが検索できます。

fixed.table=field_name|$jms_property[, . . .]

カンマ区切りの複数のフィールド名を使用して表の名前を決定できます。各フィールド名は、fixed.headerプロパティまたはJMSプロパティによって定義されるヘッダー・レコード内のフィールドに対応します。これらのフィールドの値は連結されてデータ・レコードを識別します。

次に例を示します。

fixed.table=$JMSTableName
fixed.table=SOURCE_Db,SOURCE_Db_Rec_Version

11.2.2.16 fixed.schema

SCHEMA.TABLE表名を生成する際のスキーマの静的な名前を指定します。

fixed.schema="value"

次に例を示します。

fixed.schema="OGG"

11.2.2.17 fixed.txind

トランザクション・インジケータ値に対して検証される、トランザクション・インジケータを含むフィールドの名前またはJMSプロパティを指定します。これが定義されていない場合、1つのメッセージ内のすべての操作がトランザクション全体に出現するとみなされます。定義されている場合、これによってトランザクションの先頭、中間および末尾が決まります。このように定義されたトランザクションは複数メッセージにわたることができます。これは、オプションのプロパティです。

fixed.txind={field_name|$jms_property}

次に例を示します。

fixed.txind=$TX_IND

11.2.2.18 fixed.txind.beginval

この値は、操作をトランザクションの先頭として識別します。デフォルトは、Bです。

fixed.txind.beginval={value|\xhex_value}

次に例を示します。

fixed.txind.beginval=0

11.2.2.19 fixed.txind.middleval

この値は、操作をトランザクションの中間として識別します。デフォルトは、Mです。

fixed.txind.middleval={value|\xhex_value}

次に例を示します。

fixed.txind.middleval=1

11.2.2.20 fixed.txind.endval

この値は、操作をトランザクションの末尾として識別します。デフォルトは、Eです。

fixed.txind.endval={value|\xhex_value}

次に例を示します。

fixed.txind.endval=2

11.2.2.21 fixed.txind.wholeval

この値は、操作をトランザクション全体として識別します。デフォルトは、Wです。

fixed.txind.wholeval={value|\xhex_value}

次に例を示します。

fixed.txind.wholeval=3

11.2.3 区切りパーサー・プロパティ

特に記載のないかぎり、区切りパーサーには次のプロパティが必要です。

11.2.3.1 delim.sourcedefs

使用するソース定義ファイルの場所を指定します。

delim.sourcedefs=file_location

次に例を示します。

delim.sourcedefs=dirdef/hrdemo.def

11.2.3.2 delim.header

データの前に配置される値のリストを指定し、各々に名前を割り当てます。

delim.header=name[,name2][. . .]

名前は一意である必要があります。これらは、他のdelimプロパティまたはヘッダー・フィールドが使用可能な場所で参照されます。

次に例を示します。

delim.header=optype, tablename, ts
delim.timestamp=ts

11.2.3.3 delim.seqid

各レコードを一意に識別するために使用されるseqidを含むヘッダー・フィールドの名前、JMSプロパティまたはシステム値を指定します。この値は増分され、最後の文字が最下位である必要があります。

delim.seqid={field_name|$jms_property|*seqid}

Where:

- field_nameは、seqidを含むヘッダー・フィールドの名前を示します。

- jms_propertyでは、指定されたJMSヘッダー・プロパティの値を使用します。この特別な値は$jmsidで、jms.idプロパティで選択されたメカニズムによって返される値を使用します。

- seqidは、システムによって生成される、単純で継続的に増分される64ビット整数を示します。

次に例を示します。

delim.seqid=$jmsid

11.2.3.4 delim.timestamp

タイムスタンプを含むJMSプロパティの名前、ヘッダー・フィールドまたはシステム値を指定します。

delim.timestamp={field_name|$jms_property|*ts}

次に例を示します。

delim.timestamp=TIMESTAMP
delim.timestamp=$JMSTimeStamp
delim.timestamp=*ts

11.2.3.5 delim.timestamp.format

タイムスタンプ・フィールドの形式を指定します。

delim.timestamp.format=format

formatには、句読文字と次のものを含めることができます。

- YYYY - 4桁の年

- YY - 2桁の年

- M[M] - 1桁または2桁の月

- D[D] - 1桁または2桁の日

- HH - 24時間表記の時間

- MI – 分

- SS – 秒

- Fn - n個の小数部

デフォルトの形式は、"YYYY-MM-DD:HH:MI:SS.FFF"です。

次に例を示します。

delim.timestamp.format=YYYY-MM-DD-HH.MI.SS

11.2.3.6 delim.txid

トランザクションを一意に識別するために使用されるtxidを含むJMSプロパティの名前、ヘッダー・フィールドまたはシステム値を指定します。この値は、トランザクションごとに増分されます。

delim.txid={field_name|$jms_property|*txid}

ほとんどの場合、システム値*txidを使用することが推奨されます。

次に例を示します。

delim.txid=$JMSTxId
delim.txid=*txid

11.2.3.7 delim.txowner

トランザクションに関連付けられている任意のユーザー名を含むJMSプロパティの名前、ヘッダー・フィールドまたは静的値を指定します。この値は、特定のトランザクションを処理から除外する場合に使用できます。これは、オプションのプロパティです。

delim.txowner={field_name|$jms_property|"value"}

次に例を示します。

delim.txowner=$MessageOwner
delim.txowner="jsmith"

11.2.3.8 delim.txname

トランザクションに関連付けられている任意の名前を含むJMSプロパティの名前、ヘッダー・フィールドまたは静的値を指定します。これは、オプションのプロパティです。

delim.txname={field_name|$jms_property|"value"}

次に例を示します。

delim.txname="fixedtx"

11.2.3.9 delim.optype

操作タイプを含むJMSプロパティの名前またはヘッダー・フィールドを指定します。これは、delim.optype.insertval、delim.optype.updatevalおよびdelim.optype.deletevalの値と比較されて、操作が決まります。

delim.optype={field_name|$jms_property}

次に例を示します。

delim.optype=optype

11.2.3.10 delim.optype.insertval

この値は、挿入操作を識別します。デフォルトは、Iです。

delim.optype.insertval={value|\xhex_value}

次に例を示します。

delim.optype.insertval=A

11.2.3.11 delim.optype.updateval

この値は、更新操作を識別します。デフォルトは、Uです。

delim.optype.updateval={value|\xhex_value}

次に例を示します。

delim.optype.updateval=M

11.2.3.12 delim.optype.deleteval

この値は、削除操作を識別します。デフォルトは、Dです。

delim.optype.deleteval={value|\xhex_value}

次に例を示します。

delim.optype.deleteval=R

11.2.3.13 delim.schemaandtable

SCHEMA.TABLE形式でスキーマおよび表の名前を含むJMSプロパティの名前またはヘッダー・フィールドを指定します。

delim.schemaandtable={field_name|$jms_property}

次に例を示します。

delim.schemaandtable=$FullTableName

11.2.3.14 delim.schema

スキーマ名を含むJMSプロパティの名前、ヘッダー・フィールドまたはハードコードされた値を指定します。

delim.schema={field_name|$jms_property|"value"}

次に例を示します。

delim.schema="OGG"

11.2.3.15 delim.table

表名を含むJMSプロパティまたはヘッダー・フィールドの名前を指定します。

delim.table={field_name|$jms_property}

次に例を示します。

delim.table=TABLE_NAME

11.2.3.16 delim.txind

beginval、middleval、endvalまたはwholevalに対して検証される、トランザクション・インジケータを含むJMSプロパティまたはヘッダー・フィールドの名前を指定します。このプロパティが設定されていない場合、1つのメッセージ内のすべての操作が1つのトランザクション内にあるとみなされます。設定されている場合、これによってトランザクションの先頭、中間および末尾が決まります。このように定義されたトランザクションは複数メッセージにわたることができます。これは、オプションのプロパティです。

delim.txind={field_name|$jms_property}

次に例を示します。

delim.txind=txind

11.2.3.17 delim.txind.beginval

操作をトランザクションの先頭として識別する値。デフォルトは、Bです。

delim.txind.beginval={value|\xhex_value}

次に例を示します。

delim.txind.beginval=0

11.2.3.18 delim.txind.middleval

操作をトランザクションの中間として識別する値。デフォルトは、Mです。

delim.txind.middleval={value|\xhex_value}

次に例を示します。

delim.txind.middleval=1

11.2.3.19 delim.txind.endval

操作をトランザクションの末尾として識別する値。デフォルトは、Eです。

delim.txind.endval={value|\xhex_value}

次に例を示します。

delim.txind.endval=2

11.2.3.20 delim.txind.wholeval

操作をトランザクション全体として識別する値。デフォルトは、Wです。

delim.txind.wholeval={value|\xhex_value}

次に例を示します。

delim.txind.wholeval=3

11.2.3.21 delim.fielddelim

データ内のフィールド(列)の区切りに使用されるデリミタ値を指定します。この値は、文字または16進値を使用して定義されます。

delim.fielddelim={value|\xhex_value}

次に例を示します。

delim.fielddelim=,
delim.fielddelim=\xc7

11.2.3.22 delim.linedelim

データ内の行(レコード)の区切りに使用されるデリミタ値を指定します。この値は、文字または16進値を使用して定義されます。

delim.linedelim={value|\xhex_value}

次に例を示します。

delim.linedelim=||
delim.linedelim=\x0a

11.2.3.23 delim.quote

引用符付きのデータの識別に使用される値を指定します。この値は、文字または16進値を使用して定義されます。

delim.quote={value|\xhex_value}

次に例を示します。

delim.quote="

11.2.3.24 delim.nullindicator

NULLデータの識別に使用される値を指定します。この値は、文字または16進値を使用して定義されます。

delim.nullindicator={value|\xhex_value}

次に例を示します。

delim.nullindicator=NULL

11.2.3.25 delim.fielddelim.escaped

入力フィールドにフィールド・デリミタが出現する場合にフィールド・デリミタを置き換える値を指定します。構文は次のとおりです。

delim.fielddelim.escaped={value|\xhex_value}

たとえば、プロパティ設定が次のとおりであるとします。

delim.fielddelim=-
delim.fielddelim.escaped=$#$

データのいずれのフィールド値にもハイフンのデリミタが含まれていない場合:

one two three four

結果の区切りデータは次のようになります。

one-two-three-four

フィールド値にハイフン(-)のデリミタが含まれている場合:

one two three four-fifths two-fifths

結果の区切りデータは次のようになります。

one-two-three-four$#$fifths-two$#$fifths

11.2.3.26 delim.linedelim.escaped

入力データに行デリミタが出現する場合に行デリミタを置き換える値を指定します。構文は次のとおりです。

delim.linedelim.escaped={value|\xhex_value}

たとえば、プロパティ設定が次のとおりであるとします。

delim.linedelim=\
delim.linedelim.escaped=%/%

入力行が次のような場合:

These are the lines and they
do not contain the delimiter.

行にバックスラッシュ(\)が含まれていないため、結果は次のようになります。

These are the lines and they\
do not contain the delimiter.\

ただし、入力行にデリミタが含まれる場合:

These are the lines\data values
and they do contain the delimiter.

結果は次のとおりです。

These are the lines%/%data values\
and they do contain the delimiter.\

11.2.3.27 delim.quote.escaped

入力データに引用符デリミタが出現する場合に引用符デリミタを置き換える値を指定します。構文は次のとおりです。

delim.quote.escaped={value|\xhex_value}

たとえば、プロパティ設定が次のとおりであるとします。

delim.quote="
delim.quote.escaped="'"

入力データに引用符(")デリミタが含まれない場合:

It was a very original play.

結果は次のとおりです。

"It was a very original play."

ただし、入力データに引用符デリミタが含まれる場合:

It was an "uber-original" play.

結果は次のとおりです。

"It was an "'"uber-original"'" play."

11.2.3.28 delim.nullindicator.escaped

入力データにnullインジケータが出現する場合にnullインジケータを置き換える値を指定します。構文は次のとおりです。

delim.nullindicator.escaped={value|\xhex_value}

たとえば、プロパティ設定が次のとおりであるとします。

delim.fielddelim=,
delim.nullindicator=NULL
delim.nullindicator.escaped=$NULL$

入力データにNULL値またはNULLインジケータが含まれない場合:

1 2 3 4 5

結果は次のとおりです。

1,2,3,4,5

入力データにNULL値が含まれる場合:

1 2 4 5

結果は次のとおりです。

1,2,NULL,4,5

入力データにNULLインジケータが含まれる場合:

1 2 NULL 4 5

結果は次のとおりです。

1,2,$NULL$,4,5

11.2.3.29 delim.hasbefores

データ内にビフォア値が存在するかどうかを指定します。

delim.hasbefores={true|false}

デフォルトは、falseです。delim.hasbeforesがtrueに設定されている場合、パーサーは、すべてのレコードについて列のビフォア値とアフター値があると想定します。ビフォア値は更新と削除に使用され、アフター値は更新と挿入に使用されます。afterfirstプロパティは、ビフォア・イメージがアフター・イメージの前か後かを指定します。delim.hasbeforesがfalseの場合、ビフォア値は想定されません。

次に例を示します。

delim.hasbefores=true

11.2.3.30 delim.hasnames

データ内に列名が存在するかどうかを指定します。

delim.hasnames={true|false}

デフォルトは、falseです。trueの場合、パーサーはすべてのレコードに対して列名を検出すると想定します。パーサーは、想定される列名に対して列名を検証します。falseの場合、列名は想定されません。

次に例を示します。

delim.hasnames=true

11.2.3.31 delim.afterfirst

アフター値がビフォア値の前に配置されているか、後に配置されているかを指定します。

delim.afterfirst={true|false}

デフォルトは、falseです。trueの場合、パーサーは、アフター値をビフォア値の前に検出すると想定します。falseの場合、アフター値はビフォア値の前にあります。

次に例を示します。

delim.afterfirst=true

11.2.3.32 delim.isgrouped

すべての列の列名、ビフォア・イメージおよびアフター・イメージがグループ化されるか、列ごとに順に配置されるかを指定します。

delim.isgrouped={true|false}

デフォルトは、falseです。trueの場合、パーサーは、列名のグループ(hasnamesがtrueの場合)、次にビフォア値のグループ(hasbeforesの場合)、その次にアフター値のグループがある(afterfirst設定によってはビフォア値とアフター値の順序が逆になる)と想定します。falseの場合、パーサーは、列名(hasnamesの場合)、ビフォア値(hasbeforesの場合)およびアフター値が列ごとにあると想定します。

次に例を示します。

delim.isgrouped=true

11.2.3.33 delim.dateformat | delim.dateformat.table | delim.dateform.table.column

列データの日付形式を指定します。これは、グローバル・レベル、表レベルまたは列レベルで指定されます。日付の解析に使用される形式は、parser.timestamp.formatに使用される形式のサブセットです。

delim.dateformat=format
delim.dateformat.TABLE=format
delim.dateformat.TABLE.COLUMN=format

Where:

- formatは、parser.timestamp.formatに定義された形式です。

- tableは、現在処理されている表の完全修飾名です。

- columnは、指定された表の列です。

次に例を示します。

delim.dateformat=YYYY-MM-DD HH:MI:SS
delim.dateformat.MY.TABLE=DD/MM/YY-HH.MI.SS
delim.dateformat.MY.TABLE.EXP_DATE=YYMM

11.2.4 XMLパーサー・プロパティ

次のプロパティがXMLパーサーによって使用されます。

11.2.4.1 xml.sourcedefs

ソース定義ファイルの場所を指定します。

xml.sourcedefs=file_location

次に例を示します。

xml.sourcedefs=dirdef/hrdemo.def

11.2.4.2 xml.rules

メッセージの解析とトランザクション、操作および列の変換のXMLルールのリストを指定します。

xml.rules=xml_rule_name[, . . .]

指定されたXMLルールは、リストされた順に処理されます。特定のXMLドキュメントに対応するすべてのルールによって、トランザクション、操作および列を作成できます。指定されるXMLルールは、トランザクション・タイプまたは操作タイプのルールである必要があります。

次に例を示します。

xml.rules=dyntxrule, statoprule

11.2.4.3 rulename.type

XMLルールのタイプを指定します。

rulename.type={tx|op|col}

Where:

- txは、トランザクション・ルールを示します。

- opは、操作ルールを示します。

- colは、列ルールを示します。

次に例を示します。

dyntxrule.type=tx
statoprule.type=op

11.2.4.4 rulename.match

ルールが特定のドキュメントに対してアクティブ化されるかどうかの決定に使用されるXPath式を指定します。

rulename.match=xpath_expression

XPath式がドキュメントからノードを返す場合、ルールが対応付けられ、後続の処理が行われます。ノードを返さない場合、そのドキュメントに対してルールは無視されます。

次の例では、ドキュメントにルート要素Transactionがある場合、dyntxruleがアクティブ化されます。

dyntxrule.match=/Transaction

statopruleはstattxtuleのサブルールです。次の例では、親ルールの一致ノードに子要素NewMyTableEntryがある場合、statopruleがアクティブ化されます。

statoprule.match=./NewMyTableEntry

11.2.4.5 rulename.subrules

親ルールが一致によってアクティブ化された場合、一致をチェックするルール名のリストを指定します。

rulename.subrules=xml_rule_name[, . . .]

指定されたXMLルールは、リストされた順に処理されます。すべての一致ルールで、トランザクション、操作および列が作成される場合があります。

有効なサブルールは、親タイプによって決まります。トランザクション・ルールは、操作サブルールのみ持つことができます。操作ルールは、操作または列サブルールを持つことができます。列ルールは、サブルールを持つことはできません。

次に例を示します。

dyntxrule.subrules=dynoprule
statoprule.subrules=statkeycolrule, statcol1rule

11.2.4.6 txrule.timestamp

1) 指定されたXPath式またはJMSプロパティに含まれたトランザクション・コミット・タイムスタンプの使用、または2) 現在のシステム時間の使用をアダプタに指定することで、トランザクションのタイムスタンプを制御します。これは、オプションのプロパティです。

txrule.timestamp={xpath_expression|$jms_property|*ts}

トランザクションのタイムスタンプは操作レベルでオーバーライドすることも、操作レベルでのみ存在することもできます。XPath式は、@att、text()などの値アクセッサで終わる必要があります。

次に例を示します。

dyntxrule.timestamp=@ts

11.2.4.7 txrule.timestamp.format

タイムスタンプ・フィールドの形式を指定します。

txrule.timestamp.format=format

形式には、句読文字と次のものを含めることができます。

- YYYY - 4桁の年

- YY - 2桁の年

- M[M] - 1桁または2桁の月

- D[D] - 1桁または2桁の日

- HH - 24時間表記の時間

- MI – 分

- SS – 秒

- Fn - n個の小数部

デフォルトの形式は、"YYYY-MM-DD:HH:MI:SS.FFF"です。

次に例を示します。

dyntxrule.timestamp.format=YYYY-MM-DD-HH.MI.SS

11.2.4.8 txrule.seqid

特定のトランザクションのseqidを指定します。これは、各メッセージに複数のトランザクションがある場合に使用できます。トランザクションのseqidを含むXPath式、JMSプロパティまたはシステム値を決定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。

txrule.seqid={xpath_expression|$jms_property|*seqid}

次に例を示します。

dyntxrule.seqid=@seqid

11.2.4.9 txrule.txid

トランザクションを一意に識別するために使用されるtxidを含むXPath式、JMSプロパティまたはシステム値を指定します。この値は、トランザクションごとに増分されます。

txrule.txid={xpath_expression|$jms_property|*txid}

ほとんどの場合、システム値*txidを使用することが推奨されます。

次に例を示します。

dyntxrule.txid=$JMSTxId
dyntxrule.txid=*txid

11.2.4.10 txrule.txowner

トランザクションに関連付けられている任意のユーザー名を含むXPath式、JMSプロパティまたは静的値を指定します。この値は、特定のトランザクションを処理から除外する場合に使用できます。

txrule.txowner={xpath_expression|$jms_property|"value"}

次に例を示します。

dyntxrule.txowner=$MessageOwner
dyntxrule.txowner="jsmith"

11.2.4.11 txrule.txname

トランザクションに関連付けられている任意の名前を含むXPath式、JMSプロパティまたは静的値を指定します。これは、オプションのプロパティです。

txrule.txname={xpath_expression|$jms_property|"value"}

次に例を示します。

dyntxrule.txname="fixedtx"

11.2.4.12 oprule.timestamp

1) 指定されたXPath式またはJMSプロパティに含まれたトランザクション・コミット・タイムスタンプの使用、または2) 現在のシステム時間の使用をアダプタに指定することで、操作のタイムスタンプを制御します。これは、オプションのプロパティです。

oprule.timestamp={xpath_expression|$jms_property|*ts}

操作のタイムスタンプは、トランザクション・レベルのタイムスタンプをオーバーライドします。

XPath式は、@att、text()などの値アクセッサで終わる必要があります。

次に例を示します。

statoprule.timestamp=./CreateTime/text()

11.2.4.13 oprule.timestamp.format

タイムスタンプ・フィールドの形式を指定します。

oprule.timestamp.format=format

formatには、句読文字と次のものを含めることができます。

- YYYY - 4桁の年

- YY - 2桁の年

- M[M] - 1桁または2桁の月

- D[D] - 1桁または2桁の日

- HH - 24時間表記の時間

- MI – 分

- SS – 秒

- Fn - n個の小数部

デフォルトの形式は、"YYYY-MM-DD:HH:MI:SS.FFF"です。

次に例を示します。

statoprule.timestamp.format=YYYY-MM-DD-HH.MI.SS

11.2.4.14 oprule.seqid

特定の操作のseqidを指定します。操作のseqidを含むXPath式、JMSプロパティまたはシステム値を使用します。これは、親トランザクション・ルールで定義されたseqidをオーバーライドします。親トランザクション・ルールがない場合、必須です。

XPath式は、@att、text()などの値アクセッサで終わる必要があります。

oprule.seqid={xpath_expression|$jms_property|*seqid}

次に例を示します。

dynoprule.seqid=@seqid

11.2.4.15 oprule.txid

トランザクションを一意に識別するために使用されるtxidを含むXPath式、JMSプロパティまたはシステム値を指定します。これは、親トランザクション・ルールで定義されたtxidをオーバーライドし、親トランザクション・ルールがない場合、必須です。この値は、トランザクションごとに増分されます。

oprule.txid={xpath_expression|$jms_property|*txid}

ほとんどの場合、システム値*txidを使用することが推奨されます。

次に例を示します。

dynoprule.txid=$JMSTxId
dynoprule.txid=*txid

11.2.4.16 oprule.txowner

トランザクションに関連付けられている任意のユーザー名を含むXPath式、JMSプロパティまたは静的値を指定します。この値は、特定のトランザクションを処理から除外する場合に使用できます。これは、オプションのプロパティです。

oprule.txowner={xpath_expression|$jms_property|"value"}

次に例を示します。

dynoprule.txowner=$MessageOwner
dynoprule.txowner="jsmith"

11.2.4.17 oprule.txname

トランザクションに関連付けられている任意の名前を含むXPath式、JMSプロパティまたは静的値を指定します。これは、オプションのプロパティです。

oprule.txname={xpath_expression|$jms_property|"value"}

次に例を示します。

dynoprule.txname="fixedtx"

11.2.4.18 oprule.schemandtable

SCHEMA.TABLE形式でスキーマおよび表の名前を含むXPath式、JMSプロパティまたはハードコードされた値を指定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。値を検証して表がソース定義に存在するかどうかが確認されます。

oprule.schemaandtable={xpath_expression|$jms_property|"value"}

次に例を示します。

statoprule.schemaandtable="MY.TABLE"

11.2.4.19 oprule.schema

スキーマ名を含むXPath式、JMSプロパティまたはハードコードされた値を指定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。

oprule.schema={xpath_expression|$jms_property|"value"}

次に例を示します。

statoprule.schema=@schema

11.2.4.20 oprule.table

表名を含むXPath式、JMSプロパティまたはハードコードされた値を指定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。

oprule.table={xpath_expression|$jms_property|"value"}

次に例を示します。

statoprule.table=$TableName

11.2.4.21 oprule.optype

optype insertvalなどに対して検証されるoptypeを含むXPath式、JMSプロパティまたはリテラル値を指定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。

oprule.optype={xpath_expression|$jms_property|"value"}

次に例を示します。

dynoprule.optype=@type
statoprule.optype="I"

11.2.4.22 oprule.optype.insertval

挿入操作を識別する値を指定します。デフォルトは、Iです。

oprule.optype.insertval={value|\xhex_value}

次に例を示します。

dynoprule.optype.insertval=A

11.2.4.23 oprule.optype.updateval

更新操作を識別する値を指定します。デフォルトは、Uです。

oprule.optype.updateval={value|\xhex_value}

次に例を示します。

dynoprule.optype.updateval=M

11.2.4.24 oprule.optype.deleteval

削除操作を識別する値を指定します。デフォルトは、Dです。

oprule.optype.deleteval={value|\xhex_value}

次に例を示します。

dynoprule.optype.deleteval=R

11.2.4.25 oprule.txind

beginvalまたはトランザクション内の位置を識別する他の値に対して検証されるトランザクション・インジケータを含むXPath式またはJMSプロパティを指定します。このプロパティが定義されていない場合、1つのメッセージ内のすべての操作がトランザクション全体に出現するとみなされます。トランザクションの先頭、中間および末尾を指定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。このように定義されたトランザクションは複数メッセージにわたることができます。これは、オプションのプロパティです。

oprule.txind={xpath_expression|$jms_property}

次に例を示します。

dynoprule.txind=@txind

11.2.4.26 oprule.txind.beginval

操作をトランザクションの先頭として識別する値を指定します。デフォルトは、Bです。

oprule.txind.beginval={value|\xhex_value}

次に例を示します。

dynoprule.txind.beginval=0

11.2.4.27 oprule.txind.middleval

操作をトランザクションの中間として識別する値を指定します。デフォルトは、Mです。

oprule.txind.middleval={value|\xhex_value}

次に例を示します。

dynoprule.txind.middleval=1

11.2.4.28 oprule.txind.endval

操作をトランザクションの末尾として識別する値を指定します。デフォルトは、Eです。

oprule.txind.endval={value|\xhex_value}

次に例を示します。

dynoprule.txind.endval=2

11.2.4.29 oprule.txind.wholeval

操作をトランザクション全体として識別する値を指定します。デフォルトは、Wです。

oprule.txind.wholeval={value|\xhex_value}

次に例を示します。

dynoprule.txind.wholeval=3

11.2.4.30 colrule.name

列名を含むXPath式またはハードコードされた値を指定します。指定しない場合、列索引を指定する必要があります。列索引から列名が解決されます。指定された場合、列名がソース定義ファイルに対して検証されます。XPath式は、@att、text()などの値アクセッサで終わる必要があります。

colrule.name={xpath_expression|"value"}

次に例を示します。

dyncolrule.name=@name
statkeycolrule.name="keycol"

11.2.4.31 colrule.index

列索引を含むXPath式またはハードコードされた値を指定します。指定しない場合、列名を指定する必要があります。列名から列索引が解決されます。指定された場合、列索引がソース定義ファイルに対して検証されます。XPath式は、@att、text()などの値アクセッサで終わる必要があります。

colrule.index={xpath_expression|"value"}

次に例を示します。

dyncolrule.index=@index
statkeycolrule.index=1

11.2.4.32 colrule.value

列値を含むXPath式またはハードコードされた値を指定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。ノードまたは属性が存在せず、XPath式が値を返さない場合、列値はnullとみなされます。nullと欠落値を区別するために(更新の場合)、isnullおよびismissingプロパティを設定する必要があります。返される値は、ビフォア値の削除およびアフター値の更新/挿入に使用されます。

colrule.value={xpath_expression|"value"}

次に例を示します。

statkeycolrule.value=./text()

11.2.4.33 colrule.isnull

列値がnullかどうかの検出に使用されるXPath式を指定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。XPath式が値を返す場合、列値はnullです。これは、オプションのプロパティです。

colrule.isnull=xpath_expression

次に例を示します。

dyncolrule.isnull=@isnull

11.2.4.34 colrule.ismissing

列値が欠落しているかどうかの検出に使用されるXPath式を指定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。XPath式が値を返す場合、列値は欠落しています。これは、オプションのプロパティです。

colrule.ismissing=xpath_expression

次に例を示します。

dyncolrule.ismissing=./missing

11.2.4.35 colrule.before.value

colrule.valueをオーバーライドし、更新または削除に使用されるビフォア値の取得方法を明示的に指定します。この形式は、colrule.valueと同じ形式です。これは、オプションのプロパティです。

次に例を示します。

dyncolrule.before.value=./beforevalue/text()

11.2.4.36 colrule.before.isnull

colrule.isnullをオーバーライドし、更新または削除用のビフォア値がnullかどうかの決定方法を明示的に指定します。この形式は、colrule.isnullと同じ形式です。これは、オプションのプロパティです。

次に例を示します。

dyncolrule.before.isnull=./beforevalue/@isnull

11.2.4.37 colrule.before.ismissing

colrule.ismissingをオーバーライドし、更新または削除用のビフォア値が欠落しているかどうかの決定方法を明示的に指定します。この形式は、colrule.ismissingの形式と同じです。これは、オプションのプロパティです。

次に例を示します。

dyncolrule.before.ismissing=./beforevalue/missing

11.2.4.38 colrule.after.value

colrule.valueをオーバーライドし、更新または削除に使用されるアフター値の取得方法を明示的に指定します。この形式は、colrule.valueと同じ形式です。これは、オプションのプロパティです。

次に例を示します。

dyncolrule.after.value=./aftervalue/text()

11.2.4.39 colrule.after.isnull

colrule.isnullをオーバーライドし、更新または削除用のアフター値がnullかどうかの決定方法を明示的に指定します。この形式は、colrule.isnullと同じ形式です。これは、オプションのプロパティです。

次に例を示します。

dyncolrule.after.isnull=./aftervalue/@isnull

11.2.4.40 colrule.after.ismissing

colrule.ismissingをオーバーライドし、更新または削除用のアフター値が欠落しているかどうかの決定方法を明示的に指定します。この形式は、colrule.ismissingの形式と同じです。これは、オプションのプロパティです。

次に例を示します。

dyncolrule.after.ismissing=./aftervalue/missing

第IV部

Javaメッセージの配信

この部には、Oracle GoldenGateアダプタを使用したトランザクション情報の処理およびサードパーティ・アプリケーションへの配信用のJMSメッセージの作成に関する情報が含まれています。

第V部には、次の章があります。

- 第12章「メッセージ配信の構成」

- 第13章「Javaユーザー・イグジットの使用」

- 第14章「イベント・ハンドラの構成」

- 第15章「メッセージ配信プロパティ」

- 第16章「カスタム・フィルタ、フォーマッタおよびハンドラの開発」

12 メッセージ配信の構成

この章では、メッセージの配信用にアダプタを構成する方法について説明します。これを行うには、ユーザー・イグジット・プロパティ・ファイルでプロパティを設定して、データ・ポンプとしてユーザー・イグジットを実行するようExtractを構成し、使用する組込みまたはカスタムのイベント・ハンドラを識別する必要があります。

この章の内容は次のとおりです。

- ユーザー・イグジット・プロパティ・ファイルでのJREの構成

- ユーザー・イグジットを実行するためのデータ・ポンプの構成

- Javaハンドラの構成

12.1 ユーザー・イグジット・プロパティ・ファイルでのJREの構成

Java用Oracle GoldenGateメインjar(ggjava.jar)の場所を指すようユーザー・イグジット・プロパティ・ファイルを変更します。必要に応じて追加のJVMランタイム起動オプション(起動時にJVMに直接渡される)を設定します。

jvm.bootoptions=-Djava.class.path=ggjava/ggjava.jar
-Dlog4j.configuration=log4j.properties -Xmx512m

特に次のオプションに注意してください。

- java.class.pathには、コア・アプリケーション(ggjava.jar)以外にカスタムjarを含めることができます。現在のディレクトリ(.)がデフォルトでクラスパスに含められます。Oracle GoldenGateインストール・ディレクトリを基準にファイルを参照し、Javaプロパティ・ファイル、Velocityテンプレートおよびdirprmサブディレクトリ内の他のクラスパス・リソースを格納できます。Javaアプリケーション・プロパティ・ファイルでクラスパスに追加することもできます。

- log4j.configurationオプションは、クラスパス内にあるlog4プロパティ・ファイルを指定します。基本ロギング(log4j.properties)、デバッグ・ロギング(debug-log4j.properties)および詳細トレースレベル・ロギング(trace-log4j.properties)用にあらかじめ構成されたデフォルトのlog4j設定がresources/classesディレクトリにあります。

システム用にユーザー・イグジット・プロパティ・ファイルを正しく構成したら、通常変更しません。構成オプションの詳細は、「ユーザー・イグジット・プロパティ」を参照してください。

12.2 ユーザー・イグジットを実行するためのデータ・ポンプの構成

ユーザー・イグジットExtractは、データ・ポンプとして構成されます。データ・ポンプはローカル証跡(dirdat/aaなど)を消費し、データをユーザー・イグジットに送信します。ユーザー・イグジットは、すべてのデータの処理に使用されます。

データ・ポンプExtractの追加例は、次のとおりです。

ADD EXTRACT javaue, EXTTRAILSOURCE ./dirdat/aa

前述のプロセス名と証跡名は、任意の有効な名前で置き換えます。プロセス名は8文字以下、証跡名は2文字である必要があります。ユーザー・イグジットExtractパラメータ・ファイル(javaue.prm)で、ユーザー・イグジット・ライブラリの場所を指定します。

表12-1 ユーザー・イグジットExtractのパラメータ

パラメータ

説明

EXTRACT javaue

すべてのExtractパラメータ・ファイルはExtract名で始まります。

SOURCEDEFS ./dirdef/tcust.def

Extractプロセスは、証跡データを表すメタデータを必要とします。これは、データベースまたはソース定義ファイルから取得します。このメタデータは、読み取る対象の証跡(./dirdat/aa)の列名およびデータ型を定義します。

SETENV (GGS_USEREXIT_CONF = "dirprm/javaue.properties")

(オプション)Cユーザー・イグジット・ライブラリのプロパティ・ファイルの絶対パスまたは相対(Extract実行可能ファイルを基準とした)パス。デフォルト値は、dirprmディレクトリのextract_name.propertiesです。

SETENV (GGS_JAVAUSEREXIT_CONF = "dirprm/javaue.properties")

(オプション)Javaプロパティ。この例では、dirpmディレクトリにプロパティ・ファイルを配置します。

CUSEREXIT ggjava_ue.dll CUSEREXIT
PASSTHRU
INCLUDEUPDATEBEFORES

CUSEREXITパラメータには、次のものが含まれます。

- ユーザー・イグジット・ライブラリの場所。UNIXの場合、ライブラリには.so接尾辞が付きます。

- CUSEREXIT - コールバック関数名。大文字である必要があります。

- PASSTHRU - ダミー・ターゲット証跡の必要がなくなります。

- INCLUDEUPDATEBEFORES - トランザクションの整合性のために必要です。

TABLE schema.*;

ユーザー・イグジットに渡す表。含まれていない表はスキップされます。フィルタなしをユーザー・イグジットExtractで行えます。それ以外の場合、トランザクション・マーカーは省略されます。プライマリExtractでのフィルタ、別のアップストリーム・データ・ポンプの使用またはJavaアプリケーションでのデータの直接のフィルタを行えます。

注意:
PASSTHRUを使用すると、レポート数を処理レポートに含めることができる統計レポートが無効になります。レポート数統計を収集し、ユーザー・イグジットからExtractに送信するには、プロパティgg.report.timeを使用します。

前述の2つの環境プロパティはオプションです。

- SETENV (GGS_USEREXIT_CONF = "dirprm/javaue.properties")
これは、ユーザー・イグジット共有ライブラリに使用されるデフォルトの構成ファイルを変更します。指定される値は、絶対パスまたはExtract(またはReplicat)を基準としたパスです。前述の例では、相対パスを使用してこのプロパティ・ファイルをdirprmディレクトリに配置します。

使用されるデフォルト・ファイルは、dirprmディレクトリにあるextract_name.propertiesです。Extract名がpumpAの場合、prmファイルはdirprm/pumpA.prmで、プロパティ・ファイルはdirprm/pumpA.propertiesです。

- SETENV (GGS_JAVAUSEREXIT_CONF = "dirprm/javaue.properties")
これは、Java用Oracle GoldenGateフレームワークに使用されるデフォルトのプロパティ・ファイルを変更します。値は、クラスパスまたは通常のファイル・システム・パスにあるファイルへのパスです。

GGS_USEREXIT_CONFおよびGGS_JAVAUSEREXIT_CONFの両方とも、デフォルトは同じファイルdirprm/extract_name.propertiesです。

12.3 Javaハンドラの構成

Oracle GoldenGate Java APIには、アクティブ・イベント・ハンドラの構成に使用するプロパティ・ファイルがあります。構成をテストするには、組込みファイル・ハンドラを使用できます。次に、プロパティ例とプロパティの説明(#で始まるコメント行)を示します。

# the list of active handlers
gg.handlerlist=myhandler
# set properties on 'myhandler'
gg.handler.myhandler.type=file
gg.handler.myhandler.format=tx2xml.vm
gg.handler.myhandler.file=output.xml

このプロパティ・ファイルでは、次のように宣言しています。

- アクティブ・イベント・ハンドラ。この例では、myhandlerという名前の1つのイベント・ハンドラがアクティブです。複数のハンドラをカンマで区切って指定できます。たとえば、gg.handlerlist=myhandler, yourhandlerです。

- ハンドラの構成。この例では、myhandlerはfileタイプのハンドラと宣言されています(gg.handler.myhandler.type=file)。

注意:
設定可能な有効なプロパティのリストは、各タイプのハンドラ(JMSハンドラ、ファイル・ライター・ハンドラなど)のドキュメントを参照してください。

- 出力の形式は、Velocityテンプレートtx2xml.vmによって定義されます。メッセージ形式を定義する独自のカスタム・テンプレートを指定できます。Javaクラスパスを基準としてテンプレートのパスを指定します(これは後述します)。

このプロパティ・ファイルは、実際、取得されたトランザクションを出力ファイルoutput.xmlに書き込む完全な例です。他のハンドラ・タイプは、キーワードjms_text(またはjms)、jms_map、singlefile(ロールしないファイル)などを使用して指定できます。カスタム・ハンドラを実装できます。この場合、タイプはハンドラのJavaクラスの完全修飾名です。

13 Javaユーザー・イグジットの使用

この章では、メッセージを配信するOracle GoldenGateアダプタ・ユーザー・イグジットの起動方法および再起動方法について説明します。ユーザー・イグジットExtractによって消費される証跡をプライマリExtractですでに生成してあるものとします。

この章の内容は次のとおりです。

- アプリケーションの起動

- 証跡の先頭でのアプリケーションの再起動

13.1 アプリケーションの起動

ユーザー・イグジットを実行し、Javaアプリケーションを実行するために必要なのは、既存の証跡ファイルとこれに対応するソース定義ファイルのみです。後述の例では、単純なTCUSTMERおよびTCUSTORD証跡(Oracle GoldenGateソフトウェア・ダウンロードに含まれるデモSQLに対応)および証跡に使用されるデータ型を定義するソース定義ファイルが使用されます。

注意:
ユーザー・イグジットは、実行にデータベースへのアクセスを必要としません。しかし、Extractプロセスは、証跡データを表すメタデータを必要とします。Extractはデータベースにログインしてメタデータを取得する必要があります。あるいは、ソース定義ファイルを指定することもできます。いずれの場合も、ユーザー・イグジットを使用する場合、ExtractはPASSTHRUモードにできません。

ユーザー・イグジットを実行するには、単にGGSCIからExtractプロセスを起動します。

GGSCI> START EXTRACT javaue
GGSCI> INFO EXTRACT javaue

INFOコマンドでは、次のような情報が返されます。

EXTRACT JAVAUE Last Started 2011-08-25 18:41 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:00 ago)
Log Read Checkpoint File ./dirdat/bb000000
2011-09-24 12:52:58.000000 RBA 2702

Extractプロセスが実行され、ファイル・ハンドラが使用される(前述の例のとおり)と、Oracle GoldenGateインストール・ディレクトリ(Extract実行可能ファイルと同じディレクトリ)に出力ファイルoutput.xmlが生成されます。

プロセスが起動しない場合や異常終了する場合、「エラーのチェック」を参照してください。

13.2 証跡の先頭でのアプリケーションの再起動

ユーザー・イグジットを実行するExtractには、ユーザー・イグジット・チェックポイントとExtractチェックポイントの2つのチェックポイントがあります。Extractを再度実行する前に、両チェックポイントをリセットする必要があります。

1. ユーザー・イグジット・チェックポイント・ファイルを削除します。
この例では、Extractグループの名前はjavaueであるため、これがチェックポイント接頭辞のデフォルトになります。接頭辞は、プロパティ・ファイルでgoldengate.userexit.chkptprefiを使用して設定することもできます。

Windows: cmd> del javaue_jvm.chkpt

UNIX: $ rm javaue_jvm.chkpt

注意:
本番システムでチェックポイントを変更したり、ユーザー・イグジット・チェックポイント・ファイルを削除しないでください。

2. Extractを証跡データの先頭にリセットします。

GGSCI> ALTER EXTRACT JAVAUE, EXTSEQNO 0, EXTRBA 0

3. Extractを再起動します。

GGSCI> START JAVAUE
GGSCI> INFO JAVAUE
EXTRACT    JAVAUE    Last Started 2011-08-25 18:41   Status RUNNING
Checkpoint Lag       00:00:00 (updated 00:00:00 ago)
Log Read Checkpoint  File ./dirdat/ps000000
2011-09-24 12:52:58.000000  RBA 2702

Extractプロセスのステータスが実行中になるには、数秒かかる場合があります。レポート・ファイルをチェックして、異常終了したか、起動中のままかを確認します。

GGSCI> VIEW REPORT JAVAUE

14 イベント・ハンドラの構成

この章では、各種イベント・ハンドラ、使用するイベント・ハンドラの指定方法およびオプションについて説明します。出力のフォーマット方法およびOracle GoldenGateレポート・ファイルの内容について説明します。

この章の内容は次のとおりです。

- イベント・ハンドラの指定

- JMSハンドラ

- ファイル・ハンドラ

- カスタム・ハンドラ

- 出力のフォーマット

- レポート

14.1 イベント・ハンドラの指定

トランザクション、操作およびメタデータ・イベントのJavaでの処理は次のようになります。

- Oracle GoldenGate Extractがローカル証跡データを読み取り、トランザクション、操作およびデータベース・メタデータをユーザー・イグジットに渡します。メタデータは、ソース定義ファイルから、またはデータベースの問合せによって取得します。

- Javaフレームワークがイベントを発行します。イベントは、オプションでカスタム・イベント・フィルタによってフィルタされます。

- ハンドラ(イベント・リスナー)がこれらのイベントを処理し、トランザクション、操作およびメタデータを処理します。特定のタイプのターゲットにカスタム・フォーマッタが適用される場合があります。

既存のハンドラがいくつかあります。

- MapMessageを使用するか、TextMessageをカスタマイズ可能なフォーマッタと組み合せて使用し、JMSプロバイダに送信するメッセージ・ハンドラ。

- JMSメッセージをOracleアドバンスト・キューイング(AQ)に送信する、専用のメッセージ・ハンドラ。

- 1つのファイルまたはローリング・ファイルに書き込むファイル・ライター・ハンドラ。

注意:
ファイル・ライター・ハンドラはJMS TextMessageハンドラと完全に同じフォーマッタを使用できるため、ファイル・ライター・ハンドラは開発ユーティリティとして特に有用です。ファイル・ライターを使用すると、JMSに実際にメッセージを送らずにJMS用のフォーマッタのテストとチューニングを簡単に行えます。

イベント・ハンドラはメインJavaプロパティ・ファイルを使用して構成できます。あるいは、オプションで別のプロパティ・ファイルから直接プロパティを読み込む場合もあります(ハンドラの実装によって異なります)。ハンドラのプロパティは次の構文を使用して設定されます。

gg.handler.{name}.someproperty=somevalue

これによって、プロパティ・ファイルでnameで識別されるハンドラ・インスタンスのプロパティsomepropertyが値somevalueに設定されます。このnameはプロパティ・ファイルで使用され、アクティブ・ハンドラを定義し、そのプロパティを設定します。これはユーザー定義です。

実装上の注意(Java開発者向け): 前述の例の後、ハンドラがインスタンス化されると、メソッドvoid setSomeProperty(String value)がハンドラ・インスタンスでコールされ、文字列値somevalueが渡されます。JavaBean PropertyEditorもハンドラに対して定義できます。この場合、文字列は、セッター・メソッドに対して適切な型に自動的に変換されます。たとえば、Javaアプリケーション・プロパティ・ファイルで次のような設定だとします。

# the list of active handlers: only two are active
gg.handlerlist=one, two
# set properties on 'one'
gg.handler.one.type=file
gg.handler.one.format=com.mycompany.MyFormatter
gg.handler.one.file=output.xml
# properties for handler 'two'
gg.handler.two.type=jms_text
gg.handler.two.format=com.mycompany.MyFormatter
gg.handler.two.properties=jboss.properties
# set properties for handler 'foo'; this handler is ignored
gg.handler.foo.type=com.mycompany.MyHandler
gg.handler.foo.someproperty=somevalue

タイプによってハンドラ・クラスが識別されます。他のプロパティは、作成されるハンドラのタイプによって異なります。別個のプロパティ・ファイルがハンドラ(JMSハンドラなど)の初期化に使用される場合、プロパティ・ファイルはクラスパスにあります。たとえば、プロパティ・ファイルが{gg_install_dir}/dirprm/foo.propertiesにある場合、プロパティ・ファイルでgg.handler.name.properties=foo.propertiesのように指定します。

14.2 JMSハンドラ

メインJavaプロパティ・ファイルは、アクティブ・ハンドラを識別します。JMSハンドラは、必要に応じてJMS固有の構成用の個別のプロパティ・ファイルを使用できます。これによって、複数のJMSハンドラが同時に稼働するよう構成できます。

いくつかのJMSプロバイダ(JBoss、TIBCO、Solace、ActiveMQ、WebLogic)用にサンプルが含まれています。使用している環境用の出発点として特定のJMSプロバイダに適したプロパティ・ファイルを選択できます。JMSプロバイダごとに設定は多少異なります。環境に特有の設定もあります。

Java jar (ggjava)のインストール・ディレクトリには、コア・アプリケーションjar (ggjava.jar)とそのその依存性がresources/lib/*.jarに含まれています。リソース・ディレクトリはすべての依存性と構成を含み、クラスパス内にあります。

JMSクライアントjarがシステムにすでにある場合、コピーせずに直接参照し、クラスパスに追加できます。

次のタイプのJMSハンドラを指定できます。

- jms - テキスト・メッセージをトピックまたはキューに送信します。メッセージはVelocityテンプレートを使用するか、Javaでフォーマッタを記述してフォーマットします。ファイルへの書込みの際、同じフォーマッタをjms_text messageに使用できます。(jms_textはjmsと同義です。)

- aq - テキスト・メッセージをOracleアドバンスト・キューイング(AQ)に送信します。aqハンドラは、AQへの配信用に構成されたjmsハンドラです。メッセージはVelocityテンプレートまたはカスタム・フォーマッタを使用してフォーマットできます。

- jms_map - JMS MapMessageをトピックまたはキューに送信します。メッセージのJMSTypeを表の名前に設定します。メッセージの本体は次のメタデータとそれに続く列名と列値のペアで構成されます。

- GG_ID - この操作を一意に識別するレコードの位置

- GG_OPTYPE - SQLのタイプ(挿入/更新/削除)

- GG_TABLE - 操作が行われた表の名前

- GG_TIMESTAMP - 操作のタイムスタンプ

14.3 ファイル・ハンドラ

ファイル・ハンドラは、実際のターゲットがJMSで、メッセージ形式がカスタムJavaまたはVelocityテンプレートを使用して開発されている場合にメッセージ形式の確認に使用されることが多くあります。ファイル・ハンドラを使用するプロパティ・ファイルを次に示します。

# one file handler active, using Velocity template formatting
gg.handlerlist=myfile
gg.handler.myfile.type=file
gg.handler.myfile.rollover.size=5M
gg.handler.myfile.format=sample2xml.vm
gg.handler.myfile.file=output.xml

この例では、1つのハンドラを使用して、(JMSハンドラとファイル・ハンドラが同時に使用されることはある)output.xmlという名前のファイルに書き込みます。sample2xml.vmという名前のVelocityテンプレートを使用します。テンプレートはクラスパスを介して特定されます。

14.4 カスタム・ハンドラ

カスタム・ハンドラのコーディングの詳細は、「Javaでのカスタム・ハンドラのコーディング」を参照してください。

14.5 出力のフォーマット

前述のとおり、既存のJMSおよびファイル出力ハンドラはプロパティ・ファイルを使用して構成できます。各ハンドラには、設定可能な固有のプロパティがあります。たとえば、出力ファイルをファイル・ハンドラに設定したり、JMS宛先をJMSハンドラに設定できます。これらの両ハンドラでカスタム・フォーマッタも指定できます。同じフォーマッタを両方のハンドラに使用できます。カスタム・フォーマット用のJavaコードを記述するかわりに、Velocityテンプレートを指定できます。詳細は、「イベントのフィルタリング」を参照してください。

14.6 レポート

Extractプロセスが停止すると、スループットおよび処理されたデータの量に関するサマリー統計が生成されます。また、統計は、定期的に(指定した時間の経過後または指定した数のレコードの処理後)書き込まれます。時間とレコード数の両方が指定された場合、いずれかのイベントが発生すると、レポートが生成されます。これらの統計サマリーは、Oracle GoldenGateレポート・ファイルおよびユーザー・イグジット・ログ・ファイルに書き込まれます。

15 メッセージ配信プロパティ

この章では、ユーザー・イグジット・プロパティおよびJavaアプリケーション・プロパティのプロパティ・ファイルの構成に使用できるオプションについて説明します。

この章の内容は次のとおりです。

- ユーザー・イグジット・プロパティ

- Javaアプリケーション・プロパティ

15.1 ユーザー・イグジット・プロパティ

次のプロパティでは、ログ・ファイルおよびロギングのタイプを設定します。

15.1.1 ロギング・プロパティ

ロギングは次のプロパティによって制御されます。

15.1.1.1 gg.log

使用されるロギングのタイプを指定します。Oracle GoldenGateアダプタのデフォルトの実装は、JDKオプションです。これは、java.util.logging (JUL)という名前の組込みJavaロギングです。その他のロギング・オプションは、log4jまたはlogbackです。

たとえば、ロギングのタイプをlog4jに設定するには、次のようにします。

gg.log=log4j

ログ・ファイルは、インストールのレポート・サブディレクトリに作成されます。デフォルトのログ・ファイル名には、関連付けられているExtractのグループ名が含まれ、ファイル拡張子は.logです。

15.1.1.2 gg.log.level

すべてのモジュールを対象とする全体的なログ・レベルを指定します。構文は次のとおりです。

gg.log.level={ERROR|WARN|INFO|DEBUG}

ログ・レベルは次のように定義されています。

- ERROR - エラーが発生した場合にのみメッセージを書き込ます。

- WARN - エラーおよび警告メッセージを書き込みます。

- INFO - エラー、警告および情報メッセージを書き込みます。

- DEBUG - デバッグ・メッセージを含むすべてのメッセージを書き込みます。

デフォルトのロギング・レベルはINFOです。この場合、メッセージは、起動時、停止時および操作中に定期的に生成されます。レベルをDEBUGに切り替えると、メッセージが大量に生成され、パフォーマンスに影響する場合があります。たとえば、次の例ではグローバル・ロギング・レベルをINFOに設定します。

# global logging level
gg.log.level=INFO

15.1.1.3 gg.log.file

ログ・ファイルのパスを指定します。構文は次のとおりです。

gg.log.file=path_to_file

ここで、path_to_fileは完全に定義されたログ・ファイルの場所です。これによってログの名前の変更が可能になりますが、複数のExtractがある場合、誤って他のログを上書きすることがないようExtract名を含める必要があります。

15.1.1.4 gg.log.classpath

ロギングの実装に使用されるjarのクラスパスを指定します。

gg.log.classpath=path_to_jars

15.1.2 一般プロパティ

次のプロパティは、ライター・タイプのすべてのユーザー・イグジットに適用され、ユーザー・イグジット固有ではありません。

15.1.2.1 goldengate.userexit.writers

ライターの名前を指定します。これは常にjvmで、変更しないでください。

次に例を示します。

goldengate.userexit.writers=jvm

ファイル内の他のすべてのプロパティにライター名jvmを接頭辞として付けます。

15.1.2.2 goldengate.userexit.chkptprefix

チェックポイント・ファイル名に追加される接頭辞の文字列値を指定します。次に例を示します。

goldengate.userexit.chkptprefix=javaue_

15.1.2.3 goldengate.userexit.nochkpt

ユーザー・イグジット・チェックポイント・ファイルを無効または有効にします。デフォルトは、falseで、チェックポイント・ファイルは有効です。トランザクションがサポートされ、ターゲットで有効な場合、このプロパティをtrueに設定します。

たとえば、Javaアプリケーション・プロパティで、JMSがターゲットであり、JMSローカル・トランザクションが有効(デフォルト)の場合、goldengate.userexit.nochkpt=trueを設定してユーザー・イグジット・チェックポイント・ファイルを無効にします。ハンドラでlocalTx=falseを設定し、JMSトランザクションが無効な場合、goldengate.userexit.nochkpt=falseを設定してユーザー・イグジット・チェックポイント・ファイルを有効にします。

goldengate.userexit.nochkpt={true|false}

15.1.2.4 goldengate.userexit.usetargetcols

ターゲット列へのマッピングが可能かどうかを指定します。デフォルトはfalseで、ターゲット・マッピングなしです。

goldengate.userexit.usetargetcols={true|false}

15.1.3 JVM起動オプション

次のオプションでは、Java Runtime Environmentを構成します。特に、JVMで使用される最大メモリーを指定できます。Javaのメモリー不足エラーになる場合、これらの設定を編集します。

15.1.3.1 jvm.bootoptions

ユーザー・イグジットでJVMを起動する場合に適用されるクラス・パスおよび起動オプションを指定します。パスには、UNIX/Linuxの場合コロン(:)、Windowsの場合セミコロン(;)の区切り文字が必要です。ここでは、ヒープ・サイズ、クラスパスなど、JVMに対する様々なオプションを指定します。

- -Xms: 初期Javaヒープ・サイズ

- -Xmx: 最大Javaヒープ・サイズ

- -Djava.class.path: 最低でもメイン・アプリケーションjarであるggjava.jarを指定するクラスパス。JMSプロバイダjarなどのその他のjarもここで指定できます。また、これらをJavaアプリケーション・プロパティ・ファイルで指定することもできます。

- -verbose:jni: 詳細モードで実行します(JNI用)

次に例を示します(すべて1行に記述します)。

jvm.bootoptions= -Djava.class.path=ggjava/ggjava.jar
-Dlog4j.configuration=my-log4j.properties -Xmx512m

log4j.configurationプロパティには、log4jプロパティ・ファイルの完全修飾URLを指定できます。デフォルトでは、このファイルはクラスパスで検索されます。独自のlog4j構成を使用することも、あらかじめ構成されたlog4j設定であるlog4j.properties(デフォルト・レベルのロギング)、debug-log4j.properties(デバッグ・ロギング)またはtrace-log4j.properties(非常に詳細なロギング)のいずれかを使用することもできます。

15.1.4 統計およびレポート

ユーザー・イグジットを使用すると、Extractは、イグジットによって処理されるレコードは無視されるとみなします。これによって、標準のOracle GoldenGateレポーティングは不完全になります。Java用Oracle GoldenGateでは、独自のレポートを追加し、この問題に対応します。

統計は、t秒ごとまたはnレコードごとに(両方が指定された場合、先に満たされた方の基準)、レポートされます。

ユーザー・イグジット共有ライブラリ(C側)によって保持されるレコードと、Javaライブラリから取得されるレコードの2セットの統計レコードがあります。Java側から受信されるレポートは、個々のハンドラによってフォーマットされ、返されます。

ユーザー・イグジット統計には、操作の総数、トランザクションとその速度が含まれます。

15.1.4.1 jvm.stats.display

統計のOracle GoldenGateレポート・ファイルおよびユーザー・イグジット・ログ・ファイルへの出力を制御します。

次の例では、これらの統計を出力します。

jvm.stats.display=true

15.1.4.2 jvm.stats.full

C側からの統計に加え、Java側からの統計の出力を制御します。

Java側の統計はより詳細ですが、オーバーヘッドも増えます。このため、統計のレポートの頻度が高い場合、詳細度の低いサマリーで十分です。stats.fullプロパティはfalseに設定することをお薦めします。

次の例では、C以外にJava統計を出力します。

jvm.stats.full=true

15.1.4.3 jvm.stats.time | jvm.stats.numrecs

統計がレポートされる間隔(秒)またはレコード数を指定します。デフォルトでは、毎時または10000レコードごと(いずれか先に起きた方)にレポートします。

たとえば、10分ごとまたは1000レコードごとにレポートするには、次のように指定します。

jvm.stats.time=600
jvm.stats.numrecs=1000

Javaアプリケーション統計は、ハンドラに依存します。

- すべてのハンドラについて、少なくとも総経過時間、処理時間、操作数、トランザクション数があります。

- JMSハンドラの場合、送受信されたバイト数合計もあります。

- レポートはテンプレートを使用してカスタマイズできます。

15.2 Javaアプリケーション・プロパティ

Javaアプリケーション・プロパティ・ファイルで設定できるプロパティを次に定義します。

15.2.1 すべてのハンドラ用のプロパティ

次のプロパティがすべてのハンドラに適用されます。

15.2.1.1 gg.handlerlist

ハンドラ・リストは、アクティブ・ハンドラのカンマ区切りのリストです。これらの値はプロパティ・ファイルの以降の部分で使用され、各ハンドラが構成されます。次に例を示します。

gg.handlerlist=name1, name2
gg.handler.name1.propertyA=value1
gg.handler.name1.propertyB=value2
gg.handler.name1.propertyC=value3
gg.handler.name2.propertyA=value1
gg.handler.name2.propertyB=value2
gg.handler.name2.propertyC=value3

handlerlistプロパティを使用すると、完全に構成されたハンドラをプロパティ・ファイルに含めることができ、handlerlistから削除することで無効にすることができます。

15.2.1.2 gg.handler.name.type

このタイプのハンドラ。組込みハンドラ用にあらかじめ定義された値または完全修飾Javaクラス名です。構文は次のとおりです。

gg.handler.name.type={jms|jms_map|aq|singlefile|rollingfile|custom_java_class}

説明:

最後のハンドラ以外すべて、事前定義のハンドラです。

- jms - トランザクション、操作およびメタデータをフォーマットされたメッセージとしてJMSプロバイダに送信します。

- aq - トランザクション、操作およびメタデータをフォーマットされたメッセージとしてOracleアドバンスト・キューイング(AQ)に送信します。

- jms_map - JMSマップ・メッセージを送信します。

- singlefile - ディスク上の1つのファイルに書き込みますが、ファイルをロールしません。

- rollingfile - トランザクション、操作およびメタデータをディスク上のファイルに書き込み、特定のサイズ、時間、またはその両方を超えると、ファイルをロールオーバーします。次に例を示します。

gg.handler.name1.rolloverSize=5000000
gg.handler.name1.rolloverTime=1m

- custom_java_class - Java用Oracle GoldenGateのAbstractHandlerクラスを拡張する任意のクラス。トランザクション、操作、メタデータ・イベントを処理できます。

15.2.2 フォーマットされた出力用のプロパティ

次のプロパティは、フォーマットされた出力を生成できるすべてのハンドラに適用されます。これには、次のようなものがあります。

- jms_text handlerハンドラ(jms_map handlerハンドラではない)

- aqハンドラ

- フォーマットされた出力をファイルに書き込むsinglefileおよびrollingハンドラ

15.2.2.1 gg.handler.name.format

操作およびトランザクションをJMSまたはファイルに送信するメッセージに変換するために使用される形式を指定します。形式はハンドラごとに一意に指定されます。値は次のとおりです。

- Velocityテンプレート

- Javaクラス名(完全修飾。指定されるクラスはフォーマッタのタイプである必要があります)

- 区切られた値の場合のcsv(カンマ区切り値など。デリミタはカスタマイズできます)

- 固定長フィールドの場合のfixed

- 次のような組込みフォーマッタ

- xml - デモXML形式(この形式は今後のリリースで変更される可能性があります)

- xml2 - 内部XML形式(この形式は今後のリリースで変更される可能性があります)

たとえば、カスタムJavaクラスを指定するには、次のようにします。

gg.handlerlist=abc
gg.handler.abc.format=com.mycompany.MyFormat

Velocityテンプレートの場合、次のようにします。

gg.handlerlist=xyz
gg.handler.xyz.format=path/to/sample.vm

テンプレートを使用する場合、クラスパス内のディレクトリまたはjarを基準にファイルが検索されます。デフォルトでは、Oracle GoldenGateインストール・ディレクトリがクラスパス内にあるため、前述のテンプレートは、Oracle GoldenGateのインストール場所のdirprmディレクトリに配置できます。

デフォルトの形式は、組込みXMLフォーマッタを使用することです。

15.2.2.2 gg.handler.name.includeTables

このハンドラによって含められる表のリストを指定します。

表のスキーマ(または所有者)が指定される場合、そのスキーマのみが表名に一致します。それ以外の場合、表名は任意のスキーマに一致します。表のカンマ区切りのリストを指定できます。たとえば、ハンドラに表foo.customerおよびbar.ordersのみを処理させるには、次のようにします。

gg.handler.myhandler.includeTables=foo.customer, bar.orders

表のカタログおよびスキーマ(または所有者)が指定される場合、そのスキーマのみが表名に一致します。それ以外の場合、表名は任意のカタログおよびスキーマに一致します。表のカンマ区切りのリストを指定できます。たとえば、ハンドラに表dbo.foo.customerおよびdbo.bar.ordersのみを処理させるには、次のようにします。

gg.handler.myhandler.includeTables=dbo.foo.customer, dbo.bar.orders

注意:
表単位で表での操作を選択的に処理するには、ハンドラは操作モードで処理している必要があります。ハンドラがトランザクション・モードで処理しており、1つのトランザクションに複数の表にまたがる複数の操作が含まれている場合、いずれかの表が表のリストに一致すれば、トランザクションは含められます。

15.2.2.3 gg.handler.name.excludeTables

このハンドラによって除外される表のリストを指定します。

表のスキーマ(または所有者)が指定される場合、そのスキーマのみが表名に一致します。それ以外の場合、表名は任意のスキーマに一致します。表のリストはカンマ区切りで指定されます。たとえば、すべてのスキーマの表date_modified以外のすべての表に対するすべての操作をハンドラが処理するには、次のようにします。

gg.handler.myhandler.excludeTables=date_modified

表のカタログおよびスキーマ(または所有者)が指定される場合、そのスキーマのみが表名に一致します。それ以外の場合、表名は任意のカタログおよびスキーマに一致します。表のリストはカンマ区切りで指定されます。たとえば、カタログdboおよびスキーマbarの表date_modified以外のすべての表に対するすべての操作をハンドラが処理するには、次のようにします。

gg.handler.myhandler.excludeTables=dbo.bar.date_modified

15.2.2.4 gg.handler.name.mode、gg.handler.name.format.mode

1メッセージ当たり1つの操作を出力する(op)か、1メッセージ当たり1つのトランザクションを出力する(tx)か指定します。デフォルトは、opです。カスタム・フォーマッタの場合、gg.handler.name.format.modeを使用します。

注意:
グループ・トランザクション・プロパティを使用する場合、このプロパティを1メッセージ当たり1トランザクション(tx)に設定する必要があります。1メッセージ当たり1操作(op)に設定した場合、gg.handler.name.minGroupSizeおよびgg.handler.name.maxGroupSizeは無視されます。

15.2.3 CSVおよび固定形式の出力用プロパティ

ハンドラがCSVまたはfixed形式の出力を使用するよう設定されている場合、次のプロパティも設定されます。

15.2.3.1 gg.handler.name.format.delim

フィールド間に使用するデリミタを指定します。これに値を設定しない場合、デリミタは使用されません。次に例を示します。

gg.handler.handler1.format.delim=,

15.2.3.2 gg.handler.name.format.quote

列値が引用符付きの場合、使用する引用文字を指定します。次に例を示します。

gg.handler.handler1.format.quote='

15.2.3.3 gg.handler.name.format.metacols

レコードの先頭、すべての列データの前に出現するメタデータ列値を指定します。次のものを出現順に指定します。

- position - 証跡内のレコードの一意の位置インジケータ

- opcode - レコードの挿入、更新または削除を表すI、UまたはD(「insertChar」、「updateChar」、「deleteChar」を参照)

- txind - 0=先頭、1=中間、2=末尾、3=トランザクション全体などのトランザクション・インジケータ(「beginTxChar」、「middleTxChar」、「endTxChar」、「wholeTxChar」を参照)

- opcount - 0から始まるトランザクション内のレコードの位置

- catalog – レコードのスキーマのカタログ

- schema - レコードの表のスキーマ/所有者

- tableonly - 表のみ(スキーマ/所有者なし)

- table – 表の完全名、catalog.schema.table

- timestamp - レコードのコミット・タイムスタンプ

次に例を示します。

gg.handler.handler1.format.metacols=opcode, table, txind, position

15.2.3.4 gg.handler.name.format.missingColumnChar

ソース・データベース・トランザクション・ログから取得されなかった列値に対する特別な列接頭辞を指定します。列値は証跡になく、値があるか、NULLかは不明です。

列値の欠落状態を表すために使用される文字はカスタマイズできます。次に例を示します。

gg.handler.handler1.format.missingColumnChar=M

デフォルトでは、欠落している列値には空の文字列が設定され、表示されません。

15.2.3.5 gg.handler.name.format.presentColumnChar

証跡にあり、NULLではない列値に対する特別な列接頭辞を指定します。

列の状態を表すために使用される文字はカスタマイズできます。次に例を示します。

gg.handler.handler1.format.presentColumnChar=P

デフォルトでは、存在している列値には空の文字列が設定され、表示されません。

15.2.3.6 gg.handler.name.format.nullColumnChar

証跡にあり、NULLに設定されている列値に対する特別な列接頭辞を指定します。

列の状態を表すために使用される文字はカスタマイズできます。次に例を示します。

gg.handler.handler1.format.nullColumnChar=N

デフォルトでは、nullの列値には空の文字列が設定され、表示されません。

15.2.3.7 gg.handler.name.format.beginTxChar

レコードをトランザクションの先頭と識別するために使用されるヘッダー・メタデータ文字(「metacols」を参照)を指定します。次に例を示します。

gg.handler.handler1.format.beginTxChar=B

15.2.3.8 gg.handler.name.format.middleTxChar

レコードをトランザクションの中間と識別するために使用されるヘッダー・メタデータ文字(「metacols」を参照)を指定します。次に例を示します。

gg.handler.handler1.format.middleTxChar=M

15.2.3.9 gg.handler.name.format.endTxChar

レコードをトランザクションの末尾と識別するために使用されるヘッダー・メタデータ文字(「metacols」を参照)を指定します。次に例を示します。

gg.handler.handler1.format.endTxChar=E

15.2.3.10 gg.handler.name.format.wholeTxChar

レコードを完全なトランザクション(トランザクション全体と呼ばれる)と識別するために使用されるヘッダー・メタデータ文字(「metacols」を参照)を指定します。次に例を示します。

gg.handler.handler1.format.wholeTxChar=W

15.2.3.11 gg.handler.name.format.insertChar

挿入操作を識別する文字を指定します。デフォルトは、Iです。

たとえば、挿入操作の場合、IのかわりにINSを使用するには、次のようにします。

gg.handler.handler1.format.insertChar=INS

15.2.3.12 gg.handler.name.format.updateChar

更新操作を識別する文字を指定します。デフォルトは、Uです。

たとえば、更新操作の場合、UのかわりにUPDを使用するには、次のようにします。

gg.handler.handler1.format.updateChar=UPD

15.2.3.13 gg.handler.name.format.deleteChar

削除操作を識別する文字を指定します。デフォルトは、Dです。

たとえば、削除操作の場合、DのかわりにDELを使用するには、次のようにします。

gg.handler.handler1.format.deleteChar=DEL

15.2.3.14 gg.handler.name.format.endOfLine

行末文字を指定します。

- EOL - ネイティブ・プラットフォーム

- CR - ニュートラル(UNIXスタイル\n)

- CRLF - Windows (\r\n)

次に例を示します。

gg.handler.handler1.format.endOfLine=CR

15.2.3.15 gg.handler.name.format.justify

固定フィールドを左詰めにするか、右詰めにするかを指定します。次に例を示します。

gg.handler.handler1.format.justify=left

15.2.3.16 gg.handler.name.format.includeBefores

ビフォア・イメージを出力に含めるかどうかを制御します。証跡にビフォア・イメージがある必要があります。次に例を示します。

gg.handler.handler1.format.includeBefores=false

15.2.4 ファイル・ライター・プロパティ

次のプロパティは、出力をファイルに書き込むハンドラ(fileハンドラおよびsinglefileハンドラ)にのみ適用されます。

15.2.4.1 gg.handler.name.file

指定されたハンドラの出力ファイルの名前を指定します。ハンドラがローリング・ファイルの場合、この名前は、ロールされたファイルの名前の導出に使用されます。デフォルトのファイル名は、output.xmlです。

15.2.4.2 gg.handler.name.append

ファイルが追加(true)されるか、再起動時に上書き(false)されるかを制御します。

15.2.4.3 gg.handler.name.rolloverSize

ファイル・ハンドラを使用する場合、ロールオーバーが試行されるファイルのサイズを指定します。ファイル・サイズは最低このサイズですが、ほとんどの場合、これより大きいです。操作およびトランザクションはファイル間で分割されません。サイズはバイト数で指定されますが、接尾辞を指定してMBまたはKBを識別できます。次に例を示します。

gg.handler.myfile.rolloverSize=5MB

デフォルトのロールオーバー・サイズは、10MBです。

15.2.5 JMSハンドラ・プロパティ

次のプロパティがJMSハンドラに適用されます。これらの値のいくつかは、ハンドラの名前を使用してJavaアプリケーション・プロパティ・ファイルで定義できます。他のプロパティは、個別のJMSプロパティ・ファイルに含めることができますが、これは、一度に複数のJMSハンドラを使用する場合、有用です。次に例を示します。

gg.handler.myjms.type=jms_text
gg.handler.myjms.format=xml
gg.handler.myjms.properties=weblogic.properties

Velocityテンプレートおよびフォーマット・プロパティ・ファイル同様、この追加JMSプロパティ・ファイルはクラスパスで検索されます。dirprmディレクトリはデフォルトでクラスパスに含まれているため、前述のプロパティ・ファイルweblogic.propertiesは、{gg_install_dir}/dirprm/weblogic.propertiesにあります。

Javaアプリケーション・プロパティ・ファイルの設定は、追加のJMSプロパティ・ファイル(前述の例のweblogic.properties)で設定された対応する値をオーバーライドします。次の例では、宛先プロパティがJavaアプリケーション・プロパティ・ファイルで指定されています。これは、2つのハンドラmyjms1およびmyjms2に同じデフォルト接続情報を使用しますが、ターゲット宛先キューをカスタマイズします。

gg.handlerlist=myjms1,myjms2
gg.handler.myjms1.type=jms_text
gg.handler.myjms1.destination=queue.sampleA
gg.handler.myjms1.format=sample.vm
gg.handler.myjms1.properties=tibco-default.properties
gg.handler.myjms2.type=jms_map
gg.handler.myjms2.destination=queue.sampleB
gg.handler.myjms2.properties=tibco-default.properties

プロパティを設定するには、次のようにハンドラ名を接頭辞として指定します。

gg.handlerlist=sample
gg.handler.sample.type=jms_text
gg.handler.sample.format=my_template.vm
gg.handler.sample.destination=gg.myqueue
gg.handler.sample.queueortopic=queue
gg.handler.sample.connectionUrl=tcp://host:61616?jms.useAsyncSend=true
gg.handler.sample.useJndi=false
gg.handler.sample.connectionFactory=ConnectionFactory
gg.handler.sample.connectionFactoryClass=\
org.apache.activemq.ActiveMQConnectionFactory
gg.handler.sample.timeToLive=50000

15.2.5.1 標準JMS設定

次に、設定可能なJMSプロパティと許容される値について簡単に説明します。これらは、jms_text (TextMessage)およびjms_map (MapMessage)の両方のJMSハンドラ・タイプに適用されます。

15.2.5.1.1 gg.handler.name.destination

メッセージが送信されるキューまたはトピック。これは、JMSサーバーで適切に構成される必要があります。一般的な値は、queue/A、queue.Test、example.MyTopicなどです。

gg.handler.name.destination=queue_or_topic

15.2.5.1.2 gg.handler.name.user

(オプション)JMSサーバーへのメッセージの送信に必要なユーザー名。

gg.handler.name.user=user_name

15.2.5.1.3 gg.handler.name.password

(オプション)JMSサーバーへのメッセージの送信に必要なパスワード

gg.handler.name.password=password

15.2.5.1.4 gg.handler.name.queueOrTopic

ハンドラがキューに送信する(単一受信者)か、トピックに送信する(パブリッシュ/サブスクライブ)か。これは、JMSプロバイダで適切に構成される必要があります。このプロパティは、gg.handler.name.destinationの別名です。構文は次のとおりです。

gg.handler.name.queueOrTopic={queue|topic}

説明:

- queue - メッセージは読み取られると、削除されます。これはデフォルトです。

- topic - メッセージはパブリッシュされ、複数のサブスクライバに配信されます。

15.2.5.1.5 gg.handler.name.persistent

配信モードが永続に設定されているかどうか。メッセージが永続の場合、クライアントの送信操作の一環としてメッセージを安定的なストレージに記録するようJMSプロバイダを構成する必要があります。構文は次のとおりです。

gg.handler.name.persistent={true|false}

15.2.5.1.6 gg.handler.name.priority

JMSで、0を最低、9を最高とする10段階の優先度の値が定義されます。デフォルトでは優先度は4に設定されます。構文は次のとおりです。

gg.handler.name.priority=integer

次に例を示します。

gg.handler.name.priority=5

15.2.5.1.7 gg.handler.name.timeToLive

生成されたメッセージがメッセージ・システムによって保持される時間のディスパッチ時間からの長さ(ミリ秒)。値0は、時間が無制限であることを指定します。デフォルトは、0です。構文は次のとおりです。

gg.handler.name.timeToLive=milliseconds

次に例を示します。

gg.handler.name.timeToLive= 36000

15.2.5.1.8 gg.handler.name.connectionFactory

JNDIを介して検索する接続ファクトリの名前。ConnectionFactoryJNDINameは別名です。構文は次のとおりです。

gg.handler.name.connectionFactory=JNDI_name

15.2.5.1.9 gg.handler.name.useJndi

gg.handler.name.usejndiがfalseの場合、JNDIはJMSクライアントの構成に使用されません。かわりに、ファクトリおよび接続が明示的に構築されます。構文は次のとおりです。

gg.handler.name.useJndi={true|false}

15.2.5.1.10 gg.handler.name.connectionUrl

JNDIを使用しない場合にのみ接続URLを使用して明示的に接続を作成します。構文は次のとおりです。

gg.handler.name.connectionUrl=url

15.2.5.1.11 gg.handler.name.connectionFactoryClass

JNDIを使用しない場合にのみ接続ファクトリ・クラスを使用してファクトリにアクセスします。このプロパティの値は、ファクトリ・オブジェクトを明示的にインスタンス化および構築するJavaクラス名です。

gg.handler.name.connectionFactoryClass=java_class_name

15.2.5.1.12 gg.handler.name.localTX

ローカル・トランザクションを使用するかどうかを指定します。デフォルトはtrueで、ローカル・トランザクションが使用されます。構文は次のとおりです。

gg.handler.name.localTX={true|false}

15.2.5.1.13 gg.handlerlist.nop

JMSメッセージの送信を無効にし、メッセージ生成のテストをできるようにします。これは、テスト目的でのみ使用されるグローバル・プロパティです。イベントは従前どおり生成されて処理され、メッセージが構築されます。デフォルトはfalseで、メッセージの送信を無効にしません。構文は次のとおりです。

gg.handlerlist.nop={true|false}

15.2.5.1.14 gg.handler.name.physicalDestination

JNDIプロバイダではなくConnectionFactory APIから取得した、キューまたはトピック・オブジェクトの名前。

gg.handler.name.physicalDestination=queue_name

15.2.5.2 グループ・トランザクション・プロパティ

これらのプロパティは、トランザクションのグループ化に限度を設定します。

注意:
グループ・トランザクション・プロパティを使用する場合、次のようにする必要があります。

- gg.handler.name.modeが1メッセージ当たり1トランザクション(tx)に設定されていることを確認します。そうではない場合、グループ・トランザクション・プロパティは無視されます。

- goldengate.userexit.nochkptプロパティがfalseに設定されていることを確認します。

- 操作のトランザクション・インジケータを無視し、トランザクション境界の決定に使用しません。

- インストールごとに名前付きハンドラを1つのみ使用します。

15.2.5.2.1 gg.handler.name.minGroupSize

トランザクションが送信されるまでに累積される操作の最小数を指定します。

構文は次のとおりです。

gg.handler.name.minGroupSize=number_ops

説明:

- number_opsは、トランザクションが送信されるまでに累積される操作の最小数を指定します。

最大許容値は、integer.MAX.VALUEまたは2147483647です。最小値は1です。

両方のプロパティを使用する場合、gg.handler.name.minGroupSizeに設定する値は、gg.handler.name.maxGroupSizeに設定する値以下である必要があります。

次の例では、送信までの最小操作数が50の場合をテストします。

gg.handler.name.minGroupSize=50

15.2.5.2.2 gg.handler.name.maxGroupSize

トランザクションの送信がトリガーされる操作の最大数を指定します。

構文は次のとおりです。

gg.handler.name.maxGroupSize=number_ops

説明:

- number_opsは、トランザクションが送信されるまでに累積される操作の最大数を指定します。

最大許容値は、integer.MAX.VALUEまたは2147483647です。最小値は1です。

両方のプロパティを使用する場合、gg.handler.name.minGroupSizeに設定する値は、gg.handler.name.maxGroupSizeに設定する値以下である必要があります。

次の例では、最大50個の操作に達すると送信されます。

gg.handler.name.maxGroupSize=50

15.2.6 JNDIプロパティ

これらのJNDIプロパティは、接続ファクトリと初期宛先を検索するための初期コンテキストへの接続に必要です。

java.naming.provider.url=url
java.naming.factory.initial=java-class-name

JNDIセキュリティが有効な場合、次のプロパティを設定できます。

java.naming.security.principal=user-name
java.naming.security.credentials=password-or-other-authenticator

次に例を示します。

java.naming.provider.url= t3://localhost:7001
java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
java.naming.security.principal=jndiuser
java.naming.security.credentials=jndipw

15.2.7 一般プロパティ

次のプロパティは、ユーザー・イグジットJavaフレームワーク用に使用される一般プロパティです。

15.2.7.1 gg.classpath

クラスパスに追加するディレクトリまたはjarの追加パスのカンマ区切りのリストを指定します。オプションで、Windowsシステムの場合はセミコロン、UNIXの場合はコロンでリストを区切ることができます。次に例を示します。

gg.classpath=C:\Program Files\MyProgram\bin;C:\Program Files\ProgramB\app\bin;

15.2.7.2 gg.report.time

統計を計算してExtractに送信し、レポートを処理する頻度を指定します。Extractがレポートを出力するよう構成されている場合、これらの統計が含められます。構文は次のとおりです。

gg.report.time=report_interval{s|m|h}

説明:

- report_intervalは整数です。

- 有効な時間単位は、次のとおりです。

- s - 秒

- m - 分

- h - 時間

値が入力されない場合、デフォルトは24時間ごとの計算および送信です。

16 カスタム・フィルタ、フォーマッタおよびハンドラの開発

この章では、イベント・フィルタ、組込みハンドラ用のカスタム・フォーマッタまたはカスタム・イベント・ハンドラを実装するJavaコードの記述について説明します。Velocityテンプレートを介したカスタム形式の指定についても取り上げます。

この章の内容は次のとおりです。

- イベントのフィルタリング

- カスタム・フォーマット

- Javaでのカスタム・ハンドラのコーディング

- 追加リソース

16.1 イベントのフィルタリング

デフォルトでは、すべてのトランザクション、操作およびメタデータ・イベントがDataSourceListenerイベント・ハンドラに渡されます。イベント・フィルタを実装して、ハンドラに送信するイベントをフィルタできます。たとえば、フィルタで、特定の列値を含む特定の表に対する特定の操作を選択できます。

フィルタは相加的です。複数のフィルタがハンドラに設定されている場合、イベントがハンドラに渡されるには、すべてのフィルタがtrueを返す必要があります。

フィルタは、Javaアプリケーション・プロパティ・ファイルを使用して構成できます。

# handler "foo" only receives certain events
gg.handler.one.type=jms
gg.handler.one.format=mytemplate.vm
gg.handler.one.filter=com.mycompany.MyFilter

フィルタをアクティブにするには、フィルタを記述し、ハンドラに設定します。追加のロジックを特定のハンドラに追加する必要はありません。

16.2 カスタム・フォーマット

次のようにして、組込みハンドラの出力フォーマットをカスタマイズできます。

- Javaでのカスタム・フォーマッタの記述。または

- Velocityテンプレートの使用

16.2.1 Javaでのカスタム・フォーマッタのコーディング

これより前の例で、同じフォーマッタ(com.mycompany.MyFormatter)を使用するJMSハンドラとファイル出力ハンドラを示しています。次の例は、このフォーマッタの実装方法の例です。

例16-1 カスタム・フォーマットの実装

package com.mycompany.MyFormatter;
import com.goldengate.atg.datasource.DsOperation;
import com.goldengate.atg.datasource.DsTransaction;
import com.goldengate.atg.datasource.format.DsFormatterAdapter;
import com.goldengate.atg.datasource.meta.ColumnMetaData;
import com.goldengate.atg.datasource.meta.DsMetaData;
import com.goldengate.atg.datasource.meta.TableMetaData;
import java.io.PrintWriter;
public class MyFormatter extends DsFormatterAdapter {

public MyFormatter() { }
@Override
public void formatTx(DsTransaction tx,

DsMetaData meta,
PrintWriter out)

{

out.print("Transaction: " );
out.print("numOps=\'" + tx.getSize() + "\' " );
out.println("ts=\'" + tx.getStartTxTimeAsString() + "\'");
for(DsOperation op: tx.getOperations()) {
TableName currTable = op.getTableName();
TableMetaData tMeta = dbMeta.getTableMetaData(currTable);
String opType = op.getOperationType().toString();
String table = tMeta.getTableName().getFullName();
out.println(opType + " on table \"" + table + "\":" );
int colNum = 0;
for(DsColumn col: op.getColumns())
{

ColumnMetaData cMeta = tMeta.getColumnMetaData( colNum++ );
out.println(
cMeta.getColumnName() + " = " + col.getAfterValue() );
}

}
@Override
public void formatOp(DsTransaction tx,

DsOperation op,
TableMetaData tMeta,
PrintWriter out)

{

// not used...

}

}

フォーマッタは、トランザクション全体のフォーマット(コミット後)、または各操作のフォーマット(受信後、コミット前)の方法を定義します。フォーマッタが操作モードの場合、formatOp(...)がコールされます。そうではない場合、トランザクション・コミット時にformatTx(...)がコールされます。

このカスタム・フォーマッタをコンパイルして使用するには、Java用Oracle GoldenGate jarをクラスパスに含め、コンパイルした.classファイルをgg_install_dir/dirprmに配置します。

javac -d gg_install_dir/dirprm
-classpath ggjava/ggjava.jar MyFormatter.java

結果のクラス・ファイルは、resources/classesに(正しいパッケージ構造で)配置されます。

gg_install_dir/dirprm/com/mycompany/MyFormatter.class

あるいは、カスタム・クラスをjarに含めることもできます。この場合、jarファイルをユーザー・イグジット・プロパティを介してJVMクラスパスに含める(jvm.bootoptionsプロパティでjava.class.pathを使用)か、Javaアプリケーション・プロパティ・ファイルを設定してカスタムjarを含めます。

# set properties on 'one'
gg.handler.one.type=file
gg.handler.one.format=com.mycompany.MyFormatter
gg.handler.one.file=output.xml
gg.classpath=/path/to/my.jar,/path/to/directory/of/jars/*

16.2.2 Velocityテンプレートの使用

Velocityテンプレートは、カスタム・フォーマット用のJavaコードを記述するかわりの方法として、フォーマッタのプロトタイプを簡単に作成するよい代替方法です。たとえば、次のテンプレートをJMSまたはファイル・ハンドラの形式として指定します。

Transaction: numOps='$tx.size' ts='$tx.timestamp'
#for each( $op in $tx )
operation: $op.sqlType, on table "$op.tableName":
#for each( $col in $op )
$op.tableName, $col.meta.columnName = $col.value
#end
#end

テンプレートの名前がsample.vmとすると、次のようにクラスパスに配置します。

gg_install_dir/dirprm/sample.vm

注意:
Velocityテンプレートを使用する場合、ファイル名は接尾辞.vmで終わる必要があります。そうでない場合、フォーマッタはJavaクラスとみなされます。

テンプレートを使用するようJavaアプリケーション・プロパティ・ファイルを更新します。

# set properties on 'one'
gg.handler.one.type=file
gg.handler.one.format=sample.vm
gg.handler.one.file=output.xml

テンプレートを変更する場合、Javaソースを再コンパイルする必要はありません。テンプレートを保存してJavaアプリケーションを再実行するのみです。アプリケーションを実行すると、次の出力が生成されます(表の名前はSCHEMA.SOMETABLEで、列はTESTCOLAおよびTESTCOLBとします)。

Transaction: numOps='3' ts='2008-12-31 12:34:56.000'
operation: UPDATE, on table "SCHEMA.SOMETABLE":
SCHEMA.SOMETABLE, TESTCOLA = value 123
SCHEMA.SOMETABLE, TESTCOLB = value abc
operation: UPDATE, on table "SCHEMA.SOMETABLE":
SCHEMA.SOMETABLE, TESTCOLA = value 456
SCHEMA.SOMETABLE, TESTCOLB = value def
operation: UPDATE, on table "SCHEMA.SOMETABLE":
SCHEMA.SOMETABLE, TESTCOLA = value 789
SCHEMA.SOMETABLE, TESTCOLB = value ghi

16.3 Javaでのカスタム・ハンドラのコーディング

カスタム・ハンドラは、AbstractHandlerを拡張して実装できます。

import com.goldengate.atg.datasource.*;
import static com.goldengate.atg.datasource.GGDataSource.Status;
public class SampleHandler extends AbstractHandler {
@Override
public void init(DsConfiguration conf, DsMetaData metaData) {
super.init(conf, metaData);
// ... do additional config...
}
@Override
public Status operationAdded(DsEvent e, DsTransaction tx, DsOperation op) { ... }
@Override
public Status transactionCommit(DsEvent e, DsTransaction tx) { ... }
@Override
public Status metaDataChanged(DsEvent e, DsMetaData meta) { .... }
@Override
public void destroy() { /* ... do cleanup ... */ }
@Override
public String reportStatus() { return "status report..."; }
}

トランザクションがExtractから処理される際、ハンドラへのコール順序は次のようになります。

1. 初期化:

- まず、ハンドラが構築されます。

- 次に、インスタンスでプロパティ・ファイルの値を使用してすべてのセッターがコールされます。

- 最後に、ハンドラが初期化されます。トランザクションを受信する前にinit(...)メソッドがコールされます。init(...)メソッドでsuper.init(...)をコールして基底クラスを適切に初期化することが重要です。

2. メタデータが受信されます。ユーザー・イグジットが、この実行時にまだ出現していない表での操作を処理する場合、メタデータ・イベントが発行され、metadataChanged(...)メソッドがコールされます。通常は、このメソッドを実装する必要はありません。DsMetaDataは、新規データ・ソース・メタデータが受信されると自動的に更新されます。

3. トランザクションが開始されます。トランザクション・イベントが発行され、ハンドラでtransactionBegin(...)メソッドが起動されます(記載していません)。この時点ではトランザクションに操作がないため、これは通常使用されません。

4. 操作が順次トランザクションに追加されます。これによって、各操作の追加のたびにハンドラでoperationAdded(...)メソッドがコールされます。データ・ソース・メタデータ(この時点までに出現したすべての表メタデータを含む)とともに、これを含むトランザクションもメソッドに渡されます。トランザクションはまだコミットされておらず、コミットが受信される前に異常終了される可能性があることに注意してください。
各操作にはトランザクションの列値が含まれます(Extractが圧縮更新を処理する場合、変更された値のみの可能性があります)。列値には、ビフォア値とアフター値の両方が含まれることがあります。

5. トランザクションがコミットされます。これによって、transactionCommit(...)メソッドがコールされます。

6. 定期的にreportStatusがコールされます。プロセスの停止時にもコールされます。通常、これによって処理の統計が表示されます(操作数/処理されたトランザクション、など)。

単純なプリンタ・ハンドラの完全な例を次に示します。トランザクション、操作およびメタデータの非常に基本的なイベント情報を単に出力するだけです。ハンドラには、出力ファイル名を設定するためのプロパティmyoutputもあります。これは、Javaアプリケーション・プロパティ・ファイルで次のように設定できます。

gg.handlerlist=sample
# set properties on 'sample'
gg.handler.sample.type=sample.SampleHandler
gg.handler.sample.myoutput=out.txt

カスタム・ハンドラを使用するには、次のようにします。

1. クラスをコンパイルします。

2. クラスをアプリケーション・クラスパスに含めます。

3. Javaアプリケーション・プロパティ・ファイルのアクティブ・ハンドラのリストにハンドラを追加します。

ハンドラをコンパイルするには、Java用Oracle GoldenGate jarをクラスパスに含め、コンパイルした.classファイルをgg_install_dir/javaue/resources/classesに配置します。

javac -d gg_install_dir/dirprm
-classpath ggjava/ggjava.jar SampleHandler.java

結果のクラス・ファイルは、次のようにresources/classesに(正しいパッケージ構造で)配置されます。

gg_install_dir/dirprm/sample/SampleHandler.class

注意:
サンプル"hello world"以外のJavaアプリケーションの開発では、AntまたはMavenを使用してアプリケーションをコンパイル、テストおよびパッケージ化します。javacを示した例は、例示目的のみです。

あるいは、カスタム・クラスをjarに含め、クラスパスに含めることができます。カスタムjarファイルをユーザー・イグジット・プロパティを介してJVMクラスパスに含める(jvm.bootoptionsプロパティでjava.class.pathを使用)か、Javaアプリケーション・プロパティ・ファイルを設定してカスタムjarを含めます。

# set properties on 'one'
gg.handler.one.type=sample.SampleHandler
gg.handler.one.myoutput=out.txt
gg.classpath=/path/to/my.jar,/path/to/directory/of/jars/*

任意のハンドラで、追加の個別jar、ディレクトリ(リソースまたはjarになっていないクラス・ファイルを含む)またはjarのディレクトリ全体を含めるようクラスパス・プロパティを設定できます。jarのディレクトリ全体を含めるには、Java 6形式の構文を使用します。

c:/path/to/directory/* (or on Unix: /path/to/directory/* )

ワイルドカード*のみ指定できます。ファイル・パターンは使用できません。これは、.jar接尾辞で終わるディレクトリ内のすべてのファイルに自動的に一致します。複数のjarまたは複数のディレクトリを含めるには、システム固有のパス区切り文字(UNIXではコロン、Windowsではセミコロン)を使用するか、前述のようにプラットフォームに依存しないカンマを使用します。

ハンドラに多数のプロパティを設定する必要がある場合、パラメータ・ファイルにプロパティを含めるだけで、ハンドラの対応するセッターがコールされます。次に例を示します。

gg.handler.one.type=com.mycompany.MyHandler
gg.handler.one.myOutput=out.txt
gg.handler.one.myCustomProperty=12345

前述の例では、カスタム・ハンドラ内の次のメソッドが起動されます。

public void setMyOutput(String s) {

// use the string...

} public void setMyCustomProperty(int j) {

// use the int...

}

int、long、String、booleanなどの標準のJava型を使用できます。カスタム型の場合、カスタム・プロパティ・エディタを作成してStringをカスタム型に変換できます。

16.4 追加リソース

Java APIにはJavadocが用意されています。Javadocは、カスタマイズおよび拡張に有用なインタフェースおよびクラスのみを配布するために、コア・パッケージ、クラスおよびインタフェースのセットに意図的に縮小されています。

各パッケージでは、わかりやすくするために一部のクラスが意図的に省略されています。重要なクラスは次のとおりです。

- com.goldengate.atg.datasource.DsTransaction: データベース・トランザクションを表します。トランザクションには、0個以上の操作が含まれます。

- com.goldengate.atg.datasource.DsOperation: データベース操作(挿入、更新、削除)を表します。操作には、データ変更イベントを表す0個以上の列値が含まれます。列索引は、Java APIで0でオフセットされます。

- com.goldengate.atg.datasource.DsColumn: 列値を表します。列値は、ビフォア値とアフター値のコンポジットです。列値は存在する(値があるかnull)場合も欠落している(ソース証跡に含まれていない)場合もあります。

- com.goldengate.atg.datasource.DsColumnCompositeは、コンポジットです。

- com.goldengate.atg.datasource.DsColumnBeforeValueは、操作前の列値です(これはオプションで、操作に含まれていない場合があります)。

- com.goldengate.atg.datasource.DsColumnAfterValueは、操作後の値です。

- com.goldengate.atg.datasource.meta.DsMetaData: 出現するすべてのデータベース・メタデータを表します。オブジェクトは最初空です。DsMetaDataには、TableNameをキーとして使用するTableMetaDataの0個以上のインスタンスのハッシュ・マップが含まれます。

- com.goldengate.atg.datasource.meta.TableMetaData: 1つの表のすべてのメタデータを表します。0個以上のColumnMetaDataを含みます。

- com.goldengate.atg.datasource.meta.ColumnMetaData: データベースまたはOracle GoldenGateソース定義ファイルに定義されている列名およびデータ型を含みます。

詳細は、Javadocを参照してください。

第V部

Oracle GoldenGateアダプタのトラブルシューティング

この部には、Oracle GoldenGateアダプタの問題のトラブルシューティングに関する情報が含まれています。

第I部には、次の章があります。

- 第17章「フラット・ファイル・アダプタのトラブルシューティング」

- 第18章「Javaアダプタのトラブルシューティング」

17 フラット・ファイル・アダプタのトラブルシューティング

この章では、Oracle GoldenGateフラット・ファイル用アダプタの問題を解決する手順を概説します。実行するエラー・チェックをリストします。問題を特定できない場合、サポート・チケットを送信するか、Oracleサポートに連絡してください。

この章の内容は次のとおりです。

- Oracle GoldenGateの確認

- 構成の確認

- ログ・ファイルの確認

- Oracleサポートへの連絡

17.1 Oracle GoldenGateの確認

フラット・ファイル用Oracle GoldenGateに関連する特定の問題について確認する前に、Oracle GoldenGateが正しく構成され、標準的なOracle GoldenGateエラーが解決されていることを確認します。詳細は、Oracle GoldenGateトラブルシューティングおよびパフォーマンス・チューニング・ガイドを参照してください。

17.2 構成の確認

次の点を確認します。

- Extractパラメータ・ファイル内の共有ライブラリ(.soまたは.dll)は正しいですか。パスで指定され、アクセス可能ですか。

- Extractパラメータ・ファイルで正しいSOURCEDEFSファイルが指定されていますか。指定されたパスにあり、アクセス可能ですか。

- SOURCEDEFSファイルにすべての必要な表が含まれていますか。

- ffwriter.propertiesユーザー・イグジット・プロパティ・ファイルはOracle GoldenGateインストール・ディレクトリにありますか。また、GG_USEREXIT_PROPFILE環境変数で正しい名前とパスが指定されていますか。

- ユーザー・イグジット・プロパティ・ファイルで指定された出力ディレクトリは存在しますか。

- ファイル権限はそのディレクトリへの書込みに適していますか。

17.3 ログ・ファイルの確認

ログ・ファイル(logname_yyyymmdd.log)を確認します。デフォルトでは、このファイルはdirrptサブディレクトリにあります。

- ユーザー・イグジット・プロパティ・ファイルは正常に解析されますか。無効なプロパティについてログ・ファイルに記載がありますか。

- その他のエラーまたは警告がログにありますか。

17.4 Oracleサポートへの連絡

問題がまだ解決されない場合、次のようにします。

- log.level=DEBUGを設定します

- 再起動し、ログ・ファイルを保存します。

Oracleサポートに連絡する前に、ログ・ファイル、ソース証跡ファイル、ソース定義ファイル、ユーザー・イグジット・プロパティ・ファイルおよびExtractパラメータ・ファイルを、書き込まれたデータ・ファイルとともに送信する準備をしてください。

18 Javaアダプタのトラブルシューティング

この章では、Oracle GoldenGate Java用アダプタの問題を解決する手順を概説します。実行するエラー・チェックをリストします。問題を特定できない場合、サポート・チケットを送信するか、Oracleサポートに連絡してください。

この章の内容は次のとおりです。

- エラーの確認

- 異常終了後のリカバリ

- 問題のレポート

18.1 エラーの確認

Java用Oracle GoldenGateの操作時発生する可能性のあるエラーには2つのタイプがあります。

- ユーザー・イグジットまたはVAMを実行するExtractプロセスが起動しないか、異常終了します。

- プロセスは正常に稼働しますが、データが正しくないか、存在しません。

Extractプロセスが起動しないか異常終了する場合、処理の最初から最後まで順にエラー・メッセージを確認します。

1. Oracle GoldenGateイベント・ログでエラーを確認し、Extractレポート・ファイルを表示します。

GGSCI> VIEW GGSEVT
GGSCI> VIEW REPORT {extract name}

2. 該当するログ・ファイルを確認します。
ユーザー・イグジットの場合:

- ユーザー・イグジット・ライブラリのログ・ファイルにレポートされている最後のメッセージを確認します。ファイル名は、プロパティ・ファイルで設定されたログ・ファイル接頭辞(log.logname)と現在の日付です。

shell> more {log.logname}_{yyyymmdd}.log

注意:
これは、Javaアプリケーションのログ・ファイルではなく、共有ライブラリのみのログ・ファイルです。

3. ユーザー・イグジットまたはVAMがJavaランタイムを起動できなかった場合、log4jログ・ファイルが存在します。
ログ・ファイルの名前はlog4j.propertiesファイルに定義されています。デフォルトでは、ログ・ファイル名はggjava-version-log4j.logで、versionは使用されるjarファイルのバージョン番号です。次に例を示します。

shell> more ggjava-*log4j.log

Javaアプリケーションのロギングの詳細レベルを設定するには、次のいずれかを行います。

- より詳細なレベルで記録するよう現在のlog4jプロパティ・ファイルを編集します。

- プロパティ・ファイルを編集して既存のlog4j構成の1つを再利用します。

jvm.bootoptions=-Djava.class.path=ggjava/ggjava.jar
-Dlog4j.configuration=debug-log4j.properties –Xmx512m

あらかじめ構成されたこれらのlog4jプロパティ・ファイルはクラスパスで検出され、次の場所にインストールされています。

./ggjava/resources/classes/*log4j.properties

4. これらのログ・ファイルで問題の原因が明らかにならない場合、Extractプロセスをシェルから直接(GGSCI外で)実行し、stderrおよびstdoutをより簡単に監視でき、環境変数を確認できるようにします。次に例を示します。

shell> EXTRACT PARAMFILE dirprm/javaue.prm

プロセスは正常に実行されるが、データが正しくないか、存在しない場合、ユーザー・イグジット用に記述したカスタム・フィルタ、フォーマッタまたはハンドラにエラーがないか確認します。

ユーザー・イグジットExtractを証跡の先頭から再起動するには、「証跡の先頭でのアプリケーションの再起動」を参照してください。

18.2 異常終了後のリカバリ

ExtractパラメータRECOVERYOPTIONSは、リリース10以降の証跡ではAPPENDMODEがデフォルトです。追加モードでは、Extractは異常終了時、証跡にリカバリ・マーカーを書き込みます。Extractが再起動され、リカバリ・マーカーを検出すると、ローカル・トランザクションが有効な場合、不完全なトランザクションのロールバックをリクエストします。ローカル・トランザクションが無効な場合、警告メッセージが発行されます。プロパティgg.handler.{name}.localTXが明示的にfalseに設定されていないかぎり、ローカル・トランザクションは有効です。

18.3 問題のレポート

Oracle GoldenGateのサポート・アカウントがある場合、サポート・チケットを送信してください。次のものを含めてください。

- オペレーティング・システムとJavaのバージョン
Java Runtime Environmentのバージョンは、次のようにすると表示できます。

$ java -version

- 構成ファイル:

- ユーザー・イグジットを実行するExtractのパラメータ・ファイル

- JMSまたはJNDIプロパティ・ファイルを含む、使用されるすべてのプロパティ・ファイル

- ユーザー・イグジットのVelocityテンプレート

- ログ・ファイル:
Oracle GoldenGateのインストール・ディレクトリ内のすべての.logファイル(Java log4jログ・ファイルおよびユーザー・イグジットまたはVAMのログ・ファイル)。

第VI部

付録

付録には、Oracle GoldenGateアダプタの特定の使用方法に関する情報を示し、インストールで使用可能なサンプルをリストします。

第VI部には、次の付録があります。

- アダプタの例

A アダプタの例

この付録では、Oracle GoldenGateアダプタ・インストールに含まれているサンプルをリストし、一部のユースケースのサンプルについて説明します。

この付録の内容は次のとおりです。

- 含まれているサンプルのリスト

- ロギングの構成

A.1 含まれているサンプルのリスト

次のサンプルは、インストール場所のAdaptersExamplesサブディレクトリにあります。

フラット・ファイル・ライター

- Oracle GoldenGateフラット・ファイル・アダプタを使用して、Oracle GoldenGate証跡データをテキスト・ファイルに変換します。

メッセージ配信

- Oracle GoldenGate Javaアダプタを使用し、カスタム・メッセージ形式を使用してJMSメッセージを送信します。

- Oracle GoldenGate Javaアダプタを使用し、カスタム・メッセージ・ヘッダー・プロパティを使用してJMSメッセージを送信します。

メッセージ取得

- Oracle GoldenGate Javaアダプタを使用して、JMSメッセージを処理し、Oracle GoldenGate証跡を作成します。

Javaユーザー・イグジットAPI

- Oracle GoldenGate JavaアダプタAPIを使用して、カスタム・イベント・ハンドラを記述します。

A.2 ロギングの構成

この例では、11.2.1以上のOracle GoldenGateアダプタのユーザー・イグジットに対するロギングの構成方法について説明します。最初の項では、ロギングのデフォルトをトリガーする一般的なExtractポンプを構成します。2番目の項では、ロギングの実装のカスタマイズ方法について説明します。

A.2.1 Oracle GoldenGate Javaユーザー・イグジット・デフォルトの例

次のOracle GoldenGate Javaユーザー・イグジットExtractの構成例では、ロギングのデフォルトをトリガーします。

Extractパラメータ・ファイル

EXTRACT jms1
SOURCEDEFS dirdef/aa.def
CUSEREXIT libggjava_ue.so CUSEREXIT PASSTHRU INCLUDEUPDATEBEFORES
GETUPDATEBEFORES
TABLE GG.*;

プロパティ・ファイル

関連付けられているプロパティ・ファイルにはExtractグループに由来する名前jms1.propertiesが付けられます。JNIプロパティにはデフォルト値があり、すべてのプロパティを指定する必要はないため、これがプロパティ・ファイルのすべてです。

gg.handlerlist=my_jms

gg.handler.my_jms.type=jms
gg.handler.my_jms.destination=dynamicQueues/testQ1
gg.handler.my_jms.format=xml2
gg.handler.my_jms.mode=op
gg.handler.my_jms.connectionFactory=ConnectionFactory

gg.java.naming.provider.url=tcp://localhost:61616
gg.java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory

gg.classpath=/opt/activemq/activemq-all.jar

結果のログ・ファイル

次のようにしてGGSCIでExtractを追加して起動すると、ログ・ファイルが作成されます。

ggsci> ADD EXTRACT jms1, EXTRAILSOURCE dirdat/aa
ggsci> START MGR
ggsci> START EXTRACT jms1

ログ・ファイルは、レポート・ファイルと同じディレクトリに書き込まれます。Extractグループに由来する名前が付けられます。次に例を示します。

$ ls -l dirrpt/
total 48
-rw-rw-rw- 1 1685   Apr 16 20:38   MGR.rpt
-rw-rw-rw- 1 1685   Apr 16 20:38   jms1.rpt
-rw-rw-rw- 1 21705  Apr 19 13:59   jms1_info_0.log.0
-rw-rw-rw- 1 0      Apr 19 13:58   jms1_info_0.log.0.lck

A.2.2 ロギングのカスタマイズ

この例では、2つの方法のいずれかを使用した、11.2.1以上のOracle GoldenGateユーザー・イグジット・アダプタに対するロギングのカスタマイズ方法について説明します。

- Javaアダプタ・ユーザー・イグジット・プロパティの使用

gg.log={ jdk | logback | log4j }
gg.log.level={ info | debug | trace }
gg.log.classpath={ classpath for logging }

ログ実装プロパティgg.logが設定されていない場合、jdkオプションがデフォルトです。これは、java.util.logging (JUL)が使用されることを指定します。ログ・レベルのデフォルトは、infoです。これをカスタマイズするには、gg.logを次のいずれかに設定します。

- log4j - これによって、Log4jおよび適切なslf4j-log4jバインドが含まれるようクラスパスが自動的に構成されます。

- logback - logbackオプションを使用するには、logback jarを手動でダウンロードし、インストール・ディレクトリにコピーする必要があります。あらかじめ定義された場所にjarがコピーされている場合は従前どおり、クラス・パスが自動的に構成されます。詳細は、ggjava/resources/lib/optional/logback/ReadMe-logback.txtを参照してください。

- JVMオプションの使用
デフォルトのロギングを使用したり、ロギング・プロパティを設定するかわりに、jvm.bootoptionsを使用してロギングを定義できます。これを行うには、次のいずれかを実行して、構成ファイルを定義するシステム・プロパティを含むようjvm.bootoptionsを設定します。

- log4j構成ファイルを指定します。

jvm.bootoptions=-Dlog4j.configuration=my-log4j.properties

これによって、ロギング実装のタイプであるgg.logが暗黙的にlog4jに設定され、slf4j-log4j12バインドがクラスパスに追加されます。

- java.util.loggingプロパティ・ファイルまたはクラスを指定します。

jvm.bootoptions=-Djava.util.logging.config.file=my-logging.properties

これによってgg.log=jdkが暗黙的に設定され、java.util.logging (JUL)が指定されます。slf4j-jdk14バインドがクラスパスに追加されます。

- まず、logback-core-jarおよびlogback-classic-jarをダウンロードし、ggjava/resources/lib/optional/logbackにコピーします。次に、logback構成ファイルを指定します。

jvm.bootoptions=-Dlogback.configuationFile=my-logback.xml

これによって、gg.log=logbackが暗黙的に設定され、logback-classicおよびlogback-coreがクラスパスに追加されます。

これらはgg.logおよびgg.log.classpathの暗黙的な設定で、プロパティ・ファイルでこれらのいずれかのプロパティを明示的に設定することでオーバーライドされます。特定のjarを含むようJVMクラスパスを設定することでも、ロギング・クラスパスはオーバーライドされます。

jvm.bootoptions=...-Djava.class.path=mypath/my1.jar:mypath2/my2.jar...

注意:
特定のjarを含むようJVMクラスパスを設定すると、クラスパスでの実装が重複または矛盾する可能性があります。

オラクル社の法律上の注意点について

コピーライトについて

Copyright © 1994-2015, Oracle and/or its affiliates.All rights reserved.

商標と登録商標について

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

制限付権利

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション（人的傷害を発生させる可能性があるアプリケーションを含む）への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性（redundancy）、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

ドラフトのアルファ版およびベータ版ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。オラクル社およびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。