Username: Password:

DB2 “SQL0805N 很难找到程式包”错误解析
来源:论坛整理作者:大熊 发布时间:2007-11-21 00:00:00

今天所做的程式最后封版,封版前觉得程式有一个地方让我很不爽,于是就进行了一下修改,改变其实很小,只是在if里面增加了一个判断条件,结果程式运行的时候开始报db2数据库系统错误,错误内容如下:

  [DB2/NT] SQL0805N 很难找到程式包 "NULLID.SYSLH203 0X5359534C564C3031"。 SQLSTATE=51002

  到网上查找错误的原因,结果关于这方面的内容少之又少,Google中只找到两个网页,里面倒是提供了解决方案,但是原因不是很周详。继续搜索,最后在IBM官方网站上找到一个还算清楚的解释:

  Solution

  Depending on the type of statement you are executing, DB2 will use a particular package on the server. By default, DB2 creates three packages for each type of package. In this case NULLID.SYSLH2yy is reserved for statements with CURSORHOLD on and isolation level Cursor Stability. The package SYSLH203 means that DB2 is looking for the 4th package (200 is first, 201 is second, etc) of this type, but it does not exist. You can create more packages on the server by connecting to the database and issuing the following bind command from the /sqllib/bnd directory:

  db2 bind @db2cli.lst blocking all grant public sqlerror continue CLIPKG 5

  Note: CLIPKG 5 will create 5 large packages, and will give you the package that your application is looking for, as well as one more in this case.

  源文档

  大致的意思是说DB2在执行SQL语句的时候会使用内部定义的包(package)来保持不同级别的游标的稳定性,包的名字就是“NULLID.SYSLH2XX”。DB2里面默认的时候会创建3个这样的包即SYSLH200, SYSLH201, SYSLH202,而当您的程式报“很难找到程式包”的错误,并且程式包的名字的序号大于SYSLH202,也就说明DB2默认的包不够用了,DB2需要使用更多的包,但是这些包在DB2中并没有创建,因此DB2抛出了异常。

  要解决这个错误有两种方法:一是执行上面的英文段中的粗体部分的命令,把DB2的包的个数扩大到5个,这样DB2就能够找到他需要的包;二是调整您的程式,优化结构,使得DB2不会用到多于3个的包,当然,这将会使您经历一个很艰难的调试时刻。

  至于我吗,由于是在封版时刻,自然选择最简单的处理方式??把错误的地方再改回来,虽然有点取巧,但是至少不会产生对数据库修改的需求。

查看本文来源

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