Oracle® Fusion Middleware

Oracle GoldenGate for Big Dataの管理

リリース12c (12.2.0.1)

E72566-02(原本部品番号:E69081-02)

2016年5月

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

Oracle Fusion Middleware Oracle GoldenGate for Big Dataの管理, リリース12c (12.2.0.1)

E72566-02

Copyright © 2015, 2016, 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の登録商標です。

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

目次

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

はじめに

- 対象読者

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

- 関連ドキュメント

- 表記規則

第I部 Oracle GoldenGate for Big Dataの理解

1 JavaアダプタとOracle GoldenGate for Big Dataの理解

- 1.1 概要

- 1.1.1 Oracle GoldenGateの機能

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

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

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

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

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

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

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

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

- 1.3 Oracle GoldenGateのドキュメント

2 Javaアダプタの概要

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

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

- 2.1.2 一般的な構成

- 2.2 Oracle GoldenGate Java配信

- 2.2.1 配信構成オプション

3 ロギングの構成

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

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

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

- 3.1.2.1 問題のログ出力

- 3.1.2.2 ログ・ファイル名

- 3.2 推奨されるロギング設定

- 3.2.1 推奨されるロギング・タイプへの変更

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

4 メッセージ取得の構成

- 4.1 VAM Extractの構成

- 4.1.1 Extractの追加

- 4.1.2 Extractパラメータの構成

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

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

- 4.2.1 JMSへの接続

- 4.2.2 メッセージの取得

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

5 メッセージの解析

- 5.1 解析の概要

- 5.1.1 パーサー・タイプ

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

- 5.1.3 必須データ

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

- 5.1.3.2 シーケンス識別子

- 5.1.3.3 タイムスタンプ

- 5.1.3.4 表名

- 5.1.3.5 操作タイプ

- 5.1.3.6 列データ

- 5.1.4 オプション・データ

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

- 5.1.4.2 トランザクション名

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

- 5.2 固定幅解析

- 5.2.1 ヘッダー

- 5.2.1.1 複合表名の指定

- 5.2.1.2 タイムスタンプ形式の指定

- 5.2.1.3 関数の指定

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

- 5.2.3 キー識別子

- 5.2.4 ソース定義ファイルの使用

- 5.3 区切り解析

- 5.3.1 メタデータ列

- 5.3.2 解析プロパティ

- 5.3.2.1 デリミタを表すプロパティ

- 5.3.2.2 値を表すプロパティ

- 5.3.2.3 日時を表すプロパティ

- 5.3.3 解析手順

- 5.4 XML解析

- 5.4.1 XMLのスタイル

- 5.4.2 XML解析ルール

- 5.4.3 XPath式

- 5.4.3.1 サポートされるコンストラクト:

- 5.4.3.2 サポートされる式

- 5.4.3.3 データ値の取得

- 5.4.4 他の値式

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

- 5.4.6 操作ルール

- 5.4.7 列ルール

- 5.4.8 ルール全体の例

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

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

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

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

- 6.1.1.1 gg.log

- 6.1.1.2 gg.log.level

- 6.1.1.3 gg.log.file

- 6.1.1.4 gg.log.classpath

- 6.1.2 JMS接続プロパティ

- 6.1.2.1 jvm.boot options

- 6.1.2.2 jms.report.output

- 6.1.2.3 jms.report.time

- 6.1.2.4 jms.report.records

- 6.1.2.5 jms.id

- 6.1.2.6 jms.destination

- 6.1.2.7 jms.connectionFactory

- 6.1.2.8 jms.user、jms.password

- 6.1.3 JNDIのプロパティ

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

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

- 6.2.1.1 parser.type

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

- 6.2.2.1 fixed.schematype

- 6.2.2.2 fixed.sourcedefs

- 6.2.2.3 fixed.copybook

- 6.2.2.4 fixed.header

- 6.2.2.5 fixed.seqid

- 6.2.2.6 fixed.timestamp

- 6.2.2.7 fixed.timestamp.format

- 6.2.2.8 fixed.txid

- 6.2.2.9 fixed.txowner

- 6.2.2.10 fixed.txname

- 6.2.2.11 fixed.optype

- 6.2.2.12 fixed.optype.insertval

- 6.2.2.13 fixed.optype.updateval

- 6.2.2.14 fixed.optype.deleteval

- 6.2.2.15 fixed.table

- 6.2.2.16 fixed.schema

- 6.2.2.17 fixed.txind

- 6.2.2.18 fixed.txind.beginval

- 6.2.2.19 fixed.txind.middleval

- 6.2.2.20 fixed.txind.endval

- 6.2.2.21 fixed.txind.wholeval

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

- 6.2.3.1 delim.sourcedefs

- 6.2.3.2 delim.header

- 6.2.3.3 delim.seqid

- 6.2.3.4 delim.timestamp

- 6.2.3.5 delim.timestamp.format

- 6.2.3.6 delim.txid

- 6.2.3.7 delim.txowner

- 6.2.3.8 delim.txname

- 6.2.3.9 delim.optype

- 6.2.3.10 delim.optype.insertval

- 6.2.3.11 delim.optype.updateval

- 6.2.3.12 delim.optype.deleteval

- 6.2.3.13 delim.schemaandtable

- 6.2.3.14 delim.schema

- 6.2.3.15 delim.table

- 6.2.3.16 delim.txind

- 6.2.3.17 delim.txind.beginval

- 6.2.3.18 delim.txind.middleval

- 6.2.3.19 delim.txind.endval

- 6.2.3.20 delim.txind.wholeval

- 6.2.3.21 delim.fielddelim

- 6.2.3.22 delim.linedelim

- 6.2.3.23 delim.quote

- 6.2.3.24 delim.nullindicator

- 6.2.3.25 delim.fielddelim.escaped

- 6.2.3.26 delim.linedelim.escaped

- 6.2.3.27 delim.quote.escaped

- 6.2.3.28 delim.nullindicator.escaped

- 6.2.3.29 delim.hasbefores

- 6.2.3.30 delim.hasnames

- 6.2.3.31 delim.afterfirst

- 6.2.3.32 delim.isgrouped

- 6.2.3.33 delim.dateformat | delim.dateformat.table | delim.dateform.table.column

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

- 6.2.4.1 xml.sourcedefs

- 6.2.4.2 xml.rules

- 6.2.4.3 rulename.type

- 6.2.4.4 rulename.match

- 6.2.4.5 rulename.subrules

- 6.2.4.6 txrule.timestamp

- 6.2.4.7 txrule.timestamp.format

- 6.2.4.8 txrule.seqid

- 6.2.4.9 txrule.txid

- 6.2.4.10 txrule.txowner

- 6.2.4.11 txrule.txname

- 6.2.4.12 oprule.timestamp

- 6.2.4.13 oprule.timestamp.format

- 6.2.4.14 oprule.seqid

- 6.2.4.15 oprule.txid

- 6.2.4.16 oprule.txowner

- 6.2.4.17 oprule.txname

- 6.2.4.18 oprule.schemandtable

- 6.2.4.19 oprule.schema

- 6.2.4.20 oprule.table

- 6.2.4.21 oprule.optype

- 6.2.4.22 oprule.optype.insertval

- 6.2.4.23 oprule.optype.updateval

- 6.2.4.24 oprule.optype.deleteval

- 6.2.4.25 oprule.txind

- 6.2.4.26 oprule.txind.beginval

- 6.2.4.27 oprule.txind.middleval

- 6.2.4.28 oprule.txind.endval

- 6.2.4.29 oprule.txind.wholeval

- 6.2.4.30 colrule.name

- 6.2.4.31 colrule.index

- 6.2.4.32 colrule.value

- 6.2.4.33 colrule.isnull

- 6.2.4.34 colrule.ismissing

- 6.2.4.35 colrule.before.value

- 6.2.4.36 colrule.before.isnull

- 6.2.4.37 colrule.before.ismissing

- 6.2.4.38 colrule.after.value

- 6.2.4.39 colrule.after.isnull

- 6.2.4.40 colrule.after.ismissing

第III部 Oracle GoldenGate Java配信

7 Java配信の構成

- 7.1 プロパティ・ファイルでのJREの構成

- 7.2 Java配信のためのOracle GoldenGateの構成

- 7.2.1 Java配信のためのReplicatの構成

- 7.2.2 Java配信用のExtractプロセス(データ・ポンプ)の構成

- 7.3 Javaハンドラの構成

8 Java配信の実行

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

- 8.1.1 Replicatの使用の開始

- 8.1.2 Extractの使用の開始

- 8.2 Java配信の再起動

- 8.2.1 ReplicatでのJava配信の再起動

- 8.2.2 Extract (データ・ポンプ)でのJava配信の再起動

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

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

- 9.2 JMSハンドラ

- 9.3 ファイル・ハンドラ

- 9.4 カスタム・ハンドラ

- 9.5 出力のフォーマット

- 9.6 レポート

10 Java配信プロパティ

- 10.1 共通プロパティ

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

- 10.1.1.1 gg.log

- 10.1.1.2 gg.log.level

- 10.1.1.3 gg.log.file

- 10.1.1.4 gg.log.classpath

- 10.1.2 JVM Bootオプション

- 10.1.2.1 jvm.bootoptions

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

- 10.2.1 一般プロパティ

- 10.2.1.1 goldengate.userexit.writers

- 10.2.1.2 goldengate.userexit.chkptprefix

- 10.2.1.3 goldengate.userexit.nochkpt

- 10.2.1.4 goldengate.userexit.usetargetcols

- 10.2.2 統計およびレポート

- 10.2.2.1 jvm.stats.display

- 10.2.2.2 jvm.stats.full

- 10.2.2.3 jvm.stats.time | jvm.stats.numrecs

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

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

- 10.3.1.1 gg.handlerlist

- 10.3.1.2 gg.handler.name.type

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

- 10.3.2.1 gg.handler.name.format

- 10.3.2.2 gg.handler.name.includeTables

- 10.3.2.3 gg.handler.name.excludeTables

- 10.3.2.4 gg.handler.name.mode, gg.handler.name.format.mode

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

- 10.3.3.1 gg.handler.name.format.delim

- 10.3.3.2 gg.handler.name.format.quote

- 10.3.3.3 gg.handler.name.format.metacols

- 10.3.3.4 gg.handler.name.format.missingColumnChar

- 10.3.3.5 gg.handler.name.format.presentColumnChar

- 10.3.3.6 gg.handler.name.format.nullColumnChar

- 10.3.3.7 gg.handler.name.format.beginTxChar

- 10.3.3.8 gg.handler.name.format.middleTxChar

- 10.3.3.9 gg.handler.name.format.endTxChar

- 10.3.3.10 gg.handler.name.format.wholeTxChar

- 10.3.3.11 gg.handler.name.format.insertChar

- 10.3.3.12 gg.handler.name.format.updateChar

- 10.3.3.13 gg.handler.name.format.deleteChar

- 10.3.3.14 gg.handler.name.format.truncateChar

- 10.3.3.15 gg.handler.name.format.endOfLine

- 10.3.3.16 gg.handler.name.format.justify

- 10.3.3.17 gg.handler.name.format.includeBefores

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

- 10.3.4.1 gg.handler.name.file

- 10.3.4.2 gg.handler.name.append

- 10.3.4.3 gg.handler.name.rolloverSize

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

- 10.3.5.1 標準JMS設定

- 10.3.5.1.1 gg.handler.name.destination

- 10.3.5.1.2 gg.handler.name.user

- 10.3.5.1.3 gg.handler.name.password

- 10.3.5.1.4 gg.handler.name.queueOrTopic

- 10.3.5.1.5 gg.handler.name.persistent

- 10.3.5.1.6 gg.handler.name.priority

- 10.3.5.1.7 gg.handler.name.timeToLive

- 10.3.5.1.8 gg.handler.name.connectionFactory

- 10.3.5.1.9 gg.handler.name.useJndi

- 10.3.5.1.10 gg.handler.name.connectionUrl

- 10.3.5.1.11 gg.handler.name.connectionFactoryClass

- 10.3.5.1.12 gg.handler.name.localTX

- 10.3.5.1.13 gg.handlerlist.nop

- 10.3.5.1.14 gg.handler.name.physicalDestination

- 10.3.5.2 グループ・トランザクション・プロパティ

- 10.3.6 JNDIのプロパティ

- 10.3.7 一般プロパティ

- 10.3.7.1 gg.classpath

- 10.3.7.2 gg.report.time

- 10.3.7.3 gg.binaryencoding

- 10.3.8 Java配信のトランザクションのグループ化

- 10.3.8.1 gg.handler.name.minGroupSize

- 10.3.8.2 gg.handler.name.maxGroupSize

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

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

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

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

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

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

- 11.4 追加リソース

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

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

- 12.1 エラーの確認

- 12.2 データ・ポンプExtractでの異常終了後のリカバリ

- 12.3 問題のレポート

第V部 付録

A アダプタの例

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

- A.2 ロギングの構成

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

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

はじめに

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

対象読者

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

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

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 for Big Dataドキュメント・セットには、次のドキュメントが含まれます。

- Oracle GoldenGate for Big Dataリリース・ノート

- Oracle GoldenGate for Big Dataの統合

- Oracle GoldenGate Big Dataのインストール

- Oracle GoldenGate for Big Dataの管理

表記規則

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

表記規則

意味

太字

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

イタリック体

イタリック体

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

固定幅フォント

大文字の固定幅フォント

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

大文字

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

{ }

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

[ ]

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

第I部 Oracle GoldenGate for Big Dataの理解

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

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

- JavaアダプタとOracle GoldenGate for Big Dataの理解

- Javaアダプタの概要

1 JavaアダプタとOracle GoldenGate for Big Dataの理解

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

- 概要

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

- Oracle GoldenGateのドキュメント

1.1 概要

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

1.1.1 Oracle GoldenGateの機能

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

Oracle GoldenGate製品を使用すると、次のことが行えます。

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

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

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

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

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

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

Oracle GoldenGateアダプタ・アーキテクチャに基づく主要な製品は2つあります。

- Oracle GoldenGate Javaアダプタは全体的なフレームワークです。この製品では、カスタム・コードを実装し、特定の要件に従ってOracle GoldenGateの証跡レコードを処理できます。Oracle GoldenGate File Writerモジュールが組み込まれており、フラット・ファイルを統合する目的で使用できます。

- Oracle GoldenGate for Big Data。Oracle GoldenGate for Big Data製品には、操作データをOracle GoldenGateの証跡レコードから各種のビッグ・データ・ターゲット(HDFS、HBase、Kafka、Flume)に書き込むサポートも組み込まれています。ビッグ・データ・アプリケーションと統合するとき、カスタム・コードを記述する必要はありません。この機能は、サードパーティ・アプリケーションおよびフォーマッタと統合される複数のハンドラに分けられます。これらのハンドラは、データを様々な形式(Avro、JSON、区切りテキスト、XMLなど)に変換します。HBase APIの場合など、サードパーティ・ツールとの統合に所有権が設定されていることがあります。このような場合、フォーマッタには、関連付けられたハンドラはありません。

