• 検索結果がありません。

リモートのデータベースアクセスに関する注意事項

ドキュメント内 PowerRDBconnector説明書(SQLServer編) (ページ 116-129)

第4章 COBOLアプリケーションの開発について

4.2 注意事項

4.2.5 リモートのデータベースアクセスに関する注意事項

4.2 注意事項 

本節では、「4.1 開発のポイント」で説明した開発手法が適用できない場合の注意事項を説明し ます。 

4.2.1 トランザクションに関する注意事項 4.2.2  排他制御に関する注意事項

4.2.3  COBOLアプリケーションに関する注意事項 4.2.4  マルチセッション使用時の注意事項

4.2.5  リモートのデータベースアクセスに関する注意事項  

4.2.1 トランザクションに関する注意事項 

ここでは、トランザクションに関する注意事項を説明します。 

 

4.2.1.1 トランザクションの確定、取消しを実行せずに終了した場合 

COBOLアプリケーションではトランザクションの確定または取消し、およびファイルのクローズ を行ってください。 

トランザクションサブルーチンを使用するCOBOLアプリケーションにおいて、トランザクション の確定または取消し、およびファイルをクローズせずにCOBOLアプリケーションが終了した場合、

トランザクションは以下のようになります。 

● トランザクションの確定または取消しを行わずに全てのファイルをクローズした場合、トラ ンザクションは取り消されます。 

                 

図4.1 トランザクションの確定、取消しを実行しない場合  のトランザクション処理 

                         

入出力文COBOLアプリケーション

OPEN

CALL "XMROTSTR"

READ REWRITE

CLOSE

“XMROTEND”、“XMROTCNL”

サブルーチンを呼び出して いません。 

CLOSE時にトランザクショ ンは取り消されます。 

● トランザクションの確定または取消し、およびファイルをクローズせずにアプリケーション が終了した場合、トランザクションは取り消されます。 

                         

図4.2 トランザクションの確定、取消しおよびCLOSEを実行しない場合  のトランザクション処理 

 

● タスクマネージャなどでCOBOLアプリケーションを強制終了した場合、データベースにより、

トランザクションは取り消されます。 

● COBOLアプリケーションが、トランザクションを終了(確定または取消し)する前に、アプリ ケーションエラーで中断した場合、データベースにより、トランザクションは取り消されま す。 

● COBOLアプリケーション動作中に、データベースサービスを中断またはネットワークを中断し た場合、トランザクションは取り消されます。 

                                   

図4.3 プログラム中断した場合のトランザクション処理   

 

入出力文COBOLアプリケーション

OPEN

CALL "XMROTSTR"

READ REWRITE

EXIT PROGRAM

“XMROTEND”、“XMROTCNL”

サブルーチンを呼び出して いません。 

CLOSEを実行していません。 

プログラム終了時に、代行 CLOSEされます。そのとき に、トランザクションは取 り消されます。 

入出力文COBOLアプリケーション

OPEN

CALL "XMROTSTR"

READ REWRITE

CALL "XMROTEND"

または

CALL "XMROTCNL"

CLOSE

EXIT PROGRAM

・  COBOLアプリケーションの 強制終了 

・  アプリケーションエラー による中断 

・  データベースサービスの 中断 

データベースにより、トラ ンザクションは取り消され ます。 

プログラム中断 

   

4.2.1.2 テーブルロック機能とトランザクションについて 

テーブルロックを指定したファイルをオープンすると、強制的にトランザクションを開始するた め、テーブルロックを指定したファイルのオープン中は、トランザクションの操作(開始、確定、

取消し)が無効となります。トランザクションサブルーチンのCALL文は何もせず、正常に復帰し ます。テーブルロックが有効なファイルが全てクローズされた時点でデータを確定します。 

このため、できるだけテーブルロックとトランザクションを同時に使わないようお勧めします。

同時に使った場合には、トランザクションは以下のようになります。 

 

テーブルロック開始後にトランザクションの開始が行われる場合。 

テーブルロック区間に含まれるトランザクション区間内で更新されたデータの反映や、取消しは、

テーブルロック解除時の更新データの扱いと同じに扱われます。 

このため、テーブルロック解除時のトランザクション取消し機能が実行されると、トランザクシ ョン区間内の更新も取り消されます。テーブルロックについては、「3.5.3 テーブルロック機能」

を参照してください。 

テーブルロックが解除されたとき、トランザクション区間が続いている場合には、テーブルロッ ク解除したときにトランザクションが開始されます。 

このため、トランザクションの取り消しが実行されると、テーブルロック解除時からのトランザ クション区間内の更新だけが取り消されます。 

                                 

入出力文COBOLアプリケーション

ファイルA:“テーブルロック指定"

OPEN ファイルA

READ REWRITE

CLOSE ファイルA

間 

OPEN ファイルB

CALL "XMROTSTR"

READ REWRITE

READ REWRITE

CALL "XMROTEND"

CLOSE  ファイルB

図4.4 テーブルロック開始後にトランザクションが開始された場合  のトランザクション処理 

                   

無効 

トランザクション 区間内で更新され たデータの反映、

取消しは、テーブ ルロック解除時の 振る舞いに依存し ます。 

テーブルロックが 解除されるため、

ここからトランザ クションが開始さ れます。 

   

