软件开发

REBIND和 BIND 的区别

我们常用REBIND和BIND对package进行手工绑定,不同的场合用不同的命令,在信息中心里对这两个命令的解释分别如下:
REBIND command
Allows the user to recreate a package stored in the database without the need for a bind file.
BIND command
Invokes the bind utility, which prepares SQL statements stored in the bind file generated by the precompiler, and creates a package that is stored in the database.

请从原理上对这两个命令进行解释,以及他俩的区别与联系?书中说一些场合,若不bebind,DB2 还会使用原有的package包,请问是哪些场合?如果升级完数据库后,不db2rbind,是否还会使用原有的package?
参与21

19同行回答

sunyangnjsunyangnj技术经理苏宁金融研究院
rebind需要查询编目表,获取那里的信息,并重新评估访问计划。rebind只能使用最初bind指定的bind参数而不可改变参数。bind需要.bnd文件,并对.bnd中的对象做很多检查,比如语法检查,表的可用性,是否被授权;然后评估访问计划。bind replace可以允许你带新的bind参数。相同之处,bind和...显示全部
rebind需要查询编目表,获取那里的信息,并重新评估访问计划。rebind只能使用最初bind指定的bind参数而不可改变参数。
bind需要.bnd文件,并对.bnd中的对象做很多检查,比如语法检查,表的可用性,是否被授权;然后评估访问计划。bind replace可以允许你带新的bind参数。
相同之处,bind和rebind都需要确保包依赖对象是否存在,如果对象不存在,那么两个命令执行之后,包都会被标记不可用。如果包标记为invalid,但是还是有程序执行了这个包,那么一个自动的rebind就会执行。如果一个包被标记为invalid,那么当bind replace,用户手工rebind,或者自动rebind执行,而且包依赖的对象仍然不存在,那么包就会进一步被标记为inoperative,未来不会有针对于该包的rebind,而且执行该包肯定会失败。
bind比rebind更费资源,还有可能产生一些新的错误,但是两者执行后,包的执行效率是一样的。

总之,当由于添加索引或者更改了什么表特性,你需要包重新搞一个执行计划,rebind是最佳方案。当你需要改变bind参数的时候,bind(replace)才需要用到。

对于你的问题
1)什么场合会使用原来的包?很简单,只要没有更新执行计划,且该包有效,你就会一直使用该旧的package,比如你给表创建了索引,对表和索引执行了reorg, runstats,但是你没有rebind,你的系统还是使用老的访问计划。
2)数据库升级后是否会使用原来的包。当然,如果你没有db2rind dbname /l  xxxx.log,那么即使升级了,你的数据库仍然使用老的包。所以对于数据库大规模升级之后这种场景,db2rbind是必然必须的操作。

不知道你理解了么?收起
金融其它 · 2013-05-18
浏览1026
lxpeng163lxpeng163项目经理哈尔滨银行
:lol:lol显示全部
:lol:lol收起
银行 · 2014-03-13
浏览1319
zhendazhenda数据库管理员昆仑银行
回复 5# sunyangnj    您好,再次感谢您的解答,让我受益匪浅,结贴。显示全部
回复 5# sunyangnj


   您好,再次感谢您的解答,让我受益匪浅,结贴。收起
软件开发 · 2013-09-16
浏览1210
zhendazhenda数据库管理员昆仑银行
回复 10# sunyangnj 在测试机上用db2advis.bnd 做测试,在一个用了几天的数据库中,查看syscat.packages里无此db2advis的package,通过手工bind 绑定一下db2advis.bnd,在syscat.packages可以看到db2advis的package;重启实例后,直接查看发现syscat.packages里依然有db2advis的pack...显示全部
回复 10# sunyangnj

在测试机上用db2advis.bnd 做测试,在一个用了几天的数据库中,查看syscat.packages里无此db2advis的package,通过手工bind 绑定一下db2advis.bnd,在syscat.packages可以看到
db2advis的package;重启实例后,直接查看发现syscat.packages里依然有db2advis的package。这可能说明有一些bnd文件是在有需求或手工bind后生成package,不是在数据库创建好这些东西都自动bind完毕。收起
软件开发 · 2013-08-31
浏览1258
zhendazhenda数据库管理员昆仑银行
回复 16# sunyangnj 谢谢啊,还是非常感谢您的细致回答。我想了一段时间貌似理解了一些。生产package有两种方式,一种是precompile源文件方式,如嵌入式SQL、存储过程。还有一种是通过编译器先生成更容易解释的bnd文件,其中bnd文件有包括一些基础包,也可以是自定义的第三方包。b...显示全部
回复 16# sunyangnj