Oracle GoldenGate JavaアダプタとOracle GoldenGate for Big Data製品は、機能に重複する部分があります。次のリストでは、主な機能と、どの製品にその機能が含まれているかを示します。

- JMSメッセージを読み取り、Oracle GoldenGate証跡として配信します。この機能は、Oracle GoldenGateアダプタとOracle GoldenGate for Big Dataの両方の製品に含まれています。

- Oracle GoldenGate証跡を読み取り、トランザクションをJMSプロバイダ、他のメッセージング・システムまたはカスタム・アプリケーションに配信します。この機能は、Oracle GoldenGateアダプタとOracle GoldenGate for Big Dataの両方の製品に含まれています。

- Oracle GoldenGate証跡を読み取り、他のアプリケーションによって使用可能なファイルにトランザクションを書き込みます。この機能は、Oracle GoldenGateアダプタ製品にのみ含まれています。

- Oracle GoldenGateの証跡を読み取り、トランザクションをビッグ・データ・ターゲットに書き込みます。ビッグ・データ統合機能は、Oracle GoldenGate for Big Data製品にのみ含まれています。

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

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

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

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

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

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

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

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

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

- ビッグ・データ統合: トランザクション・データをソース証跡ファイルから各種のビッグ・データ・ターゲットに書き込む操作は、構成プロパティを設定することによって行います。Oracle GoldenGate for Big Data製品には、HDFS、HBase、KafkaおよびFlumeターゲットに書き込むためのビッグ・データ・ハンドラが組み込まれています。

4つのオプションはすべて、コアOracle GoldenGate製品の拡張として実装されています。

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

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

- ビッグ・データ統合のために、Oracle GoldenGateビッグ・データ・モジュールと統合されるようにOracle GoldenGate Replicatを構成できます。各種の形式でビッグ・データ・ターゲットに書き込む操作は、一連のプロパティを使用して構成でき、プログラミングの必要はありません。

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

Oracle GoldenGateユーザー・イグジットとそれに関連するJavaアダプタ、ビッグ・データ・ハンドラおよびフォーマッタは、あらかじめ定義されたプロパティを通じて構成します。これらのプロパティは、アダプタ・プロパティ・ファイルという別個のプロパティ・ファイルに格納されます。Oracle GoldenGateが機能するには、ExtractプロセスまたはReplicatプロセスの構成ファイルがdirprmディレクトリにあり、その構成ファイルが次の命名規則に従っている必要があります。

Extract or Replicat process name.prm

ベスト・プラクティスとして、アダプタ・プロパティ・ファイルもdirprmディレクトリにあり、そのアダプタ・プロパティ・ファイルが次のいずれかの命名規則に従っていることも必要です。

Extract or Replicat process name.props

または

Extract or Replicat process name.properties

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アプリケーションを合せたプロパティが格納されます。次の環境変数を介して設定されます。

アダプタ・プロパティ・ファイルの名前と場所は、Extractプロセスのプロパティ・ファイルまたはReplicatプロセスのプロパティ・ファイルにおける構成によって解決されます。

次の項では、Extractプロセス構成でアダプタ・プロパティ・ファイルの名前と場所を解決する方法について説明します。

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

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

次では、Replicatプロセスでアダプタ・プロパティ・ファイルの名前と場所を解決する方法について説明します。

TARGETDB LIBFILE libggjava.so SET property=dirprm/javaue.properties

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アダプタ製品と組み合せて使用するためのコアOracle GoldenGateソフトウェアのインストールおよび構成の詳細は、次のOracle GoldenGateのドキュメントを参照してください。

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

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

- : WindowsおよびUNIXプラットフォーム向けOracle GoldenGateのパラメータ、コマンドおよび関数の詳細が含まれます。

2 Javaアダプタの概要

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

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

- Oracle GoldenGate Java配信

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

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

Oracle GoldenGate JMSメッセージ取得を使用するには、Oracle GoldenGate Extractプロセスにアタッチされ、動的にリンクされた共有VAMライブラリが必要です。

結果としてExtractプロセスによって書き込まれる証跡定義ファイルが必要な場合には、Gendefという別のユーティリティを使用して、Oracle GoldenGateソース定義ファイルを作成できます。

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

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

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

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

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

2.1.2 一般的な構成

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

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

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

2.2 Oracle GoldenGate Java配信

Oracle GoldenGateによって取得されたトランザクション・データは、Oracle GoldenGate Java APIを介してリレーショナル・データベース以外のターゲット(JMS (Java Message Service)、ディスクに書き込まれたファイル、ビッグ・データ・アプリケーションへのデータのストリーミング、カスタム・アプリケーションのJava APIとの統合など)に配信できます。Oracle GoldenGate Java配信は、ExtractまたはReplicatプロセスと連携できます。ベスト・プラクティスとして、Oracle GoldenGate Replicatプロセスを使用してください。Oracle GoldenGate Java配信には依存関係としてJava 7が必要です。

Java用Oracle GoldenGateには、Oracle GoldenGate ReplicatプロセスからJavaコードを実行する機能があります。JavaのためのOracle GoldenGateを使用するには、次の条件が満たされている必要があります。

- C/C++で実装され、Oracle GoldenGate Replicatプロセスの拡張モジュールを統合している動的リンク・ライブラリまたは共有ライブラリ。

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

- Java 7がインストールされており、Oracle GoldenGate Java配信のプロセス(複数も可)をホストしているマシンでアクセスできる必要があります。Javaとその関連ライブラリを解決するには、環境変数が正しく設定されている必要があります。

以前のリリースのOracle GoldenGateアダプタに基づいて、既存のカスタム・ハンドラとの互換性を保つために、Java配信モジュールは、現在もOracle GoldenGate Extractおよびユーザー・イグジット・インタフェースの使用をサポートしています。

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

2.2.1 配信構成オプション

Java配信モジュールは、GoldenGate Replicatプロセスによってロードされ、これはReplicatパラメータ・ファイルを使用して構成できます。ロード時に、Java配信モジュールはアダプタ・プロパティ・ファイルに存在する構成に基づいて引き続き構成されます。アプリケーションの動作は、次のようにしてカスタマイズできます。

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

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

- debugレベルのロギングなどの有効化/無効化。

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

- レコードは、次の方法でカスタム・フォーマットにできます。

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

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

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

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

JMSを使用したメッセージの送信およびディスクへのファイルの書込み用に既存の実装(ハンドラ)があります。ビッグ・データ・ターゲットの場合には、HDFS、HBase、KafkaおよびFlumeに書き込むための統合ハンドラが組み込まれています。

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

3 ロギングの構成

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

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

- 推奨されるロギング設定

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

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

3.1.1 デフォルト実装タイプ

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

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

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

3.1.2.1 問題のログ出力

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

3.1.2.2 ログ・ファイル名

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

3.2 推奨されるロギング設定

Javaユーザー・イグジットの統一的なロギングには、JDKのデフォルトではなくlog4jロギングを使用することをお薦めします。log4jを使用すると、Oracle GoldenGate ReplicatまたはExtractプロセスで実行するとき、Javaユーザー・イグジットの統一的なロギングが可能です。

3.2.1 推奨されるロギング・タイプへの変更

推奨されるlog4jロギング実装を変更するには、次の例に示す構成をJavaアダプタ・プロパティ・ファイルに追加します。

gg.log=log4j
gg.log.level=info

gg.logのレベルは、none、error、warn、info、debugまたはtraceに設定できます。デフォルトのログ・レベルはinfoです。debugとtraceのログ・レベルが推奨されるのはトラブルシューティングの場合のみです。パフォーマンスに悪影響を及ぼす可能性があるためです。

その場合、Javaユーザー・イグジットのログ・ファイルは、次の命名規則に従ってdirrptディレクトリに作成されます。

<process name>_<log level>log4j.log

したがって、Oracle GoldenGate Replicatプロセスはjavaueと呼ばれ、gg.log.levelがdebugに設定されるため、ログ・ファイルの名前は次のようになります。

javaue_debug_log4j.log

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

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

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

- メッセージ取得の構成

- メッセージの解析

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

4 メッセージ取得の構成

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

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

- VAM Extractの構成

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

4.1 VAM Extractの構成

JMS取得は、Oracle GoldenGate Extractプロセスでのみ機能します。Javaメッセージ取得アプリケーションを実行するには、次のものが必要です。

- Java用Oracle GoldenGateアダプタ

- Extractプロセス

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

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

- Java 7がホスト・マシンにインストールされていること

4.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の再開では、常にメッセージ・キューの末尾からメッセージを読み取ります。

4.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が作成するターゲット証跡の識別子を指定します。

4.1.3 メッセージ取得の構成

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

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

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

4.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テキスト・メッセージのみサポートされます。

4.2.2 メッセージの取得

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

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

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

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

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

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

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

5 メッセージの解析

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

- 解析の概要

- 固定幅解析

- 区切り解析

- XML解析

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

5.1 解析の概要

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

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

- シーケンス識別子

- タイムスタンプ

- 表名

- 操作タイプ

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

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

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

- トランザクション名

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

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

5.1.1 パーサー・タイプ

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

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

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

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

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

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

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

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

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

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

5.1.3 必須データ

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

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

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

5.1.3.2 シーケンス識別子

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

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

5.1.3.3 タイムスタンプ

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

5.1.3.4 表名

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

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

5.1.3.5 Operation Type

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

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

- 挿入

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

- 更新

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

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

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

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

- 削除

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

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

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

5.1.3.6 列データ

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

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

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

5.1.4 オプション・データ

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

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

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

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

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

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

5.1.4.2 トランザクション名

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

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

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

5.2 固定幅解析

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

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

5.2.1 ヘッダー

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

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

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

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

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

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

例5-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という値になります。

5.2.1.1 複合表名の指定

複数のフィールドを表名に使用できます。たとえば、次のような静的プロパティを介して論理スキーマ名を定義できます。

fixed.schema=MYSCHEMA

コピーブック・ヘッダー定義から複数フィールドのデータ・レコードを定義するプロパティを追加できます。

例5-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

5.2.1.2 タイムスタンプ形式の指定

タイムスタンプは、デフォルトの形式YYYY-MM-DD HH:MM:SS.FFF(FFFはフィールドのサイズよって異なる)を使用して解析されます。

次の例に示すように日時フィールドの前にコメントを入力し、異なる受信形式を指定します。

例5-3 タイムスタンプ形式の指定

01  HEADER.
* DATEFORMAT YYYY-MM-DD-HH.MM.SS.FF
20  Hdr-Timestamp       PIC X(23)

5.2.1.3 関数の指定

プロパティを使用して、標準のOracle GoldenGate操作タイプをoptype値にマップします。次の例では、操作タイプはHdr-Source-DB-Functionフィールドにあることと、挿入の値はA、更新はU、削除はDであることを指定します。

例5-4 関数の指定

fixed.optype=Hdr-Source-DB-Function
fixed.optype.insert=A
fixed.optype.update=U
fixed.optype.delete=D

5.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)

この例で、入力YYMMDD日付の100522は、2010-05-22に翻訳されます。指定されたPIC 9(5)V99形式の数値1234567は、小数部が2桁の7桁の数値12345.67に翻訳されます。

5.2.3 キー識別子

コメントを使用して、データ・レコード内のキー列を識別します。ソース定義を生成するGendefユーティリティは、コメントを使用してキー列を特定します。

次の例では、AccountがTABLE1のキー列としてマークされています。

01 TABLE1
* KEY
20  Account      PIC X(19)
20  PAN_Seq_Num PIC 9(3)

5.2.4 ソース定義ファイルの使用

Oracle GoldenGateソース定義ファイルから取得されるデータ定義に基づいて、固定幅解析を使用できます。これは、COBOLコピーブックに類似しています。ソース定義ファイルには、参加している表の各フィールドの位置と長さが含まれているからです。ソース定義ファイルを使用するには、次のプロパティを設定する必要があります。

fixed.userdefs.tables=qasource.HEADER
fixed.userdefs.qasource.HEADER.columns=optype,schemaandtable
fixed.userdefs.qasource.HEADER.optype=vchar 3
fixed.userdefs.qasource.HEADER.schemaandtable=vchar 30

fixed.header=qasource.HEADER

次の例では、全長が33文字のヘッダー・セクションを定義しています。最初の3文字は操作タイプで、最後の30文字は表名です。解析されるすべてのレコードのレイアウトは、fixed.userdefsプロパティで定義されている完全なヘッダー・セクションで始まる必要があります。各レコードでは、ヘッダー・セクションの直後に、対応する表のすべての列データの内容が続きます。列データは、ソース定義ファイルで定義されているそのオフセットと長さに従って厳密にレイアウトする必要があります。具体的に言うと、オフセット情報は列定義の4番目のフィールド(Fetch Offset)であり、長さ情報は列定義の3番目のフィールド(External Length)です。GG.JMSCAP_TCUSTMERの定義の例を次に示します。

Definition for table GG.JMSCAP_TCUSTMER
Record length: 78
Syskey: 0
Columns: 4
CUST_CODE   64      4        0  0  0 1 0      4      4      0 0 0 0 0 1    0 1 0
NAME        64     30       10  0  0 1 0     30     30      0 0 0 0 0 1    0 0 0
CITY        64     20       46  0  0 1 0     20     20      0 0 0 0 0 1    0 0 0
STATE        0      2       72  0  0 1 0      2      2      0 0 0 0 0 1    0 0 0
End of definition

GG.JMSCAP_TCUSTMERの固定幅データは、次のようになります。ここでは、わかりやすくするためにオフセット・ガイドが各セクションに追加されています。

0         1         2         3  0         1         2         3         4         5         6         7         8
012345678901234567890123456789012012345678901234567890123456789012345678901234567890123456789012345678901234567890
I  GG.JMSCAP_TCUSTMER            WILL      BG SOFTWARE CO.                     SEATTLE                   WA
I  GG.JMSCAP_TCUSTMER            JANE      ROCKY FLYER INC.                    DENVER                    CO
I  GG.JMSCAP_TCUSTMER            DAVE      DAVE'S PLANES INC.                  TALLAHASSEE               FL
I  GG.JMSCAP_TCUSTMER            BILL      BILL'S USED CARS                    DENVER                    CO
I  GG.JMSCAP_TCUSTMER            ANN       ANN'S BOATS                         SEATTLE                   WA
U  GG.JMSCAP_TCUSTMER            ANN       ANN'S BOATS                         NEW YORK                  NY

より短いデータ・レコードを指定できます。つまり、前の一部の列のみが存在することになります。これを行うには、次の要件が満たされている必要があります。

- 欠落した列または省略された列がキーの一部になっていない

- それぞれのExternal Lengthの情報に応じて、存在するすべての列に完全なデータが含まれる

5.3 区切り解析

区切り解析は、既存のソース定義ファイルとプロパティのセットに基づきます。プロパティで、使用するデリミタ、および列名とビフォア値があるかどうかなどの他のルールが指定されます。ソース定義ファイルによって、処理される有効な表、および表内の列の順序とデータ型が決まります。

区切りメッセージの形式は次のとおりです。

METACOLSn[,COLNAMES]m[,COLBEFOREVALS]m,{COLVALUES}m\n

説明:

