6.2.11 注意事項
(1) SQL関連の注意事項
-
リソースマネジャへの接続や切断を行う権限は,トランザクションマネジャにあります。UAPにリソースマネジャへの接続又は切断を行うSQL文を記述しないでください。また,トランザクションの進行を調整し監視する権限も,トランザクションマネジャにあります。UAPにトランザクションをロールバック又はコミットするSQL文を記述しないでください。したがって,EXEC SQL COMMIT WORK文,EXEC COMMIT WORK RELEASE文などもエラーになります。
-
定義系SQL文はエラーとなります。CREATE TABLEなどの定義系SQL文は自動的にコミットを指示するため,UAPに定義系SQL文を記述しないでください。
(2) マルチスレッド用のライブラリに関する注意事項
一つのトランザクションからHiRDBサーバに対して複数のスレッドを使用して別々に接続できません。マルチスレッド環境であってもトランザクションから接続するHiRDBサーバのサーバプロセスは一つです。したがって,一つのトランザクションから同時に実行できるスレッドは一つであり,同一トランザクション内で複数のスレッドを使用してSQL文を同時に実行できません。
(3) 一相最適化に関する注意事項
HiRDBはトランザクションマネジャがサポートしている一相最適化に対応しています。トランザクションマネジャはトランザクションブランチによって変更した共有リソースがHiRDBだけの場合,トランザクションブランチに対して一相コミットを要求できます。トランザクションマネジャが一相最適化を使用して一相コミットを要求してきた場合,HiRDBはトランザクションブランチの結果を決めた後,トランザクションブランチの情報を削除してトランザクションマネジャへ応答を返します。
一相最適化を使用しているトランザクションマネジャでは,グローバルトランザクションに関して安定ストレージに記憶する必要もなく,何らかの障害が発生してもその結果を知る必要もありません。したがって,次に示す条件をすべて満たす場合,トランザクションの完了種別がトランザクションマネジャとHiRDBで一致しないことがあります。
-
一相最適化を使用するトランザクションマネジャとXAインタフェースを使用して接続している
-
更新系トランザクションのコミットメント制御をトランザクションマネジャが一相最適化している
-
コミットメント処理中にトランザクションマネジャのUAPが異常終了する
これらの条件下では,HiRDBのトランザクションブランチの結果を,トランザクションマネジャが発生した障害の結果として知ることができません。そのため,トランザクションの完了種別がトランザクションマネジャとHiRDBで一致しないことがあります。
これを防ぐには,更新系トランザクションのコミットメント制御をする場合,トランザクションマネジャの一相最適化を使用しないでください。
(4) 高速系切り替え機能を使用している場合の注意事項
次に示す条件をすべて満たす場合は注意が必要です。
-
HiRDB/パラレルサーバの場合はシステムマネジャがあるユニットを高速系切り替え機能の対象にしている
-
X/Openに従ったAPIを使用したOLTP製品(OpenTP1又はTPBroker for C++など)と連携している
-
HiRDBクライアントのバージョンが06-02-/A以前である
-
OLTP製品のクライアント環境変数PDHOSTに指定している現用系が待機系として待機完了状態になっている
この場合,OLTP製品が未決着トランザクションの回復処理をすると,X/Openに従ったAPIがエラーリターンしてトランザクションが回復されないことがあります。この現象が発生する場合は,HiRDBクライアントのバージョンを06-02-/B以降にバージョンアップしてください。業務を停止させたくないなどの理由でHiRDBクライアントのバージョンアップがすぐにできない場合は,現用系のHiRDB(ユニット)を待機系から実行系に系を切り替えてください。ただし,これは一時的な対応策です。HiRDBクライアントのバージョンアップで対応してください。