WKテーブルが固まる。
環境
XPA4.9PT1 26~Jul-2023
DB SQLServer(ManageMentStudioV18.6)
現象 伝票入力処理で
1.実データ → WKテーブルDBに複写後
2.WKテーブルにて明細入力操作
3.終了時にWKテーブル→実データへ更新
単体テストでは、正常にテーブルに更新される。
メニュープログラムより伝票入力処理
3.WKテーブル→実データへ更新のときにWKテーブルが固まる。
メニュープログラムでは、特殊なことはおこなっていない。
(GetParam、SetParamをおこなっております。
はずしてみましたが改善されません。)
単体テストのときWKテーブルをMMSで表示することはできます。
メニュー起動時のときは、WKテーブルをMMSで表示すると固まってしまいます。
何を調査すればよいかヒントをいただければと思います。
-
WKテーブルはメモリテーブルではなくSQL上に作成しているということでしょうか?
メニュー起動時にSSMSでテーブルが開けないとなると、何らかのロックがかかっている可能性があります。
メニュープログラムのトランザクションはどうなっていますか?
メニューのトランザクションが物理でトランザクションをオープンするようになっていると、それ以降呼び出されたプログラムの更新がすべてメニュープログラムのトランザクションに含まれますので、メニューのトランザクションを終了しないとデータコミットされなくなります。
メニュープログラムでデータの更新等を行っていないのであるならば、メニュープログラムのトランザクション開始を無しにしてみたらいかがでしょうか?
-
umemoriさん、
y-yoshiさんのご指摘はするどいご指摘だと思います。私もそう思います。
ちなみに、ワークテーブルはMagicのMemoryテーブルを使うか、あるいは遅延トランザクションそのものをワークとして使うかにしたほうがよろしいかと思いますよ。
-
yoshiさんのおっしゃる通りです。WKテーブルはSQLなので
メニュー親プログラム、コールされる入力系プログラムのトランザクションをすべて見直したところ
改善されました。ありがとうございます。
-
umemoriさん、
メニュープログラムは無条件にトランザクション無しで構わないのですが、それ以外のコールプログラムは、トランザクションを無しに設定すると排他制御が効かなくなるので注意が必要ですよ。
-
いつもありがとうございます。承知しました。
-
お役に立てたようで何よりです。
私も昔同じことに引っかかって泣きを見ましたので…。
障害発生時のロールバックの為のトランザクションの開き方にはいつも頭を悩ませてます。
ちなみにtandaさんのおっしゃる通り、特段の理由が無ければ一時テーブルはmemoryを使うか遅延トランを使った方がいいですよね。
遅延は若干扱いが難しいこともあって、出始めのころメモリテーブルを作るのをやめたくて実験的に遅延使ったら大火傷したことがありましたが、仕組みを覚えれば便利かと思います。
サインインしてコメントを残してください。
コメント
6件のコメント