- メタデータ列はn個含めることができ、各メタデータ列の後に形式文に示すカンマなどのフィールド・デリミタが続きます。

- 列値はm個含めることができます。各々、カンマなどのフィールド・デリミタがその前に付きます。

- 列名とビフォア値はオプションです。

- 各レコードは、\nなどの行末デリミタで終わります。

渡されるメッセージには、少なくともヘッダーとメタデータ列が含まれている必要があります。列の数が、ヘッダーおよびメタデータの列の数より少ない場合には、取得プロセスが終了し、エラー・メッセージが生成されます。

ヘッダーおよびメタデータ列より後の残りの列は、対応する表の列データで、解決されるメタデータの列の順序で指定されます。メッセージに存在する表の列の数は、メタデータに従って想定される列の数と完全に一致しているのが理想的です。ただし、メッセージの終わりのほうでメッセージの列が不足していても構わず、パーサーはこの最後のほうの列(メッセージの残りには存在しない)を列データの欠落としてマークします。

データの欠落は、パーサーでは許可されますが、キー@列が不足している場合は、取得プロセスが終了します。

Oracle GoldenGateの主キーの更新および統一更新は、サポートされていません。サポートされている操作は、挿入、更新、削除、切捨てのみです。

5.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は、トランザクションのシーケンス番号に使用されます。

5.3.2 解析プロパティ

デリミタ、値および日時の形式を表すプロパティを設定できます。

5.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として処理されます。

5.3.2.2 値を表すプロパティ

次のプロパティで詳細情報が提供されます。

- hasbeforesは、各レコードにビフォア値が存在することを示します。

- hasnamesは、各レコードに列名が存在することを示します。

- afterfirstは、列のアフター値がビフォア値の前に来ることを示します。

- isgroupedは、すべての列名、ビフォア値およびアフター値が列ごとに順にではなく、3つのブロックにまとめられることを示します。

5.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

5.3.3 解析手順

区切り解析の手順は次のとおりです。

1. パーサーはまず各レコードのメタデータ列を読み取り、確認します。

2. これによって表名が取得され、これを使用してソース定義ファイル内の表の列定義が検索されます。

3. 表の定義が見つからない場合、処理は停止します。

4. それ以外の場合、列が解析され、ソース定義に定義されている順序と形式で証跡に出力されます。

5.4 XML解析

XML解析は、既存のソース定義ファイルとプロパティのセットに基づきます。プロパティによって、トランザクション、操作および列に対応するXML要素および属性を決定するルールが指定されます。ソース定義ファイルによって、処理される有効な表、およびそれらの表内の列の順序とデータ型が決まります。

5.4.1 XMLのスタイル

XMLメッセージは動的または静的なXMLにフォーマットされます。実行時、動的XMLのコンテンツは、サンプルXMLまたはXSDドキュメントを使用してあらかじめ決定できないデータ値です。表および列の要素または属性名を決定する静的XMLのコンテンツは、それらのサンプル・ドキュメントを使用してあらかじめ決定できます。

次の2つの例には同じデータが含まれています。

例5-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をマップすることです。

例5-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>

各表に対する各操作は、トランザクション、操作および列の各要素で構成される同じ基本的メッセージ構造を持ちます。表名、操作タイプ、タイムスタンプ、列名、列値などは属性または要素テキスト値から取得されます。

5.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

5.4.3 XPath式

XMLパーサーでは、要素およびExtractデータの照合に必要なXPath式のサブセットがサポートされます。式は、特定の要素の照合またはExtractデータに使用されます。

データ抽出の際、パスの大部分が照合に使用されます。式の末尾が抽出に使用されます。

5.4.3.1 サポートされるコンストラクト:

サポートされるコンストラクト

説明

/e

ドキュメントのルートからの絶対パスを使用してeを照合します。

./e or e

処理対象の現在のノードからの相対パスを使用してeを照合します。

../e

現在のノードの親に基づいたパスを使用して(繰返し可能)eを照合します。

//e

ドキュメント内の任意の場所にあるeに一致します。

*

任意の要素に一致します。注意: 部分的にワイルドカードが使用された名前はサポートされません。

[n]

式のn番目の出現に一致します。

[x=v]

xが値vに等しい場合、一致します。ここで、xは次のいずれかです。

- @att - 属性値

- text() - テキスト値

- name() - 名前の値

- position() - 要素の位置

5.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']

5.4.3.3 データ値の取得

パスの照合以外に、XPath式は、データ値の取得にも使用できます(絶対または処理対象の現在のノードとの相対)。データ値の式には前の表のパス要素を含めることができますが、後述のいずれかの値アクセッサで終わる必要があります。

値アクセッサ

説明

@att

属性値。

text()

要素のテキスト・コンテンツ(値)。

content()

任意の子XMLノードを含む、要素のフル・コンテンツ。

name()

要素の名前。

position()

親内の要素の位置。

例5-7 データ値の抽出の例

相対要素テキスト値を抽出する場合:

/My/Element/text()

絶対属性値を抽出する場合:

/My/Element/@att

照合を使用して要素テキスト値を抽出する場合:

/My/Some[@att = 'value']/Sub/text()

注意:

ancestor、descendent、selfなどのパス・アクセッサはサポートされません。

5.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"

5.4.5 トランザクション・ルール

トランザクションの境界を指定するルールが最上位です。メッセージには、1つのトランザクション、複数のトランザクションまたは複数メッセージにわたるトランザクションの一部を含めることができます。これらは次のように指定されます。

- single - トランザクション・ルール照合は定義されません。

- multiple - 各トランザクション・ルール照合は新規トランザクションを定義します。

- span - トランザクション・ルールは定義されません。かわりに、トランザクション・インジケータが操作ルールに指定されます。

トランザクション・ルールの場合、XPathまたは他の式を介して次のルールのプロパティも定義できます。

- timestamp - トランザクションが発生した時間。

- txid - トランザクションの識別子。

トランザクション・ルールは複数のsubrulesを持つことができますが、各サブルールは操作タイプのルールである必要があります。

次の例では、メッセージ全体であるトランザクションを指定し、JMSプロパティから取得されるタイムスタンプを含めます。

例5-8 JMSタイムスタンプ

singletxrule.timestamp=$JMSTimeStamp

次の例はルート要素トランザクションに一致し、ts属性からタイムスタンプを取得します。

例5-9 tsタイムスタンプ

dyntxrule.match=/Transaction
dyntxrule.timestamp=@ts

5.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要素から操作情報を動的に取得します。

例5-10 操作

dynoprule.match=./Operation
dynoprule.schemaandtable=@table
dynoprule.optype=@type

次の例は、/NewMyTableEntry要素をMY.TABLE表に対する挿入操作に静的に対応付けます。

例5-11 操作例

statoprule.match=./NewMyTableEntry
statoprule.schemaandtable="MY.TABLE"
statoprule.optype="I"
statoprule.timestamp=./CreateTime/text()

5.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要素から列情報を動的に取得します。

例5-12 列情報の動的抽出

dyncolrule.match=./Column
dyncolrule.name=@name
dyncolrule.before.value=./beforevalue/text()
dyncolrule.after.value=./aftervalue/text()

次の例は、/KeyColおよび/Col1要素をMY.TABLEの列に静的に対応付けます。

例5-13 要素の列との静的対応

statkeycolrule.match=/KeyCol
statkeycolrule.name="keycol"
statkeycolrule.value=./text()
statcol1rule.match=/Col1
statcol1rule.name="col1"
statcol1rule.value=./text()

5.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

INSERT INTO MY.TABLE (KEYCOL, COL1)
VALUES ('keyval', 'col1val')

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

デフォルトでは、JMS取得プロセスは生成される証跡ファイルにメタデータ情報を書き込むので、証跡ファイルのコンシューマは、外部定義ファイルを利用しなくても、証跡レコードの構造を理解することができます。

証跡機能のメタデータが無効な場合は、証跡ファイルのコンシューマは証跡レコードを正しく解析するために、引き続き定義ファイルを必要とします。このため、Java用Oracle GoldenGateには、プロパティ・ファイルに定義されているプロパティからOracle GoldenGateソース定義ファイルを生成するgendefユーティリティが含まれています。プロパティ設定および他のパーサー固有のデータ定義値に基づいて、表の標準化された定義を作成します。

このユーティリティを実行する構文は次のとおりです。

