AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 16585
Accepted
Chris Aldrich
Chris Aldrich
Asked: 2012-04-17 11:30:18 +0800 CST2012-04-17 11:30:18 +0800 CST 2012-04-17 11:30:18 +0800 CST

DB2 中的绑定到底是什么?

  • 772

我最近在我们公司从一名 Java 开发人员转变为一名真正的 DBA。可以说,我正在学习如何成为一名 DBA(这实际上是我们公司的一个新职位)。

我见过几个我们运行命令的脚本DB2 BIND bind_file other_parameters。

我对这些做什么感到困惑。我问过我们的其他 DBA,但他们无法以一种有意义的方式向我解释。我查看了IBM 的 BIND 命令信息中心,但我也不清楚。

我知道绑定在某种程度上很重要,因为我们应该定期在我们的数据库上运行 REORGS、运行 STATS 和重新 BIND 以帮助提高性能。

由于我仍然是一个 n00b DBA,我想知道是否有人可以提供“什么是傻瓜绑定?” 解释?

编辑:在以下答案的版本中,我最近遇到了以下 developerworks 文章:“DB2 包:概念、示例和常见问题:了解 DB2 系统和用户应用程序包”。非常有帮助。特别是对于系统包,这是我们最常遇到的。


20130905 编辑:DB2 DBA Ember Crooks 的这篇博客文章在绑定及其含义方面非常出色。她还写了一篇关于未找到包裹以及何时为绑定增加 CLIPKG 编号以及这意味着什么的条目。这些文章解释得很好。基本上就像阅读“DB2 Binding and Packages for Dummies”(如果存在这样的话)。

db2
  • 1 1 个回答
  • 34412 Views

1 个回答

  • Voted
  1. Best Answer
    bhamby
    2012-04-17T13:04:16+08:002012-04-17T13:04:16+08:00

    我看到您的信息中心链接指向 LUW 9.7,并且您提到您使用 Java 进行了编程,但我在绑定方面的大部分经验是使用 COBOL 在大型机上使用 DB2。因此,您可能需要稍微调整一下解释(但通常,概念应该相同)。

    我相信绑定仅在您编译包含预编译的嵌入式 SQL(静态绑定 SQL)的程序时才相关。例如,如果您使用 JDBC,则不需要运行 BIND。JDBC 驱动程序将PREPARE动态声明。


    当您通过 DB2 预编译器PRECOMPILE运行程序时,运行您的程序,如果它发现任何嵌入式 SQL(在 COBOL 中,这些是从EXEC SQLto开始的语句块END-EXEC.),它会小心地将 SQL 撕掉,并用调用 COBOL-DB2 接口。在此之后,有两个输出,一个是PRECOMPILE删除了所有嵌入式 SQL 的 COBOL 源(A从现在开始),另一个DBRM是包含所有已删除的 SQL 的输出(B)。

    预编译确实会进行一些基本的语法检查,但请注意,检查仅基于程序中的表声明。它不附加到 DB2 来验证这些!

    这两个文件是完全独立的,当你运行COBOL程序时,它必须找到同时生成的一个A和一个B。

    至此,A被标准COBOL编译器编译链接成一个load module并放置在一个加载库中以备后用。

    B但是, DBRM还有很多工作要做。这就是BIND进来的地方。 BIND有点像嵌入式 SQL 代码的编译器,“编译”的输出是package.

    为了将 SQL 绑定到一个可执行的“包”中,BIND 进程附加到 DB2 并做一些事情:

    • 验证当前的 AuthID 是否被授权执行绑定。
    • 在 DB2 目录中的数据的帮助下检查 SQL 的语法。
    • 最后,也是最重要的,绑定将优化您的 SQL

    在最后一步中,您的所有 SQL 都通过优化器运行,优化器考虑了 DB2 引擎获取数据时可能采用的所有统计信息和各种路径。然后它选择它提出的具有最低相关成本的路径(对于较新版本的 DB2 [DB2 10 for z/OS],它可能决定采用“成本更高”但“风险更低”的路径)。一旦选择了路径,它就会被编译并成为一个包,存储在目录中(您可以使用SELECT * FROM SYSIBM.SYSPACKAGE(z/OS) 查看所有当前的包)。

    最后,还有一个允许我们的程序与它们的包重新结合的部分,PLAN. 您通过执行另一个 BIND ( BIND PLAN) 来创建一个计划。计划是允许程序查看以查找具有相同名称的包的包的集合。使用 COBOL,您可以指定程序应在 JCL 中搜索的计划。


    简而言之,编译后的代码通过这些步骤生成一个可用的BIND PLAN:

    预编译 -> 创建一个 DBRM(用 C[++],预编译器将预编译的 SQL 输出到一个 HFS 文件,可以通过命令行绑定程序发送) -> 优化 DBRM 和一组访问路径( a package) 被创建 -> 包被添加到 a BIND PLAN,这是一组包,允许您创建一个“搜索路径”供您的程序查看。

    由于这些程序是静态绑定的,如果您的表统计数据发生剧烈变化,那么优化器在绑定时选择的访问路径可能不再是最佳路径,重新绑定将允许它重新评估 SQL 并可能选择一个更好的路径。


    编辑(更新评论):如果您使用的是命令行处理器,您可以传入单个绑定包 (.bnd) 或绑定文件名列表 (.lst)。如果你传入一个列表,文件名必须在前面加上一个@(例如/path/to/@packages.lst)。在 .lst 文件中,您可以将每个包放在单独的行上,也可以将它们分开+:

    package1.bnd
    package2.bnd
    package3.bnd+package4.bnd+package5.bnd
    
    • 3

相关问题

  • 从 DB2 迁移到 MySQL

  • 解释计划中的 TBSCAN GERROW 是什么意思?

  • 在 DB2 SQL 中模拟类似 REGEXP 的行为

  • z/OS 上 DB2 v9 上的 BLOB

  • 解释计划中的 HSJOIN 是什么意思?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve