.数据库DB2_ERROR:SQL0805N(找不到程序包)
DB2在执行SQL语句的时候会使用内部定义的包(package)来保持不同级别的游标的稳定性。
DB2里面默认的时候会创建3个这样的包即SYSLN300,SYSLN301, SYSLN302,
而当你的程序报“找不到程序包”的错误,并且程序包的名字的序号大于SYSLN302,
也就说明DB2默认的包不够用,DB2要求使用更多的包,但是这些包在DB2中并没有创建,
因此DB2抛出了异常。
对于小的动态包,DB2提供64个可用句柄,对于大的动态包,提供364个句柄。
这意味着默认每个应用可使用64*3+364*3 = 1284个句柄。应用创建每个prepare statement
或每个游标cursor将会使用一个句柄,而且每个句柄一直到被prepared statement
或者cursor被显示关闭(close)才释放。
当出现上述错误时,解决办法有两种:
1)是执行命令:
db2 bind @db2cli.lst blocking all CLIPKG 30 grant public sqlerror continue
其中CLIPKG为大的动态包的副本个数,最大值为30,可根据需要调整,
这样DB2就可以找到它需要的包;
2)是优化应用程序,当相关操作完成后,及时调用stmt.close 或cursor.close,
尤其是prepare statement或者declare cursor在循环内声明或被多次执行时。
数据库DB2_ERROR:SQL0805N(找不到程序包)
最新推荐文章于 2018-11-03 10:27:31 发布