gendef –prop {property_file} [-out {output_file}

これは、デフォルトではソース定義を標準出力に送信しますが、-outパラメータを使用してファイルに仕向けることができます。次に例を示します。

gendef –prop dirprm/jmsvam.properties -out dirdef/msgdefs.def

出力ソース定義ファイルをポンプまたは配信プロセスで使用し、VAMを介して作成された証跡データを解釈します。

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

この章では、Java用Oracle GoldenGate VAMのプロパティ・ファイルの構成に使用できるオプションについて説明します。

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

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

- パーサー・プロパティ

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

次のプロパティは、JMSへの接続、ログ・ファイル名、エラー処理およびメッセージ出力を制御します。

6.1.1 ロギング・プロパティ

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

6.1.1.1 gg.log

使用されるロギングのタイプを指定します。デフォルトの実装は、JDKオプションです。これは、java.util.logging (JUL)という名前の組込みJavaロギングです。その他のロギング・オプションは、log4jまたはlogbackです。構文は次のとおりです。

gg.log={JDK|log4j|logback}

たとえば、ロギングのタイプをlog4jに設定するには、次のようにします。

gg.log=log4j

ログ・ファイルは、インストールのレポート・サブディレクトリに作成されます。デフォルトのログ・ファイル名には、関連付けられているExtractのグループ名が含まれ、ファイル拡張子はlogです。

6.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

6.1.1.3 gg.log.file

ログ・ファイルのパスを指定します。構文は次のとおりです。

gg.log.file=path_to_file

ここで、path_to_fileは完全に定義されたログ・ファイルの場所です。これによってログの名前の変更が可能になりますが、複数のExtractがある場合、誤って他のログを上書きすることがないようExtract名を含める必要があります。

6.1.1.4 gg.log.classpath

ロギングの実装に使用されるJARのクラスパスを指定します。

gg.log.classpath=path_to_jars

6.1.2 JMS接続プロパティ

JMS接続プロパティでは、JMS統合用のJVMの起動方法など、接続を設定します。

6.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 (非常に詳細なロギング)のいずれかを使用することもできます。

6.1.2.2 jms.report.output

JMSレポートを書き込む場所を指定します。構文は次のとおりです。

jms.report.output={report|log|both}

説明:

- reportは、JMSレポートをOracle GoldenGateレポート・ファイルに送信します。これはデフォルトです。

- logは、Javaログ・ファイル(構成されている場合)に書き込みます。

- bothは、両方の場所に送信します。

6.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

6.1.2.4 jms.report.records

レポート生成の頻度をレコード数に基づいて指定します。構文は次のとおりです。

jms.report.records=number

次の例では、1000レコードごとにレポートを書き込みます。

jms.report.records=1000

6.1.2.5 jms.id

指定された形式の一意の識別子がJMS統合からメッセージ取得VAMに渡されることを指定します。これをレコードの一意のシーケンスIDとしてVAMで使用できます。

jms.id={ogg|time|wmq|activemq|message_header|custom_java_class}

説明:

- 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プロセスが異常終了します。

6.1.2.6 jms.destination

JNDIを使用して検索されるキュー名またはトピック名を指定します。

jms.destination=jndi_name

次に例を示します。

jms.destination=sampleQ

6.1.2.7 jms.connectionFactory

JNDIを使用して検索される接続ファクトリ名を指定します。

jms.connectionFactory=jndi_name

次に例を示します。

jms.connectionFactory=ConnectionFactory

6.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

6.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

6.2 パーサー・プロパティ

プロパティで、各タイプのパーサー(固定、区切り、XML)のメッセージの形式および翻訳ルールを指定します。parser.typeプロパティを設定して、使用するパーサーを指定します。残りのプロパティは、パーサー固有です。

6.2.1 パーサーのタイプの設定

次のプロパティはパーサー・タイプを設定します。

6.2.1.1 parser.type

使用するパーサーを指定します。

parser.type={fixed|delim|xml}

説明:

- fixedは、固定幅パーサーを起動します。

- delimは、区切りパーサーを起動します。

- xmlは、XMLパーサーを起動します。

次に例を示します。

parser.type=delim

6.2.2 固定パーサー・プロパティ

固定パーサーには次のプロパティが必要です。

6.2.2.1 fixed.schematype

メッセージ取得のメタデータとして使用されるファイルのタイプを指定します。有効なオプションは、sourcedefsおよびcopybookの2つです。

fixed.schematype={sourcedefs|copybook}

次に例を示します。

fixed.schematype=copybook

このプロパティの値によって、受信データを正常に解析するために設定する必要がある他のプロパティが決まります。

6.2.2.2 fixed.sourcedefs

fixed.schematype=sourcedefsの場合、このプロパティで、使用されるソース定義ファイルの場所を指定します。

fixed.sourcedefs=file_location

次に例を示します。

fixed.sourcedefs=dirdef/hrdemo.def

6.2.2.3 fixed.copybook

fixed.schematype=copybookの場合、このプロパティで、メッセージ取得プロセスで使用されるコピーブック・ファイルの場所を指定します。

fixed.copybook=file_location

次に例を示します。

fixed.copybook=test_copy_book.cpy

6.2.2.4 fixed.header

データ・ブロック構造の決定に使用されるヘッダー情報を含むsourcedefsエントリまたはコピーブック・レコードの名前を指定します。

fixed.header=record_name

次に例を示します。

fixed.header=HEADER

6.2.2.5 fixed.seqid

各レコードを一意に識別するために使用されるseqidを含むヘッダー・フィールドの名前、JMSプロパティまたはシステム値を指定します。この値は継続的に増分され、最後の文字が最下位である必要があります。

fixed.seqid={field_name|$jms_property|*seqid}

説明:

- field_nameは、seqidを含むヘッダー・フィールドの名前を示します。

- jms_propertyは、指定されたJMSヘッダー・プロパティの値を使用します。この特別な値は$jmsidで、jms.idプロパティで選択されたメカニズムによって返される値を使用します。

- seqidは、システムによって生成される、単純増分の64ビット整数を示します。

次に例を示します。

fixed.seqid=$jmsid

6.2.2.6 fixed.timestamp

タイムスタンプを含むフィールドの名前、JMSプロパティまたはシステム値を指定します。

fixed.timestamp={field_name|$jms_property|*ts}

次に例を示します。

fixed.timestamp=TIMESTAMP
fixed.timestamp=$JMSTimeStamp
fixed.timestamp=*ts

6.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

6.2.2.8 fixed.txid

トランザクションを一意に識別するために使用されるtxidを含むフィールドの名前、JMSプロパティまたはシステム値を指定します。この値は、トランザクションごとに増分されます。

fixed.txid={field_name|$jms_property|*txid}

ほとんどの場合、システム値*txidを使用することが推奨されます。

次に例を示します。

fixed.txid=$JMSTxId
fixed.txid=*txid

6.2.2.9 fixed.txowner

トランザクションに関連付けられているユーザー名を含むフィールドの名前、JMSプロパティまたは静的値を指定します。この値は、特定のトランザクションを処理から除外する場合に使用できます。これは、オプションのプロパティです。

fixed.txowner={field_name|$jms_property|"value"}

次に例を示します。

fixed.txowner=$MessageOwner
fixed.txowner="jsmith"

6.2.2.10 fixed.txname

トランザクションに関連付けられている任意の名前を含むフィールドの名前、JMSプロパティまたは静的値を指定します。これは、オプションのプロパティです。

fixed.txname={field_name|$jms_property|"value"}

次に例を示します。

fixed.txname="fixedtx"

6.2.2.11 fixed.optype

操作タイプを含むフィールドの名前またはJMSプロパティを指定します。これは、後述の項で指定されるfixed.optype値に対して検証されます。

fixed.header.optype={field_name|$jms_property}

次に例を示します。

fixed.header.optype=FUNCTION

6.2.2.12 fixed.optype.insertval

この値は、挿入操作を識別します。デフォルトは、Iです。

fixed.optype.insertval={value|\xhex_value}

次に例を示します。

fixed.optype.insertval=A

6.2.2.13 fixed.optype.updateval

この値は、更新操作を識別します。デフォルトは、Uです。

fixed.optype.updateval={value|\xhex_value}

次に例を示します。

fixed.optype.updateval=M

6.2.2.14 fixed.optype.deleteval

この値は削除操作を識別します。デフォルトは、Dです。

fixed.optype.deleteval={value|\xhex_value}

次に例を示します。

fixed.optype.deleteval=R

6.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

6.2.2.16 fixed.schema

SCHEMA.TABLE表名を生成する際のスキーマの静的な名前を指定します。

fixed.schema="value"

次に例を示します。

fixed.schema="OGG"

6.2.2.17 fixed.txind

トランザクション・インジケータ値に対して検証される、トランザクション・インジケータを含むフィールドの名前またはJMSプロパティを指定します。これが定義されていない場合、1つのメッセージ内のすべての操作がトランザクション全体に出現するとみなされます。定義されている場合、これによってトランザクションの先頭、中間および末尾が決まります。このように定義されたトランザクションは複数メッセージにわたることができます。これは、オプションのプロパティです。

fixed.txind={field_name|$jms_property}

次に例を示します。

fixed.txind=$TX_IND

6.2.2.18 fixed.txind.beginval

この値は、操作をトランザクションの先頭として識別します。デフォルトは、Bです。

fixed.txind.beginval={value|\xhex_value}

次に例を示します。

fixed.txind.beginval=0

6.2.2.19 fixed.txind.middleval

この値は、操作をトランザクションの中間として識別します。デフォルトは、Mです。

fixed.txind.middleval={value|\xhex_value}

次に例を示します。

fixed.txind.middleval=1

6.2.2.20 fixed.txind.endval

この値は、操作をトランザクションの末尾として識別します。デフォルトは、Eです。

fixed.txind.endval={value|\xhex_value}

次に例を示します。

fixed.txind.endval=2

6.2.2.21 fixed.txind.wholeval

この値は、操作をトランザクション全体として識別します。デフォルトは、Wです。

fixed.txind.wholeval={value|\xhex_value}

次に例を示します。

fixed.txind.wholeval=3

6.2.3 区切りパーサー・プロパティ

特に記載のないかぎり、区切りパーサーには次のプロパティが必要です。

6.2.3.1 delim.sourcedefs

使用するソース定義ファイルの場所を指定します。

delim.sourcedefs=file_location

次に例を示します。

delim.sourcedefs=dirdef/hrdemo.def

6.2.3.2 delim.header

データの前に配置される値のリストを指定し、各々に名前を割り当てます。

delim.header=name[,name2][. . .]

名前は一意である必要があります。これらは、他のdelimプロパティまたはヘッダー・フィールドが使用可能な場所で参照されます。

次に例を示します。

delim.header=optype, tablename, ts
delim.timestamp=ts

6.2.3.3 delim.seqid

各レコードを一意に識別するために使用されるseqidを含むヘッダー・フィールドの名前、JMSプロパティまたはシステム値を指定します。この値は増分され、最後の文字が最下位である必要があります。

delim.seqid={field_name|$jms_property|*seqid}

説明:

- field_nameは、seqidを含むヘッダー・フィールドの名前を示します。

- jms_propertyでは、指定されたJMSヘッダー・プロパティの値を使用します。この特別な値は$jmsidで、jms.idプロパティで選択されたメカニズムによって返される値を使用します。

- seqidは、システムによって生成される、単純で継続的に増分される64ビット整数を示します。

次に例を示します。

delim.seqid=$jmsid

6.2.3.4 delim.timestamp

タイムスタンプを含むJMSプロパティの名前、ヘッダー・フィールドまたはシステム値を指定します。

delim.timestamp={field_name|$jms_property|*ts}

次に例を示します。

delim.timestamp=TIMESTAMP
delim.timestamp=$JMSTimeStamp
delim.timestamp=*ts

6.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

6.2.3.6 delim.txid

トランザクションを一意に識別するために使用されるtxidを含むJMSプロパティの名前、ヘッダー・フィールドまたはシステム値を指定します。この値は、トランザクションごとに増分されます。

delim.txid={field_name|$jms_property|*txid}

ほとんどの場合、システム値*txidを使用することが推奨されます。

次に例を示します。

delim.txid=$JMSTxId
delim.txid=*txid

6.2.3.7 delim.txowner

トランザクションに関連付けられている任意のユーザー名を含むJMSプロパティの名前、ヘッダー・フィールドまたは静的値を指定します。この値は、特定のトランザクションを処理から除外する場合に使用できます。これは、オプションのプロパティです。

delim.txowner={field_name|$jms_property|"value"}

次に例を示します。

delim.txowner=$MessageOwner
delim.txowner="jsmith"

6.2.3.8 delim.txname

トランザクションに関連付けられている任意の名前を含むJMSプロパティの名前、ヘッダー・フィールドまたは静的値を指定します。これは、オプションのプロパティです。

delim.txname={field_name|$jms_property|"value"}

次に例を示します。

delim.txname="fixedtx"

6.2.3.9 delim.optype

操作タイプを含むJMSプロパティの名前またはヘッダー・フィールドを指定します。これは、delim.optype.insertval、delim.optype.updatevalおよびdelim.optype.deletevalの値と比較されて、操作が決まります。

delim.optype={field_name|$jms_property}

次に例を示します。

delim.optype=optype

6.2.3.10 delim.optype.insertval

この値は、挿入操作を識別します。デフォルトは、Iです。

delim.optype.insertval={value|\xhex_value}

次に例を示します。

delim.optype.insertval=A

6.2.3.11 delim.optype.updateval

この値は、更新操作を識別します。デフォルトは、Uです。

delim.optype.updateval={value|\xhex_value}

次に例を示します。

delim.optype.updateval=M

6.2.3.12 delim.optype.deleteval

この値は、削除操作を識別します。デフォルトは、Dです。

delim.optype.deleteval={value|\xhex_value}

次に例を示します。

delim.optype.deleteval=R

6.2.3.13 delim.schemaandtable

SCHEMA.TABLE形式でスキーマおよび表の名前を含むJMSプロパティの名前またはヘッダー・フィールドを指定します。

delim.schemaandtable={field_name|$jms_property}

次に例を示します。

delim.schemaandtable=$FullTableName

6.2.3.14 delim.schema

スキーマ名を含むJMSプロパティの名前、ヘッダー・フィールドまたはハードコードされた値を指定します。

delim.schema={field_name|$jms_property|"value"}

次に例を示します。

delim.schema="OGG"

6.2.3.15 delim.table

表名を含むJMSプロパティまたはヘッダー・フィールドの名前を指定します。

delim.table={field_name|$jms_property}

次に例を示します。

delim.table=TABLE_NAME

6.2.3.16 delim.txind

beginval、middleval、endvalまたはwholevalに対して検証される、トランザクション・インジケータを含むJMSプロパティまたはヘッダー・フィールドの名前を指定します。このプロパティが設定されていない場合、1つのメッセージ内のすべての操作が1つのトランザクション内にあるとみなされます。設定されている場合、これによってトランザクションの先頭、中間および末尾が決まります。このように定義されたトランザクションは複数メッセージにわたることができます。これは、オプションのプロパティです。

delim.txind={field_name|$jms_property}

次に例を示します。

delim.txind=txind

6.2.3.17 delim.txind.beginval

操作をトランザクションの先頭として識別する値。デフォルトは、Bです。

delim.txind.beginval={value|\xhex_value}

次に例を示します。

delim.txind.beginval=0

6.2.3.18 delim.txind.middleval

操作をトランザクションの中間として識別する値。デフォルトは、Mです。

delim.txind.middleval={value|\xhex_value}

次に例を示します。

delim.txind.middleval=1

6.2.3.19 delim.txind.endval

操作をトランザクションの末尾として識別する値。デフォルトは、Eです。

delim.txind.endval={value|\xhex_value}

次に例を示します。

delim.txind.endval=2

6.2.3.20 delim.txind.wholeval

操作をトランザクション全体として識別する値。デフォルトは、Wです。

delim.txind.wholeval={value|\xhex_value}

次に例を示します。

delim.txind.wholeval=3

6.2.3.21 delim.fielddelim

データ内のフィールド(列)の区切りに使用されるデリミタ値を指定します。この値は、文字または16進値を使用して定義されます。

delim.fielddelim={value|\xhex_value}

次に例を示します。

delim.fielddelim=,
delim.fielddelim=\xc7

6.2.3.22 delim.linedelim

データ内の行(レコード)の区切りに使用されるデリミタ値を指定します。この値は、文字または16進値を使用して定義されます。

delim.linedelim={value|\xhex_value}

次に例を示します。

delim.linedelim=||
delim.linedelim=\x0a

6.2.3.23 delim.quote

引用符付きのデータの識別に使用される値を指定します。この値は、文字または16進値を使用して定義されます。

delim.quote={value|\xhex_value}

次に例を示します。

delim.quote="

6.2.3.24 delim.nullindicator

NULLデータの識別に使用される値を指定します。この値は、文字または16進値を使用して定義されます。

delim.nullindicator={value|\xhex_value}

次に例を示します。

delim.nullindicator=NULL

6.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

6.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.\

6.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."

6.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

6.2.3.29 delim.hasbefores

データ内にビフォア値が存在するかどうかを指定します。

delim.hasbefores={true|false}

デフォルトは、falseです。delim.hasbeforesがtrueに設定されている場合、パーサーは、すべてのレコードについて列のビフォア値とアフター値があると想定します。ビフォア値は更新と削除に使用され、アフター値は更新と挿入に使用されます。afterfirstプロパティは、ビフォア・イメージがアフター・イメージの前か後かを指定します。delim.hasbeforesがfalseの場合、ビフォア値は想定されません。

次に例を示します。

delim.hasbefores=true

6.2.3.30 delim.hasnames

データ内に列名が存在するかどうかを指定します。

delim.hasnames={true|false}

デフォルトは、falseです。trueの場合、パーサーはすべてのレコードに対して列名を検出すると想定します。パーサーは、想定される列名に対して列名を検証します。falseの場合、列名は想定されません。

次に例を示します。

delim.hasnames=true

6.2.3.31 delim.afterfirst

アフター値がビフォア値の前に配置されているか、後に配置されているかを指定します。

delim.afterfirst={true|false}

デフォルトは、falseです。trueの場合、パーサーは、アフター値をビフォア値の前に検出すると想定します。falseの場合、アフター値はビフォア値の前にあります。

次に例を示します。

delim.afterfirst=true

6.2.3.32 delim.isgrouped

すべての列の列名、ビフォア・イメージおよびアフター・イメージがグループ化されるか、列ごとに順に配置されるかを指定します。

delim.isgrouped={true|false}

デフォルトは、falseです。trueの場合、パーサーは、列名のグループ(hasnamesがtrueの場合)、次にビフォア値のグループ(hasbeforesの場合)、その次にアフター値のグループがある(afterfirst設定によってはビフォア値とアフター値の順序が逆になる)と想定します。falseの場合、パーサーは、列名(hasnamesの場合)、ビフォア値(hasbeforesの場合)およびアフター値が列ごとにあると想定します。

次に例を示します。

delim.isgrouped=true

6.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

説明:

- 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

6.2.4 XMLパーサー・プロパティ

次のプロパティがXMLパーサーによって使用されます。

6.2.4.1 xml.sourcedefs

ソース定義ファイルの場所を指定します。

xml.sourcedefs=file_location

次に例を示します。

xml.sourcedefs=dirdef/hrdemo.def

6.2.4.2 xml.rules

メッセージの解析とトランザクション、操作および列の変換のXMLルールのリストを指定します。

xml.rules=xml_rule_name[, . . .]

指定されたXMLルールは、リストされた順に処理されます。特定のXMLドキュメントに対応するすべてのルールによって、トランザクション、操作および列を作成できます。指定されるXMLルールは、トランザクション・タイプまたは操作タイプのルールである必要があります。

次に例を示します。

xml.rules=dyntxrule, statoprule

6.2.4.3 rulename.type

XMLルールのタイプを指定します。

rulename.type={tx|op|col}

説明:

- txは、トランザクション・ルールを示します。

- opは、操作ルールを示します。

- colは、列ルールを示します。

次に例を示します。

dyntxrule.type=tx
statoprule.type=op

6.2.4.4 rulename.match

ルールが特定のドキュメントに対してアクティブ化されるかどうかの決定に使用されるXPath式を指定します。

rulename.match=xpath_expression

XPath式がドキュメントからノードを返す場合、ルールが対応付けられ、後続の処理が行われます。ノードを返さない場合、そのドキュメントに対してルールは無視されます。

次の例では、ドキュメントにルート要素Transactionがある場合、dyntxruleがアクティブ化されます。

dyntxrule.match=/Transaction

statopruleはstattxtuleのサブルールです。次の例では、親ルールの一致ノードに子要素NewMyTableEntryがある場合、statopruleがアクティブ化されます。

statoprule.match=./NewMyTableEntry

6.2.4.5 rulename.subrules

親ルールが一致によってアクティブ化された場合、一致をチェックするルール名のリストを指定します。

rulename.subrules=xml_rule_name[, . . .]

指定されたXMLルールは、リストされた順に処理されます。すべての一致ルールで、トランザクション、操作および列が作成される場合があります。

有効なサブルールは、親タイプによって決まります。トランザクション・ルールは、操作サブルールのみ持つことができます。操作ルールは、操作または列サブルールを持つことができます。列ルールは、サブルールを持つことはできません。

次に例を示します。

dyntxrule.subrules=dynoprule
statoprule.subrules=statkeycolrule, statcol1rule

6.2.4.6 txrule.timestamp

1) 指定されたXPath式またはJMSプロパティに含まれたトランザクション・コミット・タイムスタンプの使用、または2) 現在のシステム時間の使用をアダプタに指定することで、トランザクションのタイムスタンプを制御します。これは、オプションのプロパティです。

txrule.timestamp={xpath_expression|$jms_property|*ts}

