Connection Managerを利用したアプリケーションを作成する場合の注意事項について説明します。
アプリケーション中で、SQL文の実行結果は状態変数のSQLSTATEに通知されます。したがって、アプリケーションは、SQL文を実行するたびにSQLSTATE値をチェックして、RDBの処理結果を確認しながら処理を進めることができます。待ち時間オーバやノードダウンによってコネクションが切断されるSQLSTATE値を以下に示します。
C/COBOLアプリケーション、Javaアプリケーション、ODBCアプリケーションのいずれの場合も、以下のSQLSTATE値が通知されます。
SQLSTATE値 | 意味 |
---|---|
40003 | 文終了不明(処理時間オーバまたは強制終了) |
40703 | アクセス中のノードダウン |
これらのSQLSTATE値が返却された場合、Connection Managerを使用していなければ、アプリケーションはコネクションの再接続処理を行う必要があります。ただし、Connection Managerを使用しているならば、アプリケーションでコネクションの再接続処理を行う必要はありません。
そのため、アプリケーションは、コネクションの処理とトランザクションの処理を完全に分離することが可能になり、アプリケーションの処理構造を単純化することが容易となります。
また、Connection Managerのプロセスが強制終了した場合、以下のSQLSTATE値が通知されます。
SQLSTATE値 | 意味 |
---|---|
40705 | Connection Managerの強制終了 |
このSQLSTATE値が返却された場合、コネクションは切断されます。また、Connection Managerが終了しているため、コネクションの再接続処理は行われません。
運用ノードまたは引継ぎ元ノードのノードダウンが発生した場合、アプリケーションにはSQLSTATE値に“40703”が返却されます。この時、アプリケーションのコネクションは切断されません。
アプリケーションはコネクションの再接続を行う必要はなく、トランザクションを最初から実行し直します。接続先データベースサーバは、待機ノードまたは引継ぎ先ノードに切り替わり、トランザクションが実行されます。
接続先データベースサーバがフェイルオーバ運用を行っている場合の例を、以下に示します。
また、実際に運用ノードまたは引継ぎ元ノードのノードダウンが発生した場合に、アプリケーションのトランザクションを再開する時に、以下の点に注意してください。
アプリケーションがトランザクションを開始した時に、ノードの切替え処理または縮退処理を行っている場合、Connection Managerはノードの切替え処理または縮退処理が完了するまでSQL文の実行要求を待機します。
この処理待ち時間は、以下のパラメタを指定することで、制御可能です。
C/COBOLアプリケーションの場合は、動作環境ファイルのWAIT_TIMEパラメタを指定します。
Javaアプリケーションの場合は、JDBCデータソース登録ツールの[JDBCデータソースオプション設定]画面で、[その他パラメタ]にCLI_WAIT_TIMEパラメタを指定します。指定方法は以下のとおりです。
ctuneparam='CLI_WAIT_TIME=(待ち時間)'
参照
JDBCデータソース登録ツールの詳細については、“アプリケーション開発ガイド(JDBCドライバ編)”を参照してください。
ODBCアプリケーションの場合は、ODOSのODBCデータソースを設定する[Symfoware/RDBオプション設定]画面で、[その他パラメタ]にCLI_WAIT_TIMEパラメタを指定します。指定方法は以下のとおりです。
CLI_WAIT_TIME=(待ち時間)
参照
ODBCデータソース設定の詳細については、“アプリケーション開発ガイド(ODBCドライバ編)”を参照してください。
なお、上記パラメタに指定した時間内に処理が完了しなかった場合、タイムアウトとなり、SQLSTATE値に“40003”が返却されますが、コネクションは切断されません。要求に応じて再度トランザクションを再開してください。
接続先データベースサーバがフェイルオーバ運用を行っている場合、かつ、C/COBOLアプリケーションの場合のノードの切替え中のアクセス例を、以下に示します。
RDBシステムの組込みを行う場合の注意
データベースサーバでRDBシステムの組込みを行う場合は、業務を停止してから行ってください。RDBシステムを組み込むことにより、RDBシステムの起動とユーザロググループの切り戻しが自動的に行われます。
業務を停止しない場合、アプリケーションの振る舞いは以下になります。
なお、いずれの場合でもコネクションは切断されません。
切り戻し処理の開始時に、切り戻し対象のロググループへアクセスしたコネクションが、トランザクションを実行中の場合は、当該トランザクションをロールバックします。
切り戻し処理を開始してから完了するまでに発生した、切り戻し対象ロググループへの新規要求はエラーとなります。
また、業務を実行中に切り戻しが行われた場合、以下の SQLSTATEが発生する場合があります。この場合は、“ノードダウン時の対処”と同様の対処を行ってください。
40003
40703
71003
アプリケーションがマルチスレッド環境で動作する場合の注意
マルチスレッド環境で動作するアプリケーションがConnection Managerを利用する場合、以下のOSでは、アプリケーションの1プロセスあたりの最大コネクション数がSymfoware/RDBの定量制限とは異なります。
以下のOS以外は、Symfoware/RDBの定量制限の値に従います。
アプリケーションの1プロセスあたりの最大コネクション数は341となります。
アプリケーションの1プロセスあたりの最大コネクション数は341となります。
注意
上記の最大コネクション数はアプリケーションがコネクション以外にファイルディスクリプタを使用していない場合の最大値です。アプリケーションが他にファイルディスクリプタを使用している場合、最大コネクション数は以下となります。
最大コネクション数 = (1024 - 他に使用しているファイルディスクリプタ数) / 3
参照
Symfoware/RDBの定量制限の詳細については、“セットアップガイド”を参照してください。