2013-06-18 112 views
0

我有一个DB2脚本先放下然后创建一些表空间和函数。我可以在目标数据库的DB2命令行中成功运行SQL脚本。DB2 SQL脚本挂在shell脚本中,但在命令行中成功工作

我需要多次在shell脚本中执行这个SQL脚本。它可以在第一次成功执行,然后在第二次/第三次挂起。执行SQL脚本的命令很简单: DB2 CONNECT TO ktest4 DB2 -v -f /tmp/sql/application_system/opmdb2_privilege_remove.sql.5342

我使用DB2 9.7.8,和LINUX操作系统。当SQL脚本被挂起时,我仍然可以在目标数据库的DB2命令行中成功地手动运行SQL脚本。

有谁知道原因?谢谢。

Xiaoyang Gao

+0

请添加更多信息,例如在命令行和shell脚本上运行的确切命令。 另外,出于调试目的,请尝试仅运行shellscript上的一些命令来尝试查找有问题的命令。 – chamakits

回答

0

您确定DB2阻塞了吗?你把命令

db2 CONNECT TO ktest4 ; db2 -v -f /tmp/sql/application_system/opmdb2_privilege_remove.sql.5342 

之间用分号为了跟踪执行情况,我建议你把一些输出,以检测它在哪儿堵

date ; db2 -r /tmp/output.log CONNECT TO ktest4 ; db2 -r /tmp/output.log values current timestamp ; db2 -r /tmp/output.log -v -f /tmp/sql/application_system ; db2 -r /tmp/output.log values current timestamp ; db2 -r /tmp/output.log terminate 

有了这样的命令,您将保存所有输出,然后您可以检查错误在哪里。

+0

DB2未被阻塞,只是SQL脚本被挂起。当SQL脚本被挂起时,我可以登录数据库并在命令行中手动运行SQL脚本。 – Green

+0

的SQL脚本很简单: DROP TABLESPACE XXX DROP BUFFERPOOL YYY CONNECT RESET TERMINATE 我手动运行在命令行中的 “DROP TABLESPACE XXX” 命令,它会导致错误: DB21034E该命令被作为SQL语句进行处理,因为它不是 有效的命令行处理器命令。在SQL处理期间,它返回: SQL0290N不允许表空间访问。 SQLSTATE = 55039 但是,它没有解释为什么SQL脚本被绞死。 – Green

相关问题