ジャーナル取得業務のアプリケーションは、取得定義で指定したSQL Serverのテーブルを更新するアプリケーションです。
ここでは、ジャーナル取得業務のアプリケーションについて説明します。
ジャーナル取得機能を起動してから開始したトランザクションが、ジャーナルの取得対象となります。トランザクションがCOMMITした時点で、ジャーナルがジャーナル取得ファイルに格納されます。
以下の場合は、トランザクション内で更新されたジャーナル取得対象のテーブルに対するジャーナルは一切取得されません。
トランザクションをROLLBACKした
トランザクションの途中でアプリケーションが異常終了した
また、以下の場合についてもジャーナルは一切取得されません。
SQL ServerのBCPユーティリティを使用してジャーナル取得対象のテーブルを更新した。
SQL ServerのBULK INSERTステートメントを使用してジャーナル取得対象のテーブルを更新した。
Microsoft SQL Server Management Studioのインポートウィザードを使用してジャーナル取得対象のテーブルを更新した。
SQL Server Integration ServicesのBULK INSERTステートメントを使用してジャーナル取得対象のテーブルを更新した。(注)
SQL Server Integration ServicesのData Flowメソッドを使用してジャーナル取得対象のテーブルを更新した。(注)
注)プロパティおよび詳細設定に「トリガーを起動する」を選択しないでください。
"図13.21 ジャーナル取得契機"にジャーナル取得契機を示します。
この例で示すアプリケーションにおけるテーブルの更新に対するジャーナルの取得結果は、以下のようになります。
アプリケーション1は、ジャーナル取得機能を起動する前に、アプリケーションがジャーナルの取得対象となっているテーブルを更新しています。このため、ジャーナルは取得されません。
アプリケーション2は、ジャーナル取得機能を起動した後に、アプリケーションがジャーナルの取得対象となっているテーブルを更新しています。このため、アプリケーションがトランザクションをCOMMITした時点で、ジャーナルがジャーナル取得ファイルに格納されます。
アプリケーション3は、ジャーナル取得機能を起動した後にジャーナルの取得対象となっているテーブルを更新していますが、トランザクションをROLLBACKしています。このため、アプリケーション3でジャーナルの取得対象となっているテーブルを更新していても、ジャーナルは取得されません。
アプリケーション4は、ジャーナル取得機能を起動した後にジャーナルの取得対象となっているテーブルを更新していますが、トランザクションを終了させる前にアプリケーションが異常終了しています。このため、アプリケーション4でジャーナルの取得対象となっているテーブルを更新していても、ジャーナルは取得されません。
TJNLではジャーナルデータに取得順序情報を付加し、トランザクション単位にまとめてジャーナル取得ファイルに格納します。取得順序情報は各トランザクションの最終更新SQLの実行順序を示す情報です。
ジャーナルを取得する契機は"13.6.3.1 ジャーナルの取得契機"で説明したようにトランザクションがCOMMITされた時点です。
ジャーナル配付機能は、ジャーナル取得ファイルに格納されたジャーナルの中から取得順序情報の小さい順にトランザクションのジャーナルを取り出し、利用ジャーナルとしてメッセージキューに配付します。
ジャーナルの取得順序について、"図13.22 SQL Server連携時における利用ジャーナルの取得順序"に示します。
この図では、トランザクションを先にCOMMITしたのはAPL1、最終更新SQLを先に実行したのはAPL2です。従って、取得順序情報はAPL2のトランザクション→APL1のトランザクションの順に昇順で設定されます。
一方、ジャーナル取得ファイルにジャーナルを取得するタイミングはAPL1のトランザクションが先になります。これら2つのジャーナルを取得した後でジャーナル配付機能を起動した場合には、利用ジャーナルは取得順序情報の昇順、すなわちAPL2のトランザクション→APL1のトランザクションの順にメッセージキューに格納されます。(つまり、トランザクションのCOMMIT順に配付されるわけではありません。)
ただし、あらかじめジャーナル配付機能を起動した状態でこれら2つのジャーナルを取得した場合には、トランザクションがCOMMITされた順、すなわちAPL1のトランザクション→APL2のトランザクションの順にメッセージキューに格納される可能性があります。(各機能の動作タイミングによっては取得順序情報の昇順にメッセージキューに格納されることもあります。)
ジャーナル取得時に異常が発生した場合は、発行したSQL文が異常終了します。TJNLに起因する異常が発生した場合のエラー番号、SQL Serverのエラーメッセージおよび対処を"表13.30 TJNLに起因するSQL文の異常終了"に示します。
"表13.30 TJNLに起因するSQL文の異常終了"にないエラーが発生した場合には、通常のデータベース更新アプリケーションと同様に対処してください。
エラー番号 | SQL Serverのエラーメッセージ | 対処 |
---|---|---|
TJNL環境定義の[TJNLDefinition]セクションのExCodeで指定した値、または50001 | An error occurred in TJNL | イベントログにTJNLのエラーメッセージが出力されています。イベントビューアのアプリケーションログを参照の上、対処してください。 |
SQLのUPDATE文によって発生するジャーナルの取得方法を選択することができます。UPDATE文によって発生するジャーナルの取得方法には、以下の2種類があります。
DELETEとINSERTの情報として配付する
UPDATEの情報として配付する
DELETEとINSERTの情報として配付する
DELETEとINSERTの情報として配付する方法では、1件の更新で2件のジャーナルが取得されます。この形式は、更新前の情報と更新後の情報の両方が必要な場合に使用します。
UPDATEの情報として配付する
UPDATEの情報として配付する方法では、更新後の情報だけが取得されます。この形式は、キーとなる項目がジャーナル取得対象となっていて、更新後の情報だけでジャーナル利用側業務が行える場合に使用します。
UPDATE文によって発生するジャーナルの取得方法の指定は、環境作成時や動作環境変更時に行います。環境作成で指定する方法は"13.4.4 環境定義の記述"を、動作環境変更で指定する方法は"13.9.1.3 動作環境変更定義の記述"を参照してください。
NCHAR型(各国語固定長文字列)およびNVARCHAR型(各国語可変長文字列)の列をジャーナル取得対象とする場合、その列は各国語文字(全角文字)で更新するようにしてください。半角英数字で更新すると、不正な値が利用ジャーナルとして配付されます。