| Oracle® GoldenGate Application Adapters Oracle GoldenGateアダプタの管理 12c (12.1.2.1.1) E67383-01 |
|
![]() 前 |
![]() 次 |
この章では、ユーザー・イグジット・プロパティおよびJavaアプリケーション・プロパティのプロパティ・ファイルの構成に使用できるオプションについて説明します。
この章の内容は次のとおりです。
次のプロパティでは、ログ・ファイルおよびロギングのタイプを設定します。
ロギングは次のプロパティによって制御されます。
使用されるロギングのタイプを指定します。Oracle GoldenGateアダプタのデフォルトの実装は、JDKオプションです。これは、java.util.logging (JUL)という名前の組込みJavaロギングです。その他のロギング・オプションは、log4jまたはlogbackです。
たとえば、ロギングのタイプをlog4jに設定するには、次のようにします。
gg.log=log4j
ログ・ファイルは、インストールのレポート・サブディレクトリに作成されます。デフォルトのログ・ファイル名には、関連付けられているExtractのグループ名が含まれ、ファイル拡張子は.logです。
すべてのモジュールを対象とする全体的なログ・レベルを指定します。構文は次のとおりです。
gg.log.level={ERROR|WARN|INFO|DEBUG}
ログ・レベルは次のように定義されています。
ERROR - エラーが発生した場合にのみメッセージを書き込ます。
WARN - エラーおよび警告メッセージを書き込みます。
INFO - エラー、警告および情報メッセージを書き込みます。
DEBUG - デバッグ・メッセージを含むすべてのメッセージを書き込みます。
デフォルトのロギング・レベルはINFOです。この場合、メッセージは、起動時、停止時および操作中に定期的に生成されます。レベルをDEBUGに切り替えると、メッセージが大量に生成され、パフォーマンスに影響する場合があります。たとえば、次の例ではグローバル・ロギング・レベルをINFOに設定します。
# global logging level gg.log.level=INFO
次のプロパティは、ライター・タイプのすべてのユーザー・イグジットに適用され、ユーザー・イグジット固有ではありません。
ライターの名前を指定します。これは常にjvmで、変更しないでください。
次に例を示します。
goldengate.userexit.writers=jvm
ファイル内の他のすべてのプロパティにライター名jvmを接頭辞として付けます。
チェックポイント・ファイル名に追加される接頭辞の文字列値を指定します。次に例を示します。
goldengate.userexit.chkptprefix=javaue_
ユーザー・イグジット・チェックポイント・ファイルを無効または有効にします。デフォルトは、falseで、チェックポイント・ファイルは有効です。トランザクションがサポートされ、ターゲットで有効な場合、このプロパティをtrueに設定します。
たとえば、Javaアプリケーション・プロパティで、JMSがターゲットであり、JMSローカル・トランザクションが有効(デフォルト)の場合、goldengate.userexit.nochkpt=trueを設定してユーザー・イグジット・チェックポイント・ファイルを無効にします。ハンドラでlocalTx=falseを設定し、JMSトランザクションが無効な場合、goldengate.userexit.nochkpt=falseを設定してユーザー・イグジット・チェックポイント・ファイルを有効にします。
goldengate.userexit.nochkpt={true|false}
次のオプションでは、Java Runtime Environmentを構成します。特に、JVMで使用される最大メモリーを指定できます。Javaのメモリー不足エラーになる場合、これらの設定を編集します。
ユーザー・イグジットでJVMを起動する場合に適用されるクラス・パスおよび起動オプションを指定します。パスには、UNIX/Linuxの場合コロン(:)、Windowsの場合セミコロン(;)の区切り文字が必要です。ここでは、ヒープ・サイズ、クラスパスなど、JVMに対する様々なオプションを指定します。
-Xms: 初期Javaヒープ・サイズ
-Xmx: 最大Javaヒープ・サイズ
-Djava.class.path: 最低でもメイン・アプリケーションjarであるggjava.jarを指定するクラスパス。JMSプロバイダjarなどのその他のjarもここで指定できます。また、これらをJavaアプリケーション・プロパティ・ファイルで指定することもできます。
-verbose:jni: 詳細モードで実行します(JNI用)
次に例を示します(すべて1行に記述します)。
jvm.bootoptions= -Djava.class.path=ggjava/ggjava.jar -Dlog4j.configuration=my-log4j.properties -Xmx512m
log4j.configurationプロパティには、log4jプロパティ・ファイルの完全修飾URLを指定できます。デフォルトでは、このファイルはクラスパスで検索されます。独自のlog4j構成を使用することも、あらかじめ構成されたlog4j設定であるlog4j.properties(デフォルト・レベルのロギング)、debug-log4j.properties(デバッグ・ロギング)またはtrace-log4j.properties(非常に詳細なロギング)のいずれかを使用することもできます。
ユーザー・イグジットを使用すると、Extractは、イグジットによって処理されるレコードは無視されるとみなします。これによって、標準のOracle GoldenGateレポーティングは不完全になります。Java用Oracle GoldenGateでは、独自のレポートを追加し、この問題に対応します。
統計は、t秒ごとまたはnレコードごとに(両方が指定された場合、先に満たされた方の基準)、レポートされます。
ユーザー・イグジット共有ライブラリ(C側)によって保持されるレコードと、Javaライブラリから取得されるレコードの2セットの統計レコードがあります。Java側から受信されるレポートは、個々のハンドラによってフォーマットされ、返されます。
ユーザー・イグジット統計には、操作の総数、トランザクションとその速度が含まれます。
統計のOracle GoldenGateレポート・ファイルおよびユーザー・イグジット・ログ・ファイルへの出力を制御します。
次の例では、これらの統計を出力します。
jvm.stats.display=true
C側からの統計に加え、Java側からの統計の出力を制御します。
Java側の統計はより詳細ですが、オーバーヘッドも増えます。このため、統計のレポートの頻度が高い場合、詳細度の低いサマリーで十分です。stats.fullプロパティはfalseに設定することをお薦めします。
次の例では、C以外にJava統計を出力します。
jvm.stats.full=true
統計がレポートされる間隔(秒)またはレコード数を指定します。デフォルトでは、毎時または10000レコードごと(いずれか先に起きた方)にレポートします。
たとえば、10分ごとまたは1000レコードごとにレポートするには、次のように指定します。
jvm.stats.time=600 jvm.stats.numrecs=1000
Javaアプリケーション統計は、ハンドラに依存します。
すべてのハンドラについて、少なくとも総経過時間、処理時間、操作数、トランザクション数があります。
JMSハンドラの場合、送受信されたバイト数合計もあります。
レポートはテンプレートを使用してカスタマイズできます。
Javaアプリケーション・プロパティ・ファイルで設定できるプロパティを次に定義します。
次のプロパティがすべてのハンドラに適用されます。
ハンドラ・リストは、アクティブ・ハンドラのカンマ区切りのリストです。これらの値はプロパティ・ファイルの以降の部分で使用され、各ハンドラが構成されます。次に例を示します。
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から削除することで無効にすることができます。
このタイプのハンドラ。組込みハンドラ用にあらかじめ定義された値または完全修飾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クラスを拡張する任意のクラス。トランザクション、操作、メタデータ・イベントを処理できます。
次のプロパティは、フォーマットされた出力を生成できるすべてのハンドラに適用されます。これには、次のようなものがあります。
jms_text handlerハンドラ(jms_map handlerハンドラではない)
aqハンドラ
フォーマットされた出力をファイルに書き込むsinglefileおよびrollingハンドラ
操作およびトランザクションを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フォーマッタを使用することです。
このハンドラによって含められる表のリストを指定します。
表のスキーマ(または所有者)が指定される場合、そのスキーマのみが表名に一致します。それ以外の場合、表名は任意のスキーマに一致します。表のカンマ区切りのリストを指定できます。たとえば、ハンドラに表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つのトランザクションに複数の表にまたがる複数の操作が含まれている場合、いずれかの表が表のリストに一致すれば、トランザクションは含められます。 |
このハンドラによって除外される表のリストを指定します。
表のスキーマ(または所有者)が指定される場合、そのスキーマのみが表名に一致します。それ以外の場合、表名は任意のスキーマに一致します。表のリストはカンマ区切りで指定されます。たとえば、すべてのスキーマの表date_modified以外のすべての表に対するすべての操作をハンドラが処理するには、次のようにします。
gg.handler.myhandler.excludeTables=date_modified
表のカタログおよびスキーマ(または所有者)が指定される場合、そのスキーマのみが表名に一致します。それ以外の場合、表名は任意のカタログおよびスキーマに一致します。表のリストはカンマ区切りで指定されます。たとえば、カタログdboおよびスキーマbarの表date_modified以外のすべての表に対するすべての操作をハンドラが処理するには、次のようにします。
gg.handler.myhandler.excludeTables=dbo.bar.date_modified
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は無視されます。 |
ハンドラがCSVまたはfixed形式の出力を使用するよう設定されている場合、次のプロパティも設定されます。
フィールド間に使用するデリミタを指定します。これに値を設定しない場合、デリミタは使用されません。次に例を示します。
gg.handler.handler1.format.delim=,
列値が引用符付きの場合、使用する引用文字を指定します。次に例を示します。
gg.handler.handler1.format.quote='
レコードの先頭、すべての列データの前に出現するメタデータ列値を指定します。次のものを出現順に指定します。
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
ソース・データベース・トランザクション・ログから取得されなかった列値に対する特別な列接頭辞を指定します。列値は証跡になく、値があるか、NULLかは不明です。
列値の欠落状態を表すために使用される文字はカスタマイズできます。次に例を示します。
gg.handler.handler1.format.missingColumnChar=M
デフォルトでは、欠落している列値には空の文字列が設定され、表示されません。
証跡にあり、NULLではない列値に対する特別な列接頭辞を指定します。
列の状態を表すために使用される文字はカスタマイズできます。次に例を示します。
gg.handler.handler1.format.presentColumnChar=P
デフォルトでは、存在している列値には空の文字列が設定され、表示されません。
証跡にあり、NULLに設定されている列値に対する特別な列接頭辞を指定します。
列の状態を表すために使用される文字はカスタマイズできます。次に例を示します。
gg.handler.handler1.format.nullColumnChar=N
デフォルトでは、nullの列値には空の文字列が設定され、表示されません。
レコードをトランザクションの先頭と識別するために使用されるヘッダー・メタデータ文字(「metacols」を参照)を指定します。次に例を示します。
gg.handler.handler1.format.beginTxChar=B
レコードをトランザクションの中間と識別するために使用されるヘッダー・メタデータ文字(「metacols」を参照)を指定します。次に例を示します。
gg.handler.handler1.format.middleTxChar=M
レコードをトランザクションの末尾と識別するために使用されるヘッダー・メタデータ文字(「metacols」を参照)を指定します。次に例を示します。
gg.handler.handler1.format.endTxChar=E
レコードを完全なトランザクション(トランザクション全体と呼ばれる)と識別するために使用されるヘッダー・メタデータ文字(「metacols」を参照)を指定します。次に例を示します。
gg.handler.handler1.format.wholeTxChar=W
挿入操作を識別する文字を指定します。デフォルトは、Iです。
たとえば、挿入操作の場合、IのかわりにINSを使用するには、次のようにします。
gg.handler.handler1.format.insertChar=INS
更新操作を識別する文字を指定します。デフォルトは、Uです。
たとえば、更新操作の場合、UのかわりにUPDを使用するには、次のようにします。
gg.handler.handler1.format.updateChar=UPD
削除操作を識別する文字を指定します。デフォルトは、Dです。
たとえば、削除操作の場合、DのかわりにDELを使用するには、次のようにします。
gg.handler.handler1.format.deleteChar=DEL
行末文字を指定します。
EOL - ネイティブ・プラットフォーム
CR - ニュートラル(UNIXスタイル\n)
CRLF - Windows (\r\n)
次に例を示します。
gg.handler.handler1.format.endOfLine=CR
次のプロパティは、出力をファイルに書き込むハンドラ(fileハンドラおよびsinglefileハンドラ)にのみ適用されます。
次のプロパティが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
次に、設定可能なJMSプロパティと許容される値について簡単に説明します。これらは、jms_text (TextMessage)およびjms_map (MapMessage)の両方のJMSハンドラ・タイプに適用されます。
メッセージが送信されるキューまたはトピック。これは、JMSサーバーで適切に構成される必要があります。一般的な値は、queue/A、queue.Test、example.MyTopicなどです。
gg.handler.name.destination=queue_or_topic
(オプション)JMSサーバーへのメッセージの送信に必要なパスワード
gg.handler.name.password=password
ハンドラがキューに送信する(単一受信者)か、トピックに送信する(パブリッシュ/サブスクライブ)か。これは、JMSプロバイダで適切に構成される必要があります。このプロパティは、gg.handler.name.destinationの別名です。構文は次のとおりです。
gg.handler.name.queueOrTopic={queue|topic}
説明:
queue - メッセージは読み取られると、削除されます。これはデフォルトです。
topic - メッセージはパブリッシュされ、複数のサブスクライバに配信されます。
配信モードが永続に設定されているかどうか。メッセージが永続の場合、クライアントの送信操作の一環としてメッセージを安定的なストレージに記録するようJMSプロバイダを構成する必要があります。構文は次のとおりです。
gg.handler.name.persistent={true|false}
JMSで、0を最低、9を最高とする10段階の優先度の値が定義されます。デフォルトでは優先度は4に設定されます。構文は次のとおりです。
gg.handler.name.priority=integer
次に例を示します。
gg.handler.name.priority=5
生成されたメッセージがメッセージ・システムによって保持される時間のディスパッチ時間からの長さ(ミリ秒)。値0は、時間が無制限であることを指定します。デフォルトは、0です。構文は次のとおりです。
gg.handler.name.timeToLive=milliseconds
次に例を示します。
gg.handler.name.timeToLive= 36000
JNDIを介して検索する接続ファクトリの名前。ConnectionFactoryJNDINameは別名です。構文は次のとおりです。
gg.handler.name.connectionFactory=JNDI_name
gg.handler.name.usejndiがfalseの場合、JNDIはJMSクライアントの構成に使用されません。かわりに、ファクトリおよび接続が明示的に構築されます。構文は次のとおりです。
gg.handler.name.useJndi={true|false}
JNDIを使用しない場合にのみ接続URLを使用して明示的に接続を作成します。構文は次のとおりです。
gg.handler.name.connectionUrl=url
JNDIを使用しない場合にのみ接続ファクトリ・クラスを使用してファクトリにアクセスします。このプロパティの値は、ファクトリ・オブジェクトを明示的にインスタンス化および構築するJavaクラス名です。
gg.handler.name.connectionFactoryClass=java_class_name
ローカル・トランザクションを使用するかどうかを指定します。デフォルトはtrueで、ローカル・トランザクションが使用されます。構文は次のとおりです。
gg.handler.name.localTX={true|false}
これらのプロパティは、トランザクションのグループ化に限度を設定します。
|
注意: グループ・トランザクション・プロパティを使用する場合、次のようにする必要があります。
|
トランザクションが送信されるまでに累積される操作の最小数を指定します。
構文は次のとおりです。
gg.handler.name.minGroupSize=number_ops
説明:
number_opsは、トランザクションが送信されるまでに累積される操作の最小数を指定します。
最大許容値は、integer.MAX.VALUEまたは2147483647です。最小値は1です。
両方のプロパティを使用する場合、gg.handler.name.minGroupSizeに設定する値は、gg.handler.name.maxGroupSizeに設定する値以下である必要があります。
次の例では、送信までの最小操作数が50の場合をテストします。
gg.handler.name.minGroupSize=50
トランザクションの送信がトリガーされる操作の最大数を指定します。
構文は次のとおりです。
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
これらのJNDIプロパティは、接続ファクトリと初期宛先を検索するための初期コンテキストへの接続に必要です。
java.naming.provider.url=urljava.naming.factory.initial=java-class-name
JNDIセキュリティが有効な場合、次のプロパティを設定できます。
java.naming.security.principal=user-namejava.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