SQL0572N 指定的Package 失效 ;
解释:
指定名称的Package已经失效需要执行rebind的操作使其恢复可用;
该package失效的是因为他所depend on 的用户自定义函数已经被drop掉了;
通过使用rebind 或者 bind 命令来重绑定改Package ;
sqlcode: -572
sqlstate: 51028
IBM官方文档中找到了一个类似的错误“Error SQL0572N and rebind issues after update DB2 10.15 to Fix Pack FP8 ”
“ SQL0572N”错误"NULLID.SQLC2K26" Package 不可用,DB2 10 .5 打补丁之后导致的重新绑定问题;
自从DB2 打完补丁从10.5 FP7 升级到 10.5 FP8 之后,SQL0572N错误就会伴随着一些CLP查询操作出现,例如 "select * from syscat.tables with ur" 就会出现 “SQL0572N Package "NULLID.SQLC2K26" is inoperative. SQLSTATE=51028”错误提醒;
有多种原因可能会导致这种Package失效的发生 :
给DB2打完补丁之后对数据库进行升级到10.5的操作,这将会执行 CREATE OR REPLACE 语句去更新一些系统的routines ,这可能会导致一些系统的Package 和 少量的 CLP package 失效 ;对于这种情况,如果数据库配置参数 auto_reval 没有被设置成 disabled (可以通过db2 get db cfg | grep -i auto_reval 查看),那么失效的Package 将会隐式的成功绑定。当然如果auto_reval被设置成了disabled,失效的Packages 就不能够隐式的绑定了(只能够进行显示的绑定);如果auto_reval被设置成DEFERRED ,Package仍然可以隐式的绑定;
执行 "db2 BIND...ACTION ADD"操作,但是没有replace已经存在的package , 即使这个package已经失效了;“ACTION ADD” 选项一般推荐使用,因为你肯定不想浪费时间去绑定已经存在的package。但它不会取代失效或无效的包 。在auto_reval被设置成disabled状态的情况下,默认的“ACTION REPLACE”需要被默认使用;
如果 "-r any"被实际指定了的话,执行db2rbind可以成功进行重新绑定。没有 "-r any" ,系统就不会尝试去重新绑定已经失效的packages 。使用 "-r any"的效果和issue db2 rebind package 是一样的 ;
一个把 “auto_reval” 参数设置成 “disabled ” 且执行了“db2updv105” 操作的 DB2 10.5 版本数据库打完补丁可能会引起包含了CLP的特定系统packages失效,并出现 SQL0572N 错误 ;
你可以采用下面方法的一种来避免package失效同时确保重新绑定packages成功:
1) 将 auto_reval 设置成 deferred 模式 (or immediate);
2) 执行 db2rbind 操作使用 "-r any" 选项 ;
3) 重新显式的绑定失效的packages , 使用: db2 "rebind package NULLID.SQLC2K26".;
4) 绑定 system packages 时使用 ACTION REPLACE 而不是 ACTION ADD ;
其实一般出现SQL0572N这种错误我们一般选择第三种解决方案,即 db2 "rebind package NULLID.SQLC2K26"
参考文献:
a.Error SQL0572N and rebind issues after update DB2 10.15 to Fix Pack FP8
b.db2updv105 - Update database to Version 10.5 fix pack command
c.SQL0572N Package "NULLID.SQLUAH19" is inoperative bind error
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞3
添加新评论1 条评论
2017-08-24 10:18