テーブルロック開始前にトランザクションの開始が行われる場合。 

テーブルロックが開始されたとき、既に開始されているトランザクション区間があった場合には、

テーブルロック開始したときまでに更新されたデータは確定されます。 

テーブルロック区間に含まれるトランザクション区間内で更新されたデータの反映や、取消しは、

テーブルロック解除時の更新データの扱いと同じに扱われます。 

このため、テーブルロック解除時のトランザクション取消し機能が実行されると、トランザクシ ョン区間内の更新も取り消されます。テーブルロックについては、「3.5.3 テーブルロック機能」

を参照してください。 

                               

図4.5 テーブルロック開始後にトランザクションが開始された場合  のトランザクション処理 

                                   

OPEN ファイルA

READ REWRITE

CLOSE ファイルA

間 

入出力文COBOLアプリケーション

OPEN ファイルB

CALL "XMROTSTR"

READ REWRITE

READ REWRITE

CALL "XMROTEND"

CLOSE  ファイルB ファイルA:テーブルロック指定"

無効 

テ ー ブ ル ロ ッ ク が 開 始 さ れ る た め、トランザクシ ョ ン 区 間 内 で こ こ ま で に 更 新 さ れ た デ ー タ は 確 定されます。 

トランザクション 区間内で更新され たデータの反映、

取消しは、テーブ ルロック解除時の 振る舞いに依存し ます。 

   

4.2.2 排他制御に関する注意事項 

 

4.2.2.1 COBOLアプリケーションを終了した場合 

テーブルロックまたはレコードロックを獲得した状態で、クローズせずにCOBOLアプリケーショ ンが終了した場合、以下の注意事項があります。 

 

● テーブルロックで強制的に開始されたトランザクションは確定されます。 

トランザクションを取消す場合は、トランザクションサブルーチンのテーブルロック解除時 の取消しを実行してください。 

● テーブルロックまたはレコードロックの解放が遅れる場合があります。 

このため、直後に実行するCOBOLアプリケーションでタイムアウトまたは排他エラーが発生す る場合があります。しばらくしてからCOBOLアプリケーションを再実行してください。 

 

4.2.2.2 削除したレコードの待合せについて 

UNIQUE制約のインデックスを持つテーブルに対して、以下の条件を満たす場合には、WRITE文で レコードロックの待ち合わせが発生します。 

● レコードロックを獲得し、かつ、レコードを削除する場合。 

● レコードロックを解放していない状態にて、他のセッションやアプリケーションから削除し たレコードと同一のキー値に対し、レコードの書き込みを行う場合。 

 

4.2.2.3 テーブルロックの排他制御について 

テーブルロックを使用するセッションでは、ファイルのOPEN文で強制的にトランザクションを開 始してCLOSE文でトランザクションを確定することでテーブルロックを実現します。テーブルロ ックの排他制御で動作するトランザクションについて、以下の注意があります。 

 

● トランザクションは、テーブルロックが有効なファイルが全てクローズされるまで確定しま せん。(参考例2を参照) 

● 排他モードが変化しない場合があります。 

例えば、1つのアプリケーションで、ファイルAをオープン中に、ファイルBをI-Oオープン (Exclusive)した後、一旦クローズしてINPUTオープン(Share)しても、先に排他モードが強い Exclusive(占有モード)でロックされているため、ファイルBは、Exclusive(占有モード)のま まとなります。(参考例3を参照) 

● テーブルロックを指定したファイルのオープン中に、テーブルロックを指定しないファイル を操作する場合、テーブルロックの強制的なトランザクションに従って操作されます。(参考 例4を参照) 

 

参考として、1つのアプリケーションが1つまたは2つのファイルを使用した入出力文操作順序 の組合せによるトランザクション区間の遷移を示します。 

トランザクション区間は以下の表記です。 

 

     

       参考例1)1ファイルの単純な入出力操作の場合 

               

       参考例2)トランザクション区間がファイルAの入出力操作に依存する場合 

       ファイルAのオープン中にファイルBがオープンされるため、テーブルロックはテー ブルロック対象の全てのファイルがクローズするまで区間が延長されます。 

                     

       参考例3)排他モードが変化しない場合 

       1つのアプリケーションで、ファイルAをオープン中に、ファイルBをI-Oオープン (Exclusive) し た 後 、 INPUT オ ー プ ン (Share) し て も 、 先 に 排 他 モ ー ド が 強 い Exclusive(占有モード)でロックされているため、ファイルBは、Exclusive(占有モ ード)のままとなります。(網掛け部分に注意してください。) 

                                 

 

  ファイルA 

OPEN I-O    :  CLOSE  ト ラ ン ザ ク

ション区間 

 

  ファイルA        ファイルB  OPEN I-O 

OPEN I-O   :      : 

CLOSE  CLOSE 

  ト ラ ン ザ ク

ション区間 

 

  ファイルA        ファイルB  OPEN I-O 

OPEN INPUT        : 

CLOSE 

:  OPEN I-O    :      : 

CLOSE  OPEN INPUT 

:  CLOSE 

:  CLOSE 

ト ラ ン ザ ク ション区間 

Share  獲得区間 

Exclusive 獲得区間 

ドキュメント内 PowerRDBconnector説明書(SQLServer編) (ページ 116-129)