weixiaom
作者weixiaom·2012-03-06 21:39
高级架构师·泰康养老保险股份有限公司

DB2 SQL Error: SQLCODE=-805, SQLSTATE=51002 解决方法

字数 4791阅读 32728评论 0赞 1
C:Documents and Settingsweixiaom>db2 ? sql-805

DB2 error (sqlcode: -805)
Technote (FAQ)

This document applies only to the following language version(s):

English

Question

How to resolve DB2 sql -805 errror

Cause

The statement cannot complete because the necessary package was not found in the catalog.

The JAVA trace similar to following 
10/6/10 8:53:36:795 EDT] 0000056d SystemOut O 06 Oct 2010 
08:53:36:793 [ERROR] Failed SQL query in MboSet.getNextRecordData(): 
select * from query where app = 'STARTCNTR' and (owner = 
'OWNER ' or ispublic = 1) order by clausename 
com.ibm.db2.jcc.b.SqlException: Package "NULLID.SYSLH205 
0X5359534C564C3031" was not found. 
at com.ibm.db2.jcc.b.sf.e(sf.java(Compiled Code)) 
at com.ibm.db2.jcc.c.jb.p(jb.java(Compiled Code)) 
at com.ibm.db2.jcc.c.jb.h(jb.java(Compiled Code)) 
at com.ibm.db2.jcc.c.jb.a(jb.java(Compiled Code)) 
at com.ibm.db2.jcc.c.w.a(w.java(Inlined Compiled Code)) 
at com.ibm.db2.jcc.c.cc.f(cc.java(Compiled Code)) 
at com.ibm.db2.jcc.b.sf.n(sf.java(Inlined Compiled Code)) 
at com.ibm.db2.jcc.b.sf.a(sf.java(Compiled Code)) 
at com.ibm.db2.jcc.b.sf.a(sf.java(Compiled Code)) 
at com.ibm.db2.jcc.b.sf.executeQuery(sf.java(Compiled Code)) 
at psdi.mbo.MboSet.getNextRecordData(MboSet.java(Compiled Code)) 
at psdi.mbo.MboSet.fetchMbos(MboSet.java(Compiled Code)) 
at psdi.mbo.MboSet.getMbo(MboSet.java(Compiled Code)) 
at psdi.mbo.MboSet.isEmpty(MboSet.java(Compiled Code)) 
at psdi.app.signature.QuerySet.getQueriesForUser(QuerySet.java:70) 
at 
psdi.app.signature.SignatureService.getQueriesForUser(SignatureService.j 
ava(Inlined Compiled Code)) 
at 
psdi.app.signature.SignatureService.getUserAuthForApp(SignatureService.j 
ava(Compiled Code)) 
at psdi.security.Profile.loadAppMaps(Profile.java(Compiled Code)) 
at psdi.security.Profile.getAppInfo(Profile.java(Compiled Code)) 
at 
psdi.webclient.system.controller.AppInstance.<init>(AppInstance.java(Com 
piled Code)) 
at 
psdi.webclient.system.controller.RequestHandler.handleEvent(RequestHandl 
er.java(Compiled Code)) 
...

Answer

Please run from DB2 command line the following statement

db2 bind @db2cli.lst collection NULL CLIPKG=30

This statement will BIND all db2 packages located in db2cli file and increase the number of sections for SQL statements.





SQL0805N  找不到程序包 "<程序包名>"。

说明:

不能完成语句,因为未在目录中找到必要的程序包。

"<程序包名>" 的格式为:
*  "pkgschema.pkgname 0Xcontoken",其中一致性标记以十六进制给出。
*  "pkgschema.pkgname.pkgversion",如果程序包版本为空字符串,那么名称省
   略".pkgversion"。
*  "%.pkgname",如果设置了 CURRENT PACKAGE PATH。CURRENT PACKAGE PATH
   中模式名的设置是由百分比字符("%")来指示的。

