Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ibm midrange 查找导致作业日志SQL错误的CGI RPG程序_Ibm Midrange - Fatal编程技术网

Ibm midrange 查找导致作业日志SQL错误的CGI RPG程序

Ibm midrange 查找导致作业日志SQL错误的CGI RPG程序,ibm-midrange,Ibm Midrange,我在IBMi上运行Apache,用于对使用嵌入式SQL的RPGILE程序进行CGI调用 我在这些程序中遇到了各种SQL错误(例如“需要指示符变量”和“游标未打开”),但我找不到导致这些问题的具体程序。此系统中有数百个程序,在错误消息上单击F1并不能指定源程序(消息是from/to'QSQRUN2') 我无法在调试模式下重新编译每个程序,这可能会提供更多信息(生产系统,一些源代码问题) 关于如何获取这些信息,您有什么想法吗?哪里有错误 你说的“点击F1…”是指点击F10=在作业日志中显示消息;从W

我在IBMi上运行Apache,用于对使用嵌入式SQL的RPGILE程序进行CGI调用

我在这些程序中遇到了各种SQL错误(例如“需要指示符变量”和“游标未打开”),但我找不到导致这些问题的具体程序。此系统中有数百个程序,在错误消息上单击F1并不能指定源程序(消息是from/to'QSQRUN2')

我无法在调试模式下重新编译每个程序,这可能会提供更多信息(生产系统,一些源代码问题)


关于如何获取这些信息,您有什么想法吗?

哪里有错误

你说的“点击F1…”是指点击F10=在作业日志中显示消息;从WRKACTJOB屏幕上的7=显示消息

如果是这样,请尝试5=使用,11=显示调用堆栈


如果作业没有进入MSGW,那么您的程序正在吞咽错误。要么是不恰当的,要么就是不做任何事情。或者在处理了问题(并且忽略了清理作业日志)或将您需要的数据记录到某个地方之后,正确地执行此操作。您只需找出位置。

下面是作业日志中消息的一个示例,它在“原因”中有一条语句,用于调用主机变量名。在本例中,它是“TCANDSBMDT”。这有助于缩小范围吗

Message ID . . . . . . :   SQL0305                                             
Date sent  . . . . . . :   08/06/12      Time sent  . . . . . . :   10:41:52   

Message . . . . :   Indicator variable required.                               

Cause . . . . . :   A FETCH, embedded SELECT, CALL, GET DESCRIPTOR, or a SET   
  or VALUES INTO statement has resulted in a null value, but an indicator      
  variable was not specified for host variable TCANDSBMDT. ...

@user2338816在评论中给出了这个答案

有一种简单的方法可以为特定作业添加SQL监控

STRDBMON OUTFILE(QGPL/DBMON) JOB(*ALL/QTMHHTTP/WEBSERVER) FTRSQLCODE(*NONZERO)
启动监视用户QTMHHTTP、作业Web服务器的所有作业(当前或未来)的监视器,记录所有发出警告或错误的语句

有关生成的QGPL/DBMON数据库文件的详细信息,请参阅


然后,如果需要一些上下文,您可以在作业日志中交叉引用作业编号/时间。

WRKACTJOB SBS(QHTTPSVR),5=使用,10=显示作业日志。这些是SQL错误,它们不会生成MSGW消息(这实际上是一件好事)。他们只需在作业日志中记录一条消息,然后继续。调用堆栈没有帮助,因为当我看到错误时,CGI作业已转到下一个web请求。实际上,我不希望程序“清理作业日志”,这会隐藏实际问题。我知道有问题,我只是找不到大海捞针,到底是哪个程序导致了错误。我的意思是,如果错误是预期的,并且程序正在处理它们;然后它应该清理作业日志,这样您就不会追查非问题。您是否看到了问题的其他证据,或者您只是看到了作业日志中的消息?我重复一遍-我不知道是什么程序导致了这些作业日志消息。我同意你的逻辑-但首先我需要弄清楚是什么程序导致了这些消息,以确保这些都不是问题。对-特定的消息确实列出了主机变量。问题是当100多个程序使用这个变量名时(这些程序不是世界上最好的编码程序)。其他错误(如cursor not open)未列出任何信息。带TRCTYP*DBSQL的STRTRC是否提供了更多信息?虽然无法重新编译以进行调试,但能否将一个或多个服务器作业置于调试状态(例如,通过STRSRVJOB)?或者针对一个或多个服务器作业启动数据库监视器(STRDBMON),以查看捕获的内容。如果错误在过程中,数据库监视器应该记录过程名称。任何调试或监视器都只能临时运行,以查看作业日志或监视器数据库是否记录了有用的信息。@user2338816 STRDBMON正是我所需要的
strdbmonoutfile(QGPL/DBMON)作业(*ALL/QTMHHTTP/WEBSERVER)FTRSQLCODE(*ERROR)
将列出所有有错误的SQL语句、它们的文本以及它们来自哪个程序!如果你想回答,我会给你的。@ScottR:这不会让我更富有,我不知道如何处理你的流程,也不知道什么命令参数最好。太多可能的变量。但我很高兴这有帮助。