トランザクションのタイムスタンプは操作レベルでオーバーライドすることも、操作レベルでのみ存在することもできます。XPath式は、@att、text()などの値アクセッサで終わる必要があります。

次に例を示します。

dyntxrule.timestamp=@ts

6.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

6.2.4.8 txrule.seqid

特定のトランザクションのseqidを指定します。これは、各メッセージに複数のトランザクションがある場合に使用できます。トランザクションのseqidを含むXPath式、JMSプロパティまたはシステム値を決定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。

txrule.seqid={xpath_expression|$jms_property|*seqid}

次に例を示します。

dyntxrule.seqid=@seqid

6.2.4.9 txrule.txid

トランザクションを一意に識別するために使用されるtxidを含むXPath式、JMSプロパティまたはシステム値を指定します。この値は、トランザクションごとに増分されます。

txrule.txid={xpath_expression|$jms_property|*txid}

ほとんどの場合、システム値*txidを使用することが推奨されます。

次に例を示します。

dyntxrule.txid=$JMSTxId
dyntxrule.txid=*txid

6.2.4.10 txrule.txowner

トランザクションに関連付けられている任意のユーザー名を含むXPath式、JMSプロパティまたは静的値を指定します。この値は、特定のトランザクションを処理から除外する場合に使用できます。

txrule.txowner={xpath_expression|$jms_property|"value"}

次に例を示します。

dyntxrule.txowner=$MessageOwner
dyntxrule.txowner="jsmith"

6.2.4.11 txrule.txname

トランザクションに関連付けられている任意の名前を含むXPath式、JMSプロパティまたは静的値を指定します。これは、オプションのプロパティです。

txrule.txname={xpath_expression|$jms_property|"value"}

次に例を示します。

dyntxrule.txname="fixedtx"

6.2.4.12 oprule.timestamp

1) 指定されたXPath式またはJMSプロパティに含まれたトランザクション・コミット・タイムスタンプの使用、または2) 現在のシステム時間の使用をアダプタに指定することで、操作のタイムスタンプを制御します。これは、オプションのプロパティです。

oprule.timestamp={xpath_expression|$jms_property|*ts}

操作のタイムスタンプは、トランザクション・レベルのタイムスタンプをオーバーライドします。

XPath式は、@att、text()などの値アクセッサで終わる必要があります。

次に例を示します。

statoprule.timestamp=./CreateTime/text()

6.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

6.2.4.14 oprule.seqid

特定の操作のseqidを指定します。操作のseqidを含むXPath式、JMSプロパティまたはシステム値を使用します。これは、親トランザクション・ルールで定義されたseqidをオーバーライドします。親トランザクション・ルールがない場合、必須です。

XPath式は、@att、text()などの値アクセッサで終わる必要があります。

oprule.seqid={xpath_expression|$jms_property|*seqid}

次に例を示します。

dynoprule.seqid=@seqid

6.2.4.15 oprule.txid

トランザクションを一意に識別するために使用されるtxidを含むXPath式、JMSプロパティまたはシステム値を指定します。これは、親トランザクション・ルールで定義されたtxidをオーバーライドし、親トランザクション・ルールがない場合、必須です。この値は、トランザクションごとに増分されます。

oprule.txid={xpath_expression|$jms_property|*txid}

ほとんどの場合、システム値*txidを使用することが推奨されます。

次に例を示します。

dynoprule.txid=$JMSTxId
dynoprule.txid=*txid

6.2.4.16 oprule.txowner

トランザクションに関連付けられている任意のユーザー名を含むXPath式、JMSプロパティまたは静的値を指定します。この値は、特定のトランザクションを処理から除外する場合に使用できます。これは、オプションのプロパティです。

oprule.txowner={xpath_expression|$jms_property|"value"}

次に例を示します。

dynoprule.txowner=$MessageOwner
dynoprule.txowner="jsmith"

6.2.4.17 oprule.txname

トランザクションに関連付けられている任意の名前を含むXPath式、JMSプロパティまたは静的値を指定します。これは、オプションのプロパティです。

oprule.txname={xpath_expression|$jms_property|"value"}

次に例を示します。

dynoprule.txname="fixedtx"

6.2.4.18 oprule.schemandtable

SCHEMA.TABLE形式でスキーマおよび表の名前を含むXPath式、JMSプロパティまたはハードコードされた値を指定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。値を検証して表がソース定義に存在するかどうかが確認されます。

oprule.schemaandtable={xpath_expression|$jms_property|"value"}

次に例を示します。

statoprule.schemaandtable="MY.TABLE"

6.2.4.19 oprule.schema

スキーマ名を含むXPath式、JMSプロパティまたはハードコードされた値を指定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。

oprule.schema={xpath_expression|$jms_property|"value"}

次に例を示します。

statoprule.schema=@schema

6.2.4.20 oprule.table

表名を含むXPath式、JMSプロパティまたはハードコードされた値を指定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。

oprule.table={xpath_expression|$jms_property|"value"}

次に例を示します。

statoprule.table=$TableName

6.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"

6.2.4.22 oprule.optype.insertval

挿入操作を識別する値を指定します。デフォルトは、Iです。

oprule.optype.insertval={value|\xhex_value}

次に例を示します。

dynoprule.optype.insertval=A

6.2.4.23 oprule.optype.updateval

更新操作を識別する値を指定します。デフォルトは、Uです。

oprule.optype.updateval={value|\xhex_value}

次に例を示します。

dynoprule.optype.updateval=M

6.2.4.24 oprule.optype.deleteval

削除操作を識別する値を指定します。デフォルトは、Dです。

oprule.optype.deleteval={value|\xhex_value}

次に例を示します。

dynoprule.optype.deleteval=R

6.2.4.25 oprule.txind

beginvalまたはトランザクション内の位置を識別する他の値に対して検証されるトランザクション・インジケータを含むXPath式またはJMSプロパティを指定します。このプロパティが定義されていない場合、1つのメッセージ内のすべての操作がトランザクション全体に出現するとみなされます。トランザクションの先頭、中間および末尾を指定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。このように定義されたトランザクションは複数メッセージにわたることができます。これは、オプションのプロパティです。

oprule.txind={xpath_expression|$jms_property}

次に例を示します。

dynoprule.txind=@txind

6.2.4.26 oprule.txind.beginval

操作をトランザクションの先頭として識別する値を指定します。デフォルトは、Bです。

oprule.txind.beginval={value|\xhex_value}

次に例を示します。

dynoprule.txind.beginval=0

6.2.4.27 oprule.txind.middleval

操作をトランザクションの中間として識別する値を指定します。デフォルトは、Mです。

oprule.txind.middleval={value|\xhex_value}

次に例を示します。

dynoprule.txind.middleval=1

6.2.4.28 oprule.txind.endval

操作をトランザクションの末尾として識別する値を指定します。デフォルトは、Eです。

oprule.txind.endval={value|\xhex_value}

次に例を示します。

dynoprule.txind.endval=2

6.2.4.29 oprule.txind.wholeval

操作をトランザクション全体として識別する値を指定します。デフォルトは、Wです。

oprule.txind.wholeval={value|\xhex_value}

次に例を示します。

dynoprule.txind.wholeval=3

6.2.4.30 colrule.name

列名を含むXPath式またはハードコードされた値を指定します。指定しない場合、列索引を指定する必要があります。列索引から列名が解決されます。指定された場合、列名がソース定義ファイルに対して検証されます。XPath式は、@att、text()などの値アクセッサで終わる必要があります。

colrule.name={xpath_expression|"value"}

次に例を示します。

dyncolrule.name=@name
statkeycolrule.name="keycol"

6.2.4.31 colrule.index

列索引を含むXPath式またはハードコードされた値を指定します。指定しない場合、列名を指定する必要があります。列名から列索引が解決されます。指定された場合、列索引がソース定義ファイルに対して検証されます。XPath式は、@att、text()などの値アクセッサで終わる必要があります。

colrule.index={xpath_expression|"value"}

次に例を示します。

dyncolrule.index=@index
statkeycolrule.index=1

6.2.4.32 colrule.value

列値を含むXPath式またはハードコードされた値を指定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。ノードまたは属性が存在せず、XPath式が値を返さない場合、列値はnullとみなされます。nullと欠落値を区別するために(更新の場合)、isnullおよびismissingプロパティを設定する必要があります。返される値は、ビフォア値の削除およびアフター値の更新/挿入に使用されます。

colrule.value={xpath_expression|"value"}

次に例を示します。

statkeycolrule.value=./text()

6.2.4.33 colrule.isnull

列値がnullかどうかの検出に使用されるXPath式を指定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。XPath式が値を返す場合、列値はnullです。これは、オプションのプロパティです。

colrule.isnull=xpath_expression

次に例を示します。

dyncolrule.isnull=@isnull

6.2.4.34 colrule.ismissing

列値が欠落しているかどうかの検出に使用されるXPath式を指定します。XPath式は、@att、text()などの値アクセッサで終わる必要があります。XPath式が値を返す場合、列値は欠落しています。これは、オプションのプロパティです。

colrule.ismissing=xpath_expression

次に例を示します。

dyncolrule.ismissing=./missing

6.2.4.35 colrule.before.value

colrule.valueをオーバーライドし、更新または削除に使用されるビフォア値の取得方法を明示的に指定します。この形式は、colrule.valueと同じ形式です。これは、オプションのプロパティです。

次に例を示します。

dyncolrule.before.value=./beforevalue/text()

6.2.4.36 colrule.before.isnull

colrule.isnullをオーバーライドし、更新または削除用のビフォア値がnullかどうかの決定方法を明示的に指定します。この形式は、colrule.isnullと同じ形式です。これは、オプションのプロパティです。

次に例を示します。

dyncolrule.before.isnull=./beforevalue/@isnull

6.2.4.37 colrule.before.ismissing

colrule.ismissingをオーバーライドし、更新または削除用のビフォア値が欠落しているかどうかの決定方法を明示的に指定します。この形式は、colrule.ismissingの形式と同じです。これは、オプションのプロパティです。

次に例を示します。

dyncolrule.before.ismissing=./beforevalue/missing

6.2.4.38 colrule.after.value

colrule.valueをオーバーライドし、更新または削除に使用されるアフター値の取得方法を明示的に指定します。この形式は、colrule.valueと同じ形式です。これは、オプションのプロパティです。

次に例を示します。

dyncolrule.after.value=./aftervalue/text()

6.2.4.39 colrule.after.isnull

colrule.isnullをオーバーライドし、更新または削除用のアフター値がnullかどうかの決定方法を明示的に指定します。この形式は、colrule.isnullと同じ形式です。これは、オプションのプロパティです。

次に例を示します。

dyncolrule.after.isnull=./aftervalue/@isnull

6.2.4.40 colrule.after.ismissing

colrule.ismissingをオーバーライドし、更新または削除用のアフター値が欠落しているかどうかの決定方法を明示的に指定します。この形式は、colrule.ismissingの形式と同じです。これは、オプションのプロパティです。

次に例を示します。

dyncolrule.after.ismissing=./aftervalue/missing

第III部 Oracle GoldenGate Java配信

この部では、Oracle GoldenGateアダプタを使用してトランザクション情報を処理し、Javaモジュールを利用して各種ターゲットにそれを適用する方法について説明します。

『Oracle GoldenGate for Big Dataの統合』では、Oracle GoldenGate Javaアダプタを使用して、トランザクション・レコードを各種のビッグ・データ・ターゲットに適用する方法が説明されています。

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

- Java配信の構成

- Java配信の実行

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

- Java配信プロパティ

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

7 Java配信の構成

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

- プロパティ・ファイルでのJREの構成

- Java配信のためのOracle GoldenGateの構成

- Javaハンドラの構成

7.1 プロパティ・ファイルでのJREの構成

現在のリリースのOracle GoldenGate Java配信には、Java 7が必要です。Javaと必須のJava共有ライブラリに正しくアクセスする方法は、Javaの構成に関する項を参照してください。Java用Oracle GoldenGateメインJAR(ggjava.jar)の場所を指すようアダプタ・プロパティ・ファイルを変更します。必要に応じて追加のJVMランタイム起動オプション(起動時にJVMに直接渡される)を設定します。

jvm.bootoptions=-Djava.class.path=.:ggjava/ggjava.jar-Xmx512m -Xmx64m

特に次のオプションに注意してください。

- java.class.pathには、コア・アプリケーション(ggjava/ggjava.jar)へのパス指定が含まれている必要があります。現在のディレクトリ(.)は、クラスパスにも含まれている必要があります。ロギングはJVMのロード時に初期化されるので、java.class.path変数はロギング・プロパティ・ファイル(log4jプロパティ・ファイルなど)への任意のパス指定を含んでいる必要があります。ロギング機能に必要な依存関係JARはggjava.jarに含まれており、明示的に含める必要はありません。パス指定では、Oracle GoldenGateインストール・ディレクトリを基準にファイルおよびディレクトリを参照し、Javaプロパティ・ファイル、Velocityテンプレートおよびdirprmサブディレクトリ内の他のクラスパス・リソースを格納できます。Javaアプリケーション・プロパティ・ファイルでクラスパスに追加することもできます。ハンドラ依存関係JARのパス指定は、ここでも追加できます。ただし、ハンドラの依存関係はgg.classpath変数を使用して追加するほうが、ベスト・プラクティスと考えられています。

- jvm.bootoptionsプロパティでは、JVMの初期ヒープ・サイズ(Xms)とJVMの最大ヒープ・サイズ(Xmx)も制御できます。最大ヒープ・サイズを増やすと、ガベージ・コレクションの頻度が減るため、パフォーマンスが向上することがあります。また、Javaのメモリー不足例外が発生する場合には、最大ヒープ・サイズを増やす必要があります。

システム用にプロパティ・ファイルを正しく構成したら、通常変更しません。構成オプションの詳細は、「共通プロパティ」を参照してください。

7.2 Java配信のためのOracle GoldenGateの構成

Java配信は、Oracle GoldenGate ReplicatプロセスとOracle GoldenGate Extract (データ・ポンプ)プロセスのどちらとも互換性があります。ベスト・プラクティスとして、Oracle GoldenGate Replicatプロセスを使用してください。どちらを使用しても、機能は似ています。トランザクション・データは、Oracle GoldenGate証跡ファイルから読み込まれ、Java配信のユーザー・イグジット・ライブラリに配信されます。ユーザー・イグジット・ライブラリは、JNIインタフェースからOracle GoldenGate Java配信モジュールへデータを転送します。Java配信モジュールは、データを各種のターゲットにストリーミングできるように構成が可能です。Oracle GoldenGate Javaアダプタ製品でサポートされているターゲットには、JMS、ファイル書込み、カスタム統合が含まれます。Oracle GoldenGate for Big Data製品には、これらの統合すべてのほか、HDFS、HBase、Flume、Kafkaなどのビッグ・データ・ターゲットに対するストリーミング機能もあります。

Replicatプロセスを使用しても、Extractプロセスを使用しても、差はわずかです。新しい統合をデプロイするとき、または以前の統合をExtractプロセスまたはReplicatプロセスに変換するときには、ドキュメントを十分に確認してください。

7.2.1 Java配信のためのReplicatの構成