此消息(SQLCODE)的可能原因是:
*  程序包未绑定或已删除。
*  如果试图运行 DB2 实用程序或 CLI 应用程序,那么 DB2 实用程序可能需要
   重新绑定至数据库。
*  "%.pkgname",如果设置了 CURRENT PACKAGE PATH,但是在 CURRENT PACKAGE
   PATH 中的任何模式中都找不到名称为"pkgname"的程序包。

注意,当对给定的 package-schema.package-name 版本标识使用版本标识时,可
能有以相同的程序包模式和程序包名定义的程序包,但是未找到正确的程序包,
原因是现有程序包与请求的版本或一致性标记不一致。程序包必须与程序包名的
所有三个部分相匹配。当正在使用多个版本,导致出现此消息的附加原因为:
*  正在执行的应用程序的版本已预编译、编译和链接,但是未绑定,或已绑定但
   是后来删除了该版本的程序包。
*  应用程序已预编译和绑定,但是未编译和/或链接,所以正在执行的应用程序
   不是最新的。
*  程序包由与生成编译并链接至应用程序可执行文件的已修改源文件的预编译不
   同的源文件预编译生成的绑定文件绑定。
*  新应用程序同与现有的程序包相同的名称(和版本)绑定,这样就替换了现有
   的程序包。如果运行与替换的程序包相关联的应用程序,那么将导致此错误。

在所有这些情况下,请求的一致性标记与现有版本的一致性标记不匹配,因此认
为未找到程序包。

不能处理该语句。

用户响应:

指定正确的程序包名或绑定该程序。如果正在运行的应用程序未与数据库绑定,
请与数据库管理员联系以执行必需的绑定。确保正在执行的应用程序或对象模块
是与生成程序包的预编译和绑定相关联的已编译和链接的修改源代码。

如果设置了 CURRENT PACKAGE PATH,那么确保在 CURRENT PACKAGE PATH 中指定
了包括程序包的模式。

可以使用下列 SQL 语句来查询目录以确定是否有程序包的不同版本:

SELECT PKGSCHEMA, PKGNAME, PKGVERSION, UNIQUE_ID
FROM SYSCAT.PACKAGES
WHERE PKGSCHEMA='pkgschema' and PKGNAME='pkgname'.

注意 UNIQUE_ID 列与一致性标记相对应。

如果 DB2 实用程序需要重新绑定至数据库,那么当连接至数据库时,数据库管理
员可以通过从实例的 bnd 子目录发出下列 CLP 命令之一来完成此操作: 
*  对于 DB2 实用程序,发出"DB2 bind @db2ubind.lst blocking all grant
   public"。
*  对于 CLI,发出"DB2 bind @db2cli.lst blocking all grant public"。

联合系统用户:确保在适用的数据源上绑定联合服务器所必需的程序包。请参阅
《联合系统指南》,以了解有关将程序包绑定至数据源的更多信息。

  sqlcode:  -805

  sqlstate:  51002




DB2 SQL Error: SQLCODE=-805, SQLSTATE=51002 解决方法

操作大量数据时如果发生这种错误,说明不是db2 使用的 package没有绑定,而是因为资源未释放,导致可以使用此package的资源不足,致使不能连接资源,这种情况有两种解决方法.

方法一:治标不治本,重新绑定package,然后为package的使用分配更多的资源

方法二:标本兼治,在程序中,对PreparedStatement ,Statement,CallableStatement,ResultSet,Connection这些对象使用完毕后一定要调用close()方法进行资源的释放,若不进行释放,在操作大量数据的时候,会出现一些问题,DB2 SQL Error: SQLCODE=-805, SQLSTATE=51002 错误就是其中的一种.这种错误只要在代码中将使用完毕的PreparedStatement ,Statement,CallableStatement,ResultSet,Connection对象全部关闭即可[即调用close()方法即可],关闭顺序最好是:1>ResultSet   2>PreparedStatement ,Statement,CallableStatement 3>Connection

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

X社区推广