我們有一個持續的,間歇性的問題,因爲一個SQLRPGLE程序無法將數據加載到屏幕上。一位同事剛剛想出如何可靠地重現它,所以我一直在調試器中進行調查。是什麼導致這種DB2 for i SQL奇怪?
該程序打開一個SQL遊標到遠程系統來填充一個子文件,如果用戶按下F5它關閉光標並重新打開它。在某些情況下,這會以一種有趣的方式失敗。
發現的可重複過程是首先運行該函數,退出,然後發出STRSQL(顯示遠程連接仍然有效)和CONNECT RESET。然後退出到命令行並重新啓動該功能。此功能在第一次顯示和按下F5 ONCE後。但在第二次按下F5鍵時,光標變得很奇怪,程序無法加載數據。
下面是我在調試器中運行的事件序列和每個關鍵SQL函數後面的SQLSTATE值。我檢查了每個顯示器的第一個FETCH,只是作爲一個完整性檢查。每次連接重新連接(可能不必要)到遠程系統。
Action SQLSTATE Meaning
Initial connect 0 OK
Open cursor 0 OK
First fetch 0 OK
F5 pressed
Close cursor 0 OK
Reconnect 8002 Already connected
Open cursor 0 OK
First fetch 0 OK
F5 pressed
Close cursor 0 OK
Reconnect 8002 Already connected
Open cursor 0 OK
First fetch 0 OK
Exit program
Close cursor 0 OK
STRSQL CONNECT
Reconnect 8002 Already connected
Open cursor 0 OK
First fetch 0 OK
F5 pressed
Close cursor 0 OK
Reconnect 8002 Already connected
Open cursor 0 OK
First fetch 0 OK
F5 pressed
Close cursor 0 OK
Reconnect 8002 Already connected
Open cursor 24502 Already open
First fetch 24501 Cursor not open
在運行CONNECT RESET之前,按下F5的循環無限期地工作。
退出函數後,返回它仍然顯示空列表(即光標問題仍然存在),但如果程序的激活組被回收,則第一個顯示和第一個F5再次工作,但第二個F5會導致光標再次發佈。
我試着運行RUNSQL SQL('CONNECT RESET'),並且這個失敗說沒有達到承諾邊界。它沒有更新任何文件,所以不知道這怎麼可能是問題。我們確實發現,在CONNECT重置可以解決問題之前,在STRSQL中運行COMMIT,但只是暫時像回收激活組一樣。
我們也嘗試將模型中的承諾控制設置爲* NONE,並將Close SQL遊標設置爲* ENDMOD,但似乎沒有任何區別。
我們肯定會感激任何建議,看看還有什麼!
什麼版本和發佈?您是否合理地使用PTF? – Charles
V6R1M1,是的,PTF上的合理電流。 – zkarj