Oracle GoldenGate Replicatプロセスは、トランザクション・データをJavaモジュール用のOracle GoldenGateに送信するように構成できます。Replicatは、ローカルの証跡(dirdat/aaなど)を消費して、データをJava配信モジュールに送信します。Javaモジュールは、すべてのデータを処理して、それを必要なターゲットに適用します。

次に、Replicatプロセスを追加する例を示します。

ADD REPLICAT javarep, EXTTRAIL ./dirdat/aa

前述のプロセス名と証跡名は、任意の有効な名前で置き換えます。プロセス名は8文字以下、証跡名は2文字である必要があります。Replicatパラメータ・ファイル(javarep.prm)で、ユーザー・イグジット・ライブラリの場所を指定します。

Replicatプロセスは、アプリケーションにトランザクションのグループ化が組み込まれています。トランザクションのグループ化は、データをターゲット・データベースにストリーミングするとき、パフォーマンスを大きく改善する場合があります。トランザクションのグループ化は、データをビッグ・データ・アプリケーションにストリーミングするときにも、パフォーマンスを大きく改善する場合があります。トランザクションのグループ化を制御するReplicatパラメータは、Replicat構成ファイルにあるGROUPTRANSOPS変数です。この変数のデフォルト値は1000で、Replicatプロセスは1000個の操作を1つのターゲット・トランザクションにグループ化しようとします。パフォーマンス・テストによると、GROUPTRANSOPSを大きくするほど、ビッグ・データ・アプリケーションにデータをストリーミングするときのパフォーマンスは向上することがわかっています。GROUPTRANSOPS変数を1に設定すると、ソース証跡ファイル(ソース・データベース)からの元のトランザクション境界が維持されます。

Oracle GoldenGate Java配信レイヤーにも、トランザクションのグループ化の機能があります。ReplicatプロセスでJava配信をホストしている場合、Java配信レイヤーのグループ化機能を使用するのは望ましくないとされています。Java配信のグループ化機能は、Oracle GoldenGate Java配信がExtractプロセスでホストされている場合にのみ使用してください。

表7-1 ユーザー・イグジットReplicatのパラメータ

パラメータ

説明

REPLICAT javarep

すべてのReplicatパラメータ・ファイルはReplicat名で始まります

SOURCEDEFS ./dirdef/tcust.def

(オプション)入力の証跡ファイルにメタデータ・レコードが含まれていない場合、Replicatプロセスには証跡データを記述したメタデータが必要です。これは、データベースまたはソース定義ファイルから取得します。このメタデータは、読み取る対象の証跡(./dirdat/aa)の列名およびデータ型を定義します。

TARGETDB LIBFILE libggjava.so SET properties= dirprm/javarep.properties

TARGETDB LIBFILE libggjava.soパラメータは、Javaモジュールを初期化するトリガーとして機能します。Javaプロパティ・ファイルを指定するSET句は、オプションです。指定した場合、これにはJavaモジュールのプロパティ・ファイルを示す絶対パスまたは相対パス(Replicat実行可能ファイルからの相対パス)が含まれます。デフォルト値は、dirprmディレクトリのreplicat_name.propertiesです。

MAP schema.*, TARGET *.*;

Javaモジュールに渡す表。含まれていない表はスキップされます。ソース表からターゲット表へのマッピングが必要な場合、『Oracle GoldenGateの管理for Windows and UNIX』でデータのマッピングと操作に関する項を参照して、MAP source_specification TARGET target_specificationを使用できます。

DDL INCLUDE ALLGROUPTRANSOPS 1000

ソース・トランザクションを1つの大きいターゲット・トランザクションにグループ化して、パフォーマンスを改善します。GROUPTRANSOPSは1000がデフォルト設定で、最大1000個のソース・トランザクションを1つのターゲット・トランザクションにマップします。

7.2.2 Java配信用のExtractプロセス(データ・ポンプ)の構成

Java配信は、Extractプロセス(データ・ポンプ)として構成することもできます。データ・ポンプはローカル証跡(dirdat/aaなど)から読み込み、データをJava配信ユーザー・イグジットに送信します。ユーザー・イグジットは、すべてのデータの処理に使用されます。

データ・ポンプExtractの追加例は、次のとおりです。

ADD EXTRACT javaue, EXTTRAILSOURCE ./dirdat/aa

前述のプロセス名と証跡名は、任意の有効な名前で置き換えます。プロセス名は8文字以下、証跡名は2文字である必要があります。ユーザー・イグジットExtractパラメータ・ファイル(javaue.prm)で、ユーザー・イグジット・ライブラリの場所を指定します。

Oracle GoldenGate Extractプロセスには、トランザクションをグループ化する機能はありません。ExtractプロセスにホストされているJava配信にトランザクションのグループ化機能が必要な場合は、Java配信レイヤーでのトランザクションのグループ化を使用する必要があります。

表7-2 ユーザー・イグジット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プロパティ。この例では、dirprmディレクトリにプロパティ・ファイルを配置します。

CUSEREXIT ggjava_ue.dll CUSEREXIT
PASSTHRU
INCLUDEUPDATEBEFORES

CUSEREXITパラメータには、次のものが含まれます。

- ユーザー・イグジット・ライブラリの場所。UNIXの場合、ライブラリには.so接尾辞が付きます。

- CUSEREXIT - コールバック関数名。大文字である必要があります。

- PASSTHRU - ダミー・ターゲット証跡の必要がなくなります。

- INCLUDEUPDATEBEFORES - トランザクションの整合性のために必要です。

TABLE schema.*;

ユーザー・イグジットに渡す表。含まれていない表はスキップされます。フィルタなしをユーザー・イグジットExtractで行えます。それ以外の場合、トランザクション・マーカーは省略されます。プライマリExtractでのフィルタ、別のアップストリーム・データ・ポンプの使用またはJavaアプリケーションでのデータの直接のフィルタを行えます。

注意:

PASSTHRUを使用すると、レポート数を処理レポートに含めることができる統計レポートが無効になります。レポート数統計を収集し、ユーザー・イグジットからExtractに送信するには、プロパティgg.report.timeを使用します。

- SETENV (GGS_USEREXIT_CONF = "dirprm/javaue.properties")
これは、ユーザー・イグジット共有ライブラリに使用されるデフォルトの構成ファイルを変更します。指定される値は、絶対パスまたはExtractを基準としたパスです。前述の例では、相対パスを使用してこのプロパティ・ファイルを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になります。

7.3 Javaハンドラの構成

