ジャーナル取得業務のアプリケーションは、取得定義で指定したOracleのテーブルを更新するアプリケーションです。
ここでは、ジャーナル取得業務のアプリケーションについて説明します。
なおLinuxサーバの場合、ジャーナル取得業務のアプリケーションを実行するユーザはTRM利用者グループに所属している必要があります。詳細は"12.3.2.4 アプリケーション実行ユーザの所属グループの設定"を参照してください。
ジャーナル取得機能を起動してから開始したトランザクションが、ジャーナルの取得対象となります。トランザクションがCOMMITした時点で、ジャーナルがジャーナル取得ファイルに格納されます。
以下の場合は、トランザクション内で更新されたジャーナル取得対象のテーブルに対するジャーナルは一切取得されません。
トランザクションをROLLBACKした
トランザクションの途中でアプリケーションが異常終了した
また、以下の場合についてもジャーナルは一切取得されません。
OracleのSQL*Loaderをダイレクト・パス・ロードで使用してジャーナル取得対象のテーブルを更新した。なお、従来型パス・ロードを使用した場合は、ジャーナルが取得されます。
"図12.19 ジャーナル取得契機"にジャーナル取得契機を示します。
この例で示すアプリケーションにおけるテーブルの更新に対するジャーナルの取得結果は、以下のようになります。
アプリケーション1は、ジャーナル取得機能を起動する前に、アプリケーションがジャーナルの取得対象となっているテーブルを更新しています。このため、ジャーナルは取得されません。
アプリケーション2は、ジャーナル取得機能を起動した後に、アプリケーションがジャーナルの取得対象となっているテーブルを更新しています。このため、アプリケーションがトランザクションをCOMMITした時点で、ジャーナルがジャーナル取得ファイルに格納されます。
アプリケーション3は、ジャーナル取得機能を起動した後にジャーナルの取得対象となっているテーブルを更新していますが、トランザクションをROLLBACKしています。このため、アプリケーション3でジャーナルの取得対象となっているテーブルを更新していても、ジャーナルは取得されません。
アプリケーション4は、ジャーナル取得機能を起動した後にジャーナルの取得対象となっているテーブルを更新していますが、トランザクションを終了させる前にアプリケーションが異常終了しています。このため、アプリケーション4でジャーナルの取得対象となっているテーブルを更新していても、ジャーナルは取得されません。
TJNLではジャーナルデータに取得順序情報を付加し、トランザクション単位にまとめてジャーナル取得ファイルに格納します。取得順序情報は各トランザクションの最終更新SQLの実行順序を示す情報です。ジャーナルを取得する契機は"12.6.3.1 ジャーナルの取得契機"で説明したようにトランザクションがCOMMITされた時点です。ジャーナル配付機能は、ジャーナル取得ファイルに格納されたジャーナルの中から取得順序情報の小さい順にトランザクションのジャーナルを取り出し、利用ジャーナルとしてメッセージキューに配付します。ジャーナルの取得順序について、"図12.20 Oracle連携時における利用ジャーナルの取得順序"に示します。
この図では、トランザクションを先にCOMMITしたのはAPL1、最終更新SQLを先に実行したのはAPL2です。従って、取得順序情報はAPL2のトランザクション→APL1のトランザクションの順に昇順で設定されます。一方、ジャーナル取得ファイルにジャーナルを取得するタイミングはAPL1のトランザクションが先になります。これら2つのジャーナルを取得した後でジャーナル配付機能を起動した場合には、利用ジャーナルは取得順序情報の昇順、すなわちAPL2のトランザクション→APL1のトランザクションの順にメッセージキューに格納されます。(つまり、トランザクションのCOMMIT順に配付されるわけではありません。)ただし、あらかじめジャーナル配付機能を起動した状態でこれら2つのジャーナルを取得した場合には、トランザクションがCOMMITされた順、すなわちAPL1のトランザクション→APL2のトランザクションの順にメッセージキューに格納される可能性があります。(各機能の動作タイミングによっては取得順序情報の昇順にメッセージキューに格納されることもあります。)
ジャーナル取得時に異常が発生した場合は、発行したSQL文が異常終了します。TJNLに起因する異常が発生した場合のSQLSTATE、Oracleのエラーメッセージおよび対処を"表12.34 TJNLに起因するSQL文の異常終了"に示します。"表12.34 TJNLに起因するSQL文の異常終了"にないエラーが発生した場合には、通常のデータベース更新アプリケーションと同様に対処してください。
SQLSTATE | Oracleのエラーメッセージ | 対処 |
---|---|---|
72000 | (注)ORAXXXXXX:An error occurred in TJNL | コンソールにTJNLのエラーメッセージが出力されています。"第15章 メッセージ"で該当するエラー番号を参照の上、対処してください。 |
63000 | ORA-03113: 通信チャネルでファイルの終わりが検出されました。 | コンソールにTJNLのエラーメッセージが出力されている場合は、"第15章 メッセージ"で該当するエラー番号を参照のうえ対処してください。 |
99999 | ORA-28575: 外部プロシージャ・エージェントへのRPC接続をオープンできません。 | Oracle Netリスナーを起動してください。起動方法については"12.6.1.1 Oracleデータベースの起動"を参照してください。 |
注)XXXXXXはTJNL環境定義の[TJNLDefinition]セクションのExCodeで指定した値です。
SQLのUPDATE文によって発生するジャーナルの取得方法を選択することができます。UPDATE文によって発生するジャーナルの取得方法には、以下の2種類があります。
DELETEとINSERTの情報として配付する
UPDATEの情報として配付する
DELETEとINSERTの情報として配付する
DELETEとINSERTの情報として配付する方法では、1件の更新で2件のジャーナルが取得されます。この形式は、更新前の情報と更新後の情報の両方が必要な場合に使用します。
UPDATEの情報として配付する
UPDATEの情報として配付する方法では、更新後の情報だけが取得されます。この形式は、キーとなる項目がジャーナル取得対象となっていて、更新後の情報だけでジャーナル利用側業務が行える場合に使用します。
UPDATE文によって発生するジャーナルの取得方法の指定は、環境作成時や動作環境変更時に行います。環境作成で指定する方法は"12.4.4 環境定義の記述"を、動作環境変更で指定する方法は"12.9.1.3 動作環境変更定義の記述"を参照してください。
NCHAR型(各国語固定長文字列)およびNVARCHAR2型(各国語可変長文字列)の列をジャーナル取得対象とする場合、その列は日本語文字(全角文字)で更新するようにしてください。半角英数字で更新すると、不正な値が利用ジャーナルとして配付されます。