谢谢啊,还是非常感谢您的细致回答。我想了一段时间貌似理解了一些。

生产package有两种方式,一种是precompile源文件方式,如嵌入式SQL、存储过程。还有一种是通过编译器先生成更容易解释的bnd文件,其中bnd文件有包括一些基础包,也可以是自定义的第三方包。bind对bnd文件生成pack包,rebind是对SYSCAT.PACKAGES system catalog table中的PACKAGES重新recreate且不需要bnd文件,这里的packages应该包括两种方式生成的package包。

收起
软件开发 · 2013-08-31
浏览1233
sunyangnjsunyangnj技术经理苏宁金融研究院
辛苦了,DBA不是谁都能干得了的 回复  sunyangnj    哈哈,白天上班时不能上外网,攒的晚上一起问啦。zhenda 发表于 2013-8-28 22:50 显示全部
辛苦了,DBA不是谁都能干得了的
回复  sunyangnj


   哈哈,白天上班时不能上外网,攒的晚上一起问啦。
zhenda 发表于 2013-8-28 22:50

收起
金融其它 · 2013-08-29
浏览1216
zhendazhenda数据库管理员昆仑银行
回复 8# sunyangnj    哈哈,白天上班时不能上外网,攒的晚上一起问啦。显示全部
回复 8# sunyangnj


   哈哈,白天上班时不能上外网,攒的晚上一起问啦。收起
软件开发 · 2013-08-28
浏览1241
sunyangnjsunyangnj技术经理苏宁金融研究院
没错,可以采取如下方式rebind1) db2rbind sample -l logfile -all(有效无效都重新绑定)2)rebind packagename,适合数据改变或者统计变化场景 3) bind xxx.bnd 带有各种参数,适合需要改变绑定参数场景,但是耗费较多 数据库做过升级,表中数据变化后收集统计信息应该做重新帮定,否则S...显示全部
没错,可以采取如下方式rebind

1) db2rbind sample -l logfile -all(有效无效都重新绑定)
2)rebind packagename,适合数据改变或者统计变化场景
3) bind xxx.bnd 带有各种参数,适合需要改变绑定参数场景,但是耗费较多
数据库做过升级,表中数据变化后收集统计信息应该做重新帮定,否则SQL的访问计划可能不是最优。 ...
aks5201314 发表于 2013-8-27 21:25

收起
金融其它 · 2013-08-28
浏览1231
aks5201314aks5201314数据库管理员北京北控伟仕软件工程技术有限公司
数据库做过升级,表中数据变化后收集统计信息应该做重新帮定,否则SQL的访问计划可能不是最优。显示全部
数据库做过升级,表中数据变化后收集统计信息应该做重新帮定,否则SQL的访问计划可能不是最优。收起
电信设备制造商 · 2013-08-27
浏览1236
sunyangnjsunyangnj技术经理苏宁金融研究院
通过预编译在prep的bindfile参数处指明需要输出的.bnd文件prep可以将包含sql语句的源代码文件编译成bnd文件db2 prep core.sqc db2core.bnd sunyang, 这些bnd文件是如何生成的呢?hp_leetaedong14 发表于 2013-8-27 16:34 ...显示全部
通过预编译在prep的bindfile参数处指明需要输出的.bnd文件
prep可以将包含sql语句的源代码文件编译成bnd文件

db2 prep core.sqc db2core.bnd

sunyang, 这些bnd文件是如何生成的呢?
hp_leetaedong14 发表于 2013-8-27 16:34

收起
金融其它 · 2013-08-27
浏览1231

提问者

zhenda
数据库管理员昆仑银行
擅长领域: 数据库服务器云计算

问题状态

  • 发布时间:2013-05-18
  • 关注会员:1 人
  • 问题浏览:12626
  • 最近回答:2014-03-13
  • X社区推广