ハンドラは、Oracle GoldenGate Java配信モジュールにプラグインされるターゲット・アプリケーションとの統合機能です。JMSやビッグ・データ・アプリケーションのような統合ターゲットにデータを送信する機能を処理しているのが、Javaハンドラです。Java配信とJavaハンドラを構成するには、Javaアダプタ・プロパティ・ファイルが使用されます。構成をテストするには、組込みファイル・ハンドラを使用できます。次に、プロパティ例とプロパティの説明(#で始まるコメント行)を示します。

# 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クラスの完全修飾名です。Oracle GoldenGateビッグ・データ・パッケージには、ビッグ・データ・ターゲットの各タイプが組み込まれています。詳細は、『Oracle GoldenGate for Big Dataの統合』を参照してください。

注意:

設定可能な有効なプロパティのリストは、各タイプのハンドラ(JMSハンドラ、ファイル・ライター・ハンドラなど)のドキュメントを参照してください。

8 Java配信の実行

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

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

- Java配信の再起動

8.1 アプリケーションの起動

Java配信を実行し、Javaアプリケーションを実行する場合に必要なのは、既存のOracle GoldenGate証跡ファイルのみです。証跡ファイルにメタデータ・レコードが含まれていない場合、証跡ファイルでの操作のスキーマを記述したソース定義ファイルも必要です。次の例では、TCUSTMERとTCUSTORDという単純な証跡を使用しています(Oracle GoldenGateソフトウェアのダウンロードに属するデモのSQLに対応しています)。

8.1.1 Replicatの使用の開始

Replicatを使用してJava配信を実行するには、GGSCIからReplicatを起動するだけです。

GGSCI> START REPLICAT javarep
GGSCI> INFO REPLICAT javarep

INFOコマンドでは、次のような情報が返されます。

REPLICAT JAVAREP Last Started 2015-09-10 17:25 Status RUNNINGCheckpoint Lag 00:00:00 (updated 00:00:00 ago)Log Read Checkpoint File ./dirdat/aa0000002015-09-10 17:50:41.000000 RBA 2702

8.1.2 Extractの使用の開始

一方、Extractプロセス(データ・ポンプ)を使用してJava配信を実行する場合は、GGSCIからExtractプロセスを起動します。

GGSCI> START EXTRACT javaue
GGSCI> INFO EXTRACT javaue

ReplicatまたはExtractプロセスが実行され、ファイル・ハンドラが使用される(前述の例のとおり)と、Oracle GoldenGateインストール・ディレクトリ(ReplicatおよびExtract実行可能ファイルと同じディレクトリ)に、出力ファイルoutput.xmlが生成されます。

プロセスが起動しない場合や異常終了する場合、「エラーのチェック」を参照してください。

注意:

本番システムでチェックポイント・ファイルを変更したり削除したりしないでください。

8.2 Java配信の再起動

Java配信セッションを使用するときには、2つのチェックポイント・ファイルが考えられます。Java配信のチェックポイントと、ReplicatまたはExtractプロセスのチェックポイントです。ReplicatまたはExtractプロセスでは、常にチェックポイント・ファイルが生成されます。Java配信のチェックポイント・ファイルはオプションで、アダプタ・プロパティ・ファイルの次のプロパティによって制御できます。

Java配信のチェックポイント生成をオン(デフォルト)にする手順:

goldengate.userexit.nocheckpoint=false

Java配信のチェックポイント生成をオフにする手順:

goldengate.userexit.nocheckpoint=true

Java配信のチェックポイント機能が有効な場合は、チェックポイント・ファイルが一意に命名されるように、次のプロパティを設定してください。

goldengate.userexit.chkptprefix=something unique

ベスト・プラクティスとして、Java配信がReplicatプロセスにホストされている場合は、Javaチェックポイント・ファイルを生成しないようにします。ベスト・プラクティスとして、Java配信がExractプロセスにホストされている場合は、Javaチェックポイント・ファイルを生成するようにします。次以降の項では、ReplicatおよびExtractでのチェックポイント処理について説明します。

8.2.1 ReplicatでのJava配信の再起動

2つのチェックポイント情報のうち、どちらの優先度が高いかを選択できるロジックがあるため、Replicatでのチェックポイント処理のほうが直接的です。ロジックは次のようになります。

- ユーザーがADDまたはALTER REPLICATを手動で実行した後でJava配信を起動した場合は、Replicatプロセスによって保持されているチェックポイント情報が、出発点として使用されます。

- 手動の操作で事前にチェックポイントが変更されずにJava配信を起動した場合(たとえば、正常停止または異常終了)は、Javaモジュールによって保持されているチェックポイント情報が、出発点として使用されます。
たとえば、証跡の最初にReplicatを使用してJava配信を再起動する場合は、次のようになります。

1. Replicatを証跡データの先頭にリセットします。
GGSCI> ALTER REPLICAT JAVAREP, EXTSEQNO 0, EXTRBA 0

2. Replicatのリセット

GGSCI> START JAVAREP
GGSCI> INFO JAVAREP
REPLICAT   JAVAREP    Last Started 2015-09-10 17:25   Status RUNNING
Checkpoint Lag       00:00:00 (updated 00:00:00 ago)
Log Read Checkpoint  File ./dirdat/aa000000
2015-09-10 17:50:41.000000  RBA 2702

Replicatプロセスのステータスが実行中になるには、数秒かかる場合があります。レポート・ファイルをチェックして、異常終了したか、起動中のままかを確認します。

GGSCI> VIEW REPORT JAVAREP

クラッシュまたは異常終了の後でJava配信を再起動した場合は、アプリケーションを再起動したとき、Javaモジュールによって保持されている最後の位置キーが使用されます。

8.2.2 Extract (データ・ポンプ)でのJava配信の再起動

Extractプロセスを再実行して、処理された証跡ファイルを再生する前に、JavaとExtractプロセスのチェックポイントをどちらもリセットする必要があります。

1. Javaチェックポイント・ファイルを削除します。

この例では、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

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

この章では、各種イベント・ハンドラ、使用するイベント・ハンドラの指定方法およびオプションについて説明します。出力のフォーマット方法およびOracle GoldenGateレポート・ファイルの内容について説明します。

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

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

- JMSハンドラ

- ファイル・ハンドラ

- カスタム・ハンドラ

- 出力のフォーマット

- レポート

9.1 イベント・ハンドラの指定

トランザクション、操作およびメタデータ・イベントのJavaでの処理は次のようになります。

- Oracle GoldenGate ReplicatまたはExtractプロセスがローカル証跡データを読み取り、トランザクション、操作およびデータベース・メタデータをJava配信モジュールに渡します。メタデータは、証跡ファイル自体から、ソース定義ファイルから、またはデータベースの問合せによって(Extractがアクティブにデータ接続している場合)取得できます。

- Javaフレームワークがイベントを発行します。イベントは、オプションでカスタム・イベント・フィルタによってフィルタされます。

- ハンドラ(イベント・リスナー)がこれらのイベントを処理し、トランザクション、操作およびメタデータを処理します。特定のタイプのターゲットにカスタム・フォーマッタが適用される場合があります。

既存のハンドラがいくつかあります。

- 様々な組込みビッグ・データ・ハンドラで、サポート対象のビッグ・データ・ターゲットにレコードを適用する方法については、『Oracle GoldenGate for Big Dataの統合』で、このタイプのハンドラの構成を参照してください。

- MapMessageを使用するか、TextMessageをカスタマイズ可能なフォーマッタと組み合せて使用し、JMSプロバイダに送信する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のように指定します。

9.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 - 操作のタイムスタンプ

9.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テンプレートを使用します。テンプレートはクラスパスを使用して特定されます。

9.4 カスタム・ハンドラ

カスタム・ハンドラのコーディングの詳細は、「Javaでのカスタム・ハンドラのコーディング」を参照してください。

9.5 出力のフォーマット

前述のとおり、既存のJMSおよびファイル出力ハンドラはプロパティ・ファイルを使用して構成できます。各ハンドラには、設定可能な固有のプロパティがあります。たとえば、出力ファイルをファイル・ハンドラに設定したり、JMS宛先をJMSハンドラに設定できます。これらの両ハンドラでカスタム・フォーマッタも指定できます。同じフォーマッタを両方のハンドラに使用できます。カスタム・フォーマットのためにJavaコードを書くかわりに、Velocityテンプレートを指定できます。詳細は、「イベントのフィルタリング」を参照してください。

9.6 レポート

Extractプロセスが停止すると、スループットおよび処理されたデータの量に関するサマリー統計が生成されます。また、統計は、定期的に(指定した時間の経過後または指定した数のレコードの処理後)書き込まれます。時間とレコード数の両方が指定された場合、いずれかのイベントが発生すると、レポートが生成されます。これらの統計サマリーは、Oracle GoldenGateレポート・ファイルおよびログ・ファイルに書き込まれます。

10 Java配信プロパティ

この章では、ユーザー・イグジット・プロパティおよびJavaアプリケーション・プロパティのプロパティ・ファイルの構成に使用できるオプションについて説明します。

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

- 共通プロパティ

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

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

10.1 共通プロパティ

次のプロパティは、ReplicatとExtractのどちらを使用するJava配信でも共通です。

10.1.1 ロギング・プロパティ

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

10.1.1.1 gg.log

使用されるロギングのタイプを指定します。Oracle GoldenGateアダプタのデフォルトの実装は、jdkオプションです。これは、java.util.logging (JUL)という名前の組込みJavaロギングです。その他のロギング・オプションは、log4jまたはlogbackです。

たとえば、ロギングのタイプをlog4jに設定するには、次のようにします。

gg.log=log4j

推奨される設定はlog4jです。ログ・ファイルは、インストールのdirrptサブディレクトリに作成されます。デフォルトのログ・ファイル名には、関連付けられているExtractのグループ名が含まれ、ファイル拡張子は.logです。

<process name>_<log level>_log4j.log

したがって、Oracle GoldenGate Replicatプロセスはjavaueと呼ばれ、gg.log.levelがdebugに設定されるため、ログ・ファイルの名前は次のようになります。

javaue_debug_log4j.log

10.1.1.2 gg.log.level

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

gg.log.level={ERROR|WARN|INFO|DEBUG|TRACE}

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

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

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

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

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

- TRACE - 最高レベルのロギングで、すべてのメッセージが含まれます。

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

# global logging level
gg.log.level=INFO

10.1.1.3 gg.log.file

ログ・ファイルのパスを指定します。構文は次のとおりです。

gg.log.file=path_to_file

ここで、path_to_fileは完全に定義されたログ・ファイルの場所です。これによってログの名前の変更が可能になりますが、複数のExtractがある場合、誤って他のログを上書きすることがないようExtract名を含める必要があります。

10.1.1.4 gg.log.classpath

ロギングの実装に使用されるJARのクラスパスを指定します。ggjava.jarライブラリは必要なロギングの依存関係ライブラリを含んでいるため、この構成プロパティは通常、使用しません。

gg.log.classpath=path_to_jars

10.1.2 JVM Bootオプション

次のオプションでは、Java Runtime Environmentを構成します。Javaクラスパスとメモリーのオプションは構成可能です。

10.1.2.1 jvm.bootoptions

ユーザー・イグジットでJVMを起動する場合に適用される初期Javaクラスパスおよびその他の起動オプションを指定します。java.class.pathには、UNIX/Linuxの場合コロン(:)、Windowsの場合セミコロン(;)の区切り文字が必要です。ここでは、初期および最大のヒープ・サイズ、クラスパスなど、JVMに対する様々なオプションを指定します。

- -Xms: 初期Javaヒープ・サイズ

- -Xmx: 最大Javaヒープ・サイズ

- -Djava.class.path: 最低でもメイン・アプリケーションJARであるggjava.jarを指定するクラスパス。JMSプロバイダJARなどのその他のJARもここで指定できます。また、これらをJavaアプリケーション・プロパティ・ファイルで指定することもできます。個別のlog4jプロパティ・ファイルを使用する場合、プロパティ・ファイルの場所がbootoptions java.class.path変数に含まれている必要があります。

- -verbose:jni: 詳細モードで実行します(JNI用)

次に例を示します(すべて1行に記述します)。

jvm.bootoptions= -Djava.class.path=ggjava/ggjava.jar
-Dlog4j.configuration=my-log4j.properties -Xmx512m

log4j.configurationプロパティは、クラスパスの検索によって解決されるlog4jプロパティ・ファイルを示します。独自のlog4j構成を使用することも、あらかじめ構成されたlog4j設定であるlog4j.properties(デフォルト・レベルのロギング)、debug-log4j.properties(デバッグ・ロギング)またはtrace-log4j.properties(非常に詳細なロギング)のいずれかを使用することもできます。Replicatプロセスでlog4jロギングを使用するには、gg.log=log4jを設定する必要があります。

これらのファイルはすでにクラスパスに指定されているので、事前構成されたlog4j設定のいずれかを使用すれば、クラスパスの変更は必要ありません。-Djava.class.path変数には、*ワイルドカードを指定せずに、カスタムのlog4j構成ファイルを含むディレクトリへのパスが含まれている必要があります

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

Java配信で、データ・ポンプExtractまたはReplicatプロセスを使用する際には、次のプロパティを使用できます。

10.2.1 一般的なプロパティ

次のプロパティは、ライター・タイプのすべてのユーザー・イグジットに適用され、ユーザー・イグジット固有ではありません。

10.2.1.1 goldengate.userexit.writers

ライターの名前を指定します。これは常にjvmで、変更しないでください。

次に例を示します。

goldengate.userexit.writers=jvm

ファイル内の他のすべてのプロパティにライター名jvmを接頭辞として付けます。

10.2.1.2 goldengate.userexit.chkptprefix

Javaチェックポイント・ファイル名に追加される接頭辞の文字列値を指定します。次に例を示します。

goldengate.userexit.chkptprefix=javaue_

10.2.1.3 goldengate.userexit.nochkpt

ユーザー・イグジット・チェックポイント・ファイルを無効または有効にします。デフォルトは、falseで、チェックポイント・ファイルはenabledです。トランザクションがサポートされ、ターゲットで有効な場合、このプロパティをtrueに設定します。

たとえばJavaアダプタ・プロパティは、JMSがターゲットで、JMSローカル・トランザクションがenabled (デフォルト)の場合、goldengate.userexit.nochkpt=trueを設定し、ユーザー・イグジット・チェックポイント・ファイルを無効にします。ハンドラでlocalTx=falseを設定し、JMSトランザクションが無効な場合、goldengate.userexit.nochkpt=falseを設定してユーザー・イグジット・チェックポイント・ファイルを有効にします。

goldengate.userexit.nochkpt=true|false

10.2.1.4 goldengate.userexit.usetargetcols

ターゲット列へのマッピングが可能かどうかを指定します。デフォルトはfalseで、ターゲット・マッピングなしです。

goldengate.userexit.usetargetcols=true|false

10.2.2 統計およびレポート

ユーザー・イグジットを使用すると、Extractは、イグジットによって処理されるレコードは無視されるとみなします。これによって、標準のOracle GoldenGateレポーティングは不完全になります。Java用Oracle GoldenGateでは、独自のレポートを追加し、この問題に対応します。

統計は、t秒ごとまたはnレコードごとに(両方が指定された場合、先に満たされた方の基準)、レポートされます。

ユーザー・イグジット共有ライブラリ(C側)によって保持されるレコードと、Javaライブラリから取得されるレコードの2セットの統計レコードがあります。Java側から受信されるレポートは、個々のハンドラによってフォーマットされ、返されます。

ユーザー・イグジット統計には、操作の総数、トランザクションとその速度が含まれます。

10.2.2.1 jvm.stats.display

統計のOracle GoldenGateレポート・ファイルおよびユーザー・イグジット・ログ・ファイルへの出力を制御します。

次の例では、これらの統計を出力します。

jvm.stats.display=true

10.2.2.2 jvm.stats.full

C側からの統計に加え、Java側からの統計の出力を制御します。

Java側の統計はより詳細ですが、オーバーヘッドも増えます。このため、統計のレポートの頻度が高い場合、詳細度の低いサマリーで十分です。stats.fullプロパティはfalseに設定することをお薦めします。

次の例では、C以外にJava統計を出力します。

jvm.stats.full=true

10.2.2.3 jvm.stats.time | jvm.stats.numrecs

統計がレポートされる間隔(秒)またはレコード数を指定します。デフォルトでは、毎時または10000レコードごと(いずれか先に起きた方)にレポートします。

たとえば、10分ごとまたは1000レコードごとにレポートするには、次のように指定します。

jvm.stats.time=600
jvm.stats.numrecs=1000

Javaアプリケーション統計は、ハンドラに依存します。

- すべてのハンドラについて、少なくとも総経過時間、処理時間、操作数、トランザクション数があります。

- JMSハンドラの場合、送受信されたバイト数合計もあります。

- レポートはテンプレートを使用してカスタマイズできます。

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

Javaアプリケーション・プロパティ・ファイルで設定できるプロパティを次に定義します。

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

次のプロパティがすべてのハンドラに適用されます。

10.3.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から削除することで無効にすることができます。

10.3.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クラスを拡張する任意のクラス。トランザクション、操作、メタデータ・イベントを処理できます。
Oracle GoldenGate for Big Dataパッケージには、各種ビッグ・データ・ターゲットに書き込むために事前義されたハンドラが、ほかにも用意されています。

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

次のプロパティは、フォーマットされた出力を生成できるすべてのハンドラに適用されます。これには、次のようなものがあります。

- jms_text handlerハンドラ(jms_map handlerハンドラではない)

- aqハンドラ

- フォーマットされた出力をファイルに書き込むsinglefileおよびrollingハンドラ

- 事前定義されたビッグ・データ・ハンドラ

10.3.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フォーマッタを使用することです。

10.3.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つのトランザクションに複数の表にまたがる複数の操作が含まれている場合、いずれかの表が表のリストに一致すれば、トランザクションは含められます。

10.3.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

10.3.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は無視されます。

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

ハンドラがCSVまたはfixed形式の出力を使用するよう設定されている場合、次のプロパティも設定されます。

10.3.3.1 gg.handler.name.format.delim

フィールド間に使用するデリミタを指定します。これに値を設定しない場合、デリミタは使用されません。次に例を示します。

gg.handler.handler1.format.delim=,

10.3.3.2 gg.handler.name.format.quote

列値が引用符付きの場合、使用する引用文字を指定します。次に例を示します。

gg.handler.handler1.format.quote='

10.3.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

10.3.3.4 gg.handler.name.format.missingColumnChar

ソース・データベース・トランザクション・ログから取得されなかった列値に対する特別な列接頭辞を指定します。列値は証跡になく、値があるか、NULLかは不明です。

列値の欠落状態を表すために使用される文字はカスタマイズできます。次に例を示します。

gg.handler.handler1.format.missingColumnChar=M

デフォルトでは、欠落している列値には空の文字列が設定され、表示されません。

10.3.3.5 gg.handler.name.format.presentColumnChar

証跡にあり、NULLではない列値に対する特別な列接頭辞を指定します。

列の状態を表すために使用される文字はカスタマイズできます。次に例を示します。

gg.handler.handler1.format.presentColumnChar=P

デフォルトでは、存在している列値には空の文字列が設定され、表示されません。

10.3.3.6 gg.handler.name.format.nullColumnChar

証跡にあり、NULLに設定されている列値に対する特別な列接頭辞を指定します。

列の状態を表すために使用される文字はカスタマイズできます。次に例を示します。

gg.handler.handler1.format.nullColumnChar=N

デフォルトでは、nullの列値には空の文字列が設定され、表示されません。

10.3.3.7 gg.handler.name.format.beginTxChar

レコードをトランザクションの先頭と識別するために使用されるヘッダー・メタデータ文字(「metacols」を参照)を指定します。次に例を示します。

gg.handler.handler1.format.beginTxChar=B

10.3.3.8 gg.handler.name.format.middleTxChar

レコードをトランザクションの中間と識別するために使用されるヘッダー・メタデータ文字(「metacols」を参照)を指定します。次に例を示します。

gg.handler.handler1.format.middleTxChar=M

10.3.3.9 gg.handler.name.format.endTxChar

レコードをトランザクションの末尾と識別するために使用されるヘッダー・メタデータ文字(「metacols」を参照)を指定します。次に例を示します。

gg.handler.handler1.format.endTxChar=E

10.3.3.10 gg.handler.name.format.wholeTxChar

レコードを完全なトランザクション(トランザクション全体と呼ばれる)と識別するために使用されるヘッダー・メタデータ文字(「metacols」を参照)を指定します。次に例を示します。

gg.handler.handler1.format.wholeTxChar=W

10.3.3.11 gg.handler.name.format.insertChar

挿入操作を識別する文字を指定します。デフォルトは、Iです。

たとえば、挿入操作の場合、IのかわりにINSを使用するには、次のようにします。

gg.handler.handler1.format.insertChar=INS

10.3.3.12 gg.handler.name.format.updateChar

更新操作を識別する文字を指定します。デフォルトは、Uです。

たとえば、更新操作の場合、UのかわりにUPDを使用するには、次のようにします。

gg.handler.handler1.format.updateChar=UPD

10.3.3.13 gg.handler.name.format.deleteChar

削除操作を識別する文字を指定します。デフォルトは、Dです。

たとえば、削除操作の場合、DのかわりにDELを使用するには、次のようにします。

gg.handler.handler1.format.deleteChar=DEL

10.3.3.14 gg.handler.name.format.truncateChar

切捨て操作を識別する文字を指定します。デフォルトは、Tです。

たとえば、切捨て操作にTではなくTRUNCを使用するには、次のようにします。

gg.handler.handler1.format.truncateChar=TRUNC

10.3.3.15 gg.handler.name.format.endOfLine

行末文字を指定します。

- EOL - ネイティブ・プラットフォーム

- CR - ニュートラル(UNIXスタイル\n)

- CRLF - Windows (\r\n)

次に例を示します。

gg.handler.handler1.format.endOfLine=CR

10.3.3.16 gg.handler.name.format.justify

固定フィールドを左詰めにするか、右詰めにするかを指定します。次に例を示します。

gg.handler.handler1.format.justify=left

10.3.3.17 gg.handler.name.format.includeBefores

ビフォア・イメージを出力に含めるかどうかを制御します。証跡にビフォア・イメージがある必要があります。次に例を示します。

gg.handler.handler1.format.includeBefores=false

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

次のプロパティは、出力をファイルに書き込むハンドラ(fileハンドラおよびsinglefileハンドラ)にのみ適用されます。

10.3.4.1 gg.handler.name.file

指定されたハンドラの出力ファイルの名前を指定します。ハンドラがローリング・ファイルの場合、この名前は、ロールされたファイルの名前の導出に使用されます。デフォルトのファイル名は、output.xmlです。

10.3.4.2 gg.handler.name.append

ファイルが追加(true)されるか、再起動時に上書き(false)されるかを制御します。

10.3.4.3 gg.handler.name.rolloverSize

ファイル・ハンドラを使用する場合、ロールオーバーが試行されるファイルのサイズを指定します。ファイル・サイズは最低このサイズですが、ほとんどの場合、これより大きいです。操作およびトランザクションはファイル間で分割されません。サイズはバイト数で指定されますが、接尾辞を指定してMBまたはKBを識別できます。次に例を示します。

gg.handler.myfile.rolloverSize=5MB

デフォルトのロールオーバー・サイズは、10MBです。

10.3.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

10.3.5.1 標準JMS設定

次に、設定可能なJMSプロパティと許容される値について簡単に説明します。これらは、jms_text (TextMessage)およびjms_map (MapMessage)の両方のJMSハンドラ・タイプに適用されます。

10.3.5.1.1 gg.handler.name.destination

メッセージが送信されるキューまたはトピック。これは、JMSサーバーで適切に構成される必要があります。一般的な値は、queue/A、queue.Test、example.MyTopicなどです。

gg.handler.name.destination=queue_or_topic

10.3.5.1.2 gg.handler.name.user

(オプション)JMSサーバーへのメッセージの送信に必要なユーザー名。

gg.handler.name.user=user_name

10.3.5.1.3 gg.handler.name.password

(オプション)JMSサーバーへのメッセージの送信に必要なパスワード

gg.handler.name.password=password

10.3.5.1.4 gg.handler.name.queueOrTopic

ハンドラがキューに送信する(単一受信者)か、トピックに送信する(パブリッシュ/サブスクライブ)か。これは、JMSプロバイダで適切に構成される必要があります。このプロパティは、gg.handler.name.destinationの別名です。構文は次のとおりです。

gg.handler.name.queueOrTopic=queue|topic

説明:

- queue - メッセージは読み取られると、削除されます。これはデフォルトです。

- topic - メッセージはパブリッシュされ、複数のサブスクライバに配信されます。

10.3.5.1.5 gg.handler.name.persistent

配信モードが永続に設定されているかどうか。メッセージが永続の場合、クライアントの送信操作の一環としてメッセージを安定的なストレージに記録するようJMSプロバイダを構成する必要があります。構文は次のとおりです。

gg.handler.name.persistent={true|false}

10.3.5.1.6 gg.handler.name.priority

JMSで、0を最低、9を最高とする10段階の優先度の値が定義されます。デフォルトでは優先度は4に設定されます。構文は次のとおりです。

gg.handler.name.priority=integer

次に例を示します。

gg.handler.name.priority=5

10.3.5.1.7 gg.handler.name.timeToLive

生成されたメッセージがメッセージ・システムによって保持される時間のディスパッチ時間からの長さ(ミリ秒)。値0は、時間が無制限であることを指定します。デフォルトは、0です。構文は次のとおりです。

gg.handler.name.timeToLive=milliseconds

次に例を示します。

gg.handler.name.timeToLive= 36000

10.3.5.1.8 gg.handler.name.connectionFactory

JNDIを使用して検索する接続ファクトリの名前。ConnectionFactoryJNDINameは別名です。構文は次のとおりです。

gg.handler.name.connectionFactory=JNDI_name

10.3.5.1.9 gg.handler.name.useJndi

gg.handler.name.usejndiがfalseの場合、JNDIはJMSクライアントの構成に使用されません。かわりに、ファクトリおよび接続が明示的に構築されます。構文は次のとおりです。

gg.handler.name.useJndi=true|false

10.3.5.1.10 gg.handler.name.connectionUrl

JNDIを使用しない場合にのみ接続URLを使用して明示的に接続を作成します。構文は次のとおりです。

gg.handler.name.connectionUrl=url

10.3.5.1.11 gg.handler.name.connectionFactoryClass

JNDIを使用しない場合にのみ接続ファクトリ・クラスを使用してファクトリにアクセスします。このプロパティの値は、ファクトリ・オブジェクトを明示的にインスタンス化および構築するJavaクラス名です。

gg.handler.name.connectionFactoryClass=java_class_name

10.3.5.1.12 gg.handler.name.localTX

ローカル・トランザクションを使用するかどうかを指定します。デフォルトはtrueで、ローカル・トランザクションが使用されます。構文は次のとおりです。

gg.handler.name.localTX=true|false

10.3.5.1.13 gg.handlerlist.nop

JMSメッセージの送信を無効にし、メッセージ生成のテストをできるようにします。これは、テスト目的でのみ使用されるグローバル・プロパティです。イベントは従前どおり生成されて処理され、メッセージが構築されます。デフォルトはfalseで、メッセージの送信を無効にしません。構文は次のとおりです。

gg.handlerlist.nop=true|false

ユーザーはこのオプションを利用して、ハンドラ・モジュールを伴わずに処理する証跡レコードのパフォーマンスを測定できます。このアプローチを使うと、証跡レコードをターゲット・システムに適用するとき、パフォーマンスに問題が生じる可能性を下げられます。

10.3.5.1.14 gg.handler.name.physicalDestination

JNDIプロバイダではなくConnectionFactory APIから取得した、キューまたはトピック・オブジェクトの名前。

gg.handler.name.physicalDestination=queue_name

10.3.5.2 グループ・トランザクション・プロパティ

これらのプロパティは、トランザクションのグループ化に限度を設定します。

10.3.6 JNDIプロパティ

これらのJNDIプロパティは、接続ファクトリと初期宛先を検索するための初期コンテキストへの接続に必要です。

java.naming.provider.url=url
java.naming.factory.initial=java-class-name

JNDIセキュリティがenabledな場合、次のプロパティを設定できます。

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

10.3.7 一般的なプロパティ

次のプロパティは、ユーザー・イグジットJavaフレームワーク用に使用される一般プロパティです。

10.3.7.1 gg.classpath

クラスパスに追加するディレクトリまたはJARの追加パスのカンマ区切りのリストを指定します。オプションで、Windowsシステムの場合はセミコロン、UNIXの場合はコロンでリストを区切ることができます。次に例を示します。

gg.classpath=C:\Program Files\MyProgram\bin;C:\Program Files\ProgramB\app\bin;

カスタムJava JAR、またはビッグ・データ・アプリケーションの外部依存関係へのパス指定を構成するには、このアダプタ・プロパティ・ファイル構成プロパティを使用する必要があります。

10.3.7.2 gg.report.time

統計を計算してExtractに送信し、レポートを処理する頻度を指定します。Extractがレポートを出力するよう構成されている場合、これらの統計が含められます。構文は次のとおりです。

gg.report.time=report_interval{s|m|h}

説明:

- report_intervalは整数です。

- 有効な時間単位は、次のとおりです。

- s - 秒

- m - 分

- h - 時間

値が入力されない場合、デフォルトは24時間ごとの計算および送信です。

10.3.7.3 gg.binaryencoding

バイナリ・エンコーディング・タイプを指定します。このプロパティを使用して、バイナリ・データの必要な出力エンコーディングを構成できます。次に例を示します。

gg.binaryencoding=base64|hex

デフォルト値はbase64です。バイナリ・データを表す有効な値は次のとおりです。

- base64 - base64文字列

- hex - 16進数文字列

10.3.8 Java配信のトランザクションのグループ化

トランザクションのグループ化は、Java統合、特にビッグ・データ統合のパフォーマンスを大きく改善する場合があります。Java配信には、次のパラメータを使用してトランザクションのグループ化を実行する機能があります。minGroupSizeおよびmaxGroupSizeのパラメータは、Java配信がExtractプロセスにホストされている場合にのみ使用してください。Java配信がReplicatプロセスにホストされている場合、トランザクションのグループ化にはGROUPTRANSOPS Replicat構成を使用する必要があります。

注意:

グループ・トランザクション・プロパティを使用する場合、次のようにする必要があります。

- gg.handler.name.modeがトランザクション・モード(tx)に設定されていることを確認します。そうではない場合、グループ・トランザクション・プロパティは無視されます。

- Javaチェックポイント・ファイルが生成されるように、goldengate.userexit.nochkptプロパティがfalseに設定されていることを確認します。

- 操作のトランザクション・インジケータを無視し、トランザクション境界の決定に使用しません。

- インストールごとに名前付きハンドラを1つのみ使用します。

10.3.8.1 gg.handler.name.minGroupSize

トランザクション・コミットが送信されるまでに累積される操作の最小数を指定します。

構文は次のとおりです。

gg.handler.name.minGroupSize=min_size

説明:

- min_sizeには、トランザクションが送信されるまでに累積される操作の最小数を指定します。操作の回数、累積のメッセージ・サイズ、またはその両方を指定できます。
最大許容値は、integer.MAX.VALUEまたは2147483647です。最小値は1です。

両方のプロパティを使用する場合、gg.handler.name.minGroupSizeに設定する値はgg.handler.name.maxGroupSizeの値以下である必要があります。

次の例では、送信までの最小操作数が50、または累積メッセージ・サイズが10KBの場合をテストします。

gg.handler.name.minGroupSize=50, 10k

10.3.8.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, 20K

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

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

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

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

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

- 追加リソース

11.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

フィルタをアクティブにするには、フィルタを記述し、ハンドラに設定します。追加のロジックを特定のハンドラに追加する必要はありません。

11.2 カスタム・フォーマット

次のようにして、組込みハンドラの出力フォーマットをカスタマイズできます。

- Javaでのカスタム・フォーマッタの記述。または

- Velocityテンプレートの使用

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

これより前の例で、同じフォーマッタ(com.mycompany.MyFormatter)を使用するJMSハンドラとファイル出力ハンドラを示しています。次の例は、このフォーマッタの実装方法の例です。

例11-1 カスタム・フォーマットの実装

package com.mycompany.MyFormatter;
import oracle.goldengate.datasource.DsOperation;
import oracle.goldengate.datasource.DsTransaction;
import oracle.goldengate.datasource.format.DsFormatterAdapter;
import oracle.goldengate.datasource.meta.ColumnMetaData;
import oracle.goldengate.datasource.meta.DsMetaData;
import oracle.goldengate.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/*

11.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

テンプレートを使用するよう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

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

カスタム・ハンドラは、AbstractHandlerを拡張して実装できます。

import oracle.goldengate.datasource.*;
import static oracle.goldengate.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のディレクトリ全体を含めるには、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をカスタムのデータ型に変換することができます。

11.4 追加リソース

Java APIにはJavadocが用意されています。Javadocは、カスタマイズおよび拡張に有用なインタフェースおよびクラスのみを配布するために、コア・パッケージ、クラスおよびインタフェースのセットに意図的に縮小されています。

各パッケージでは、わかりやすくするために一部のクラスが意図的に省略されています。重要なクラスは次のとおりです。

- oracle.goldengate.datasource.DsTransaction: データベース・トランザクションを表します。トランザクションには、0個以上の操作が含まれます。

- oracle.goldengate.datasource.DsOperation: データベース操作(挿入、更新、削除)を表します。操作には、データ変更イベントを表す0個以上の列値が含まれます。列索引は、Java APIで0でオフセットされます。

- oracle.goldengate.datasource.DsColumn: 列値を表します。列値は、ビフォア値とアフター値のコンポジットです。列値は存在する(値があるかnull)場合も欠落している(ソース証跡に含まれていない)場合もあります。

- oracle.goldengate.datasource.DsColumnCompositeは、コンポジットです

- oracle.goldengate.datasource.DsColumnBeforeValueは、操作前の列値です(これはオプションで、操作に含まれていない場合があります)。

- oracle.goldengate.datasource.DsColumnAfterValueは、操作後の値です

- oracle.goldengate.datasource.meta.DsMetaData: 出現するすべてのデータベース・メタデータを表します。オブジェクトは最初空です。DsMetaDataには、TableNameをキーとして使用するTableMetaDataの0個以上のインスタンスのハッシュ・マップが含まれます。

- oracle.goldengate.datasource.meta.TableMetaData: 1つの表のすべてのメタデータを表します。0個以上のColumnMetaDataを含みます。

- oracle.goldengate.datasource.meta.ColumnMetaData: データベースまたはOracle GoldenGateソース定義ファイルに定義されている列名およびデータ型を含みます。

詳細は、Javadocを参照してください。

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

この部には、Oracle GoldenGateアダプタの問題のトラブルシューティングに関する情報が含まれています。

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

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

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

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

- エラーの確認

- データ・ポンプExtractでの異常終了後のリカバリ

- 問題のレポート

12.1 エラーの確認

Java用Oracle GoldenGateの操作時発生する可能性のあるエラーには2つのタイプがあります。

- ユーザー・イグジットまたはVAMを実行するReplicatまたはExtractプロセスが起動しないか、異常終了します。

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

ReplicatまたはExtractプロセスが起動しないか異常終了する場合、処理の最初から最後まで順にエラー・メッセージを確認します。

1. Oracle GoldenGateイベント・ログでエラーを確認し、Extractレポート・ファイルを表示します。

GGSCI> VIEW GGSEVT
GGSCI> VIEW REPORT {replicat/extract name}

2. 該当するログ・ファイルを確認します。

ユーザー・イグジットの場合:

- ユーザー・イグジット・ライブラリのログ・ファイルにレポートされている最後のメッセージを確認します。ファイル名は、プロパティ・ファイルで設定されたログ・ファイル接頭辞(log.logname)と現在の日付です。

shell> more {log.logname}_{yyyymmdd}.log

注意:

これは、Javaアプリケーションのログ・ファイルではなく、共有ライブラリのみのログ・ファイルです。

3. Replicatまたはデータ・ポンプ、または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

プロセスは正常に実行されるが、データが正しくないか、存在しない場合、ユーザー・イグジット用に記述したカスタム・フィルタ、フォーマッタまたはハンドラにエラーがないか確認します。

Replicatまたはデータ・ポンプExtractを証跡の最初から再開する場合は、「Java配信の再起動」を参照してください。

12.2 データ・ポンプExtractでの異常終了後のリカバリ

ExtractパラメータRECOVERYOPTIONSは、リリース10以降の証跡ではAPPENDMODEがデフォルトです。追加モードでは、Extractは異常終了時、証跡にリカバリ・マーカーを書き込みます。Extractが再起動され、リカバリ・マーカーを検出すると、ローカル・トランザクションが有効な場合、不完全なトランザクションのロールバックをリクエストします。ローカル・トランザクションが無効な場合、警告メッセージが発行されます。プロパティgg.handler.{name}.localTXが明示的にfalseに設定されていないかぎり、ローカル・トランザクションは有効です。

12.3 問題のレポート

Oracle GoldenGateのサポート・アカウントがある場合、次の情報を含めてサポート・チケットを発行してください。

- オペレーティング・システムとJavaのバージョン
Java Runtime Environmentのバージョンは、次のようにすると表示できます。

$ java -version

- 構成ファイル:

- ユーザー・イグジットを実行したReplicatまたはデータ・ポンプExtractのパラメータ・ファイル

- JMSまたはJNDIプロパティ・ファイルを含む、使用されるすべてのプロパティ・ファイル

- ユーザー・イグジットのVelocityテンプレート

- 可能であれば、ターゲット固有の構成ファイルも含めてください

- ログ・ファイル:
Oracle GoldenGateのインストール・ディレクトリ内のすべての.logファイル(Java log4jログ・ファイルおよびユーザー・イグジットまたはVAMのログ・ファイル)。

第V部 付録

付録には、Oracle GoldenGateアダプタの特定の使用方法に関する情報を示し、インストールで使用可能なサンプルをリストします。

第VI部には、次の付録があります。

- アダプタの例

A アダプタの例

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

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

- ロギングの構成

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-2016, 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 Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

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

第三者のコンテンツ、製品、サービスに対する免責事項

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

アルファ版およびベータ版ドラフト・ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のアルファ版およびベータ版ドラフト・ドキュメントについて

このドキュメントが非公開の試作版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のベータ・トライアル契約のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle PartnerNetwork Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

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

オラクルのアクセシビリティについての詳細情報は、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を参照してください。