之前都是explain就可以了昂Visual Explain是一种GUI工具,他为数据库管理员和应用程序开发人员提供了查看为特定SQL语句选择的访问计划的图形化的表示能力。但Visual Explain只能用于查看解释快照数据或人工输入SQL或脚本,要查看已收集并写入了解释表的全面解释数据,则必须使用db2exfmt或db2expln工具。
在包含嵌入式SQL语句的源代码文件绑定到数据库时(无论是作为预编译流程的一部分,还是在延迟绑定过程中),DB2将分析遇到的每一条静态SQL语句,并生成一个相应的访问计划,此访问计划随后以程序包的形式存储在数据库中(syscat.packages)。给定数据库名称、包名称、包创建者ID、部分号(若指定了部分号为0,则处理包的所有部分),db2expln工具即可为存储在数据库系统目录中的任何包解释并说明其访问计划。由于db2expln工具直接处理包而非全面解释数据或解释快照数据,因而通常用来获取那些已选定用于未捕获其解释数据的包的访问计划的相关信息。但由于db2expln工具仅可访问已存储在包中的信息,因而只能说明所选的最终访问计划的实现,不能提供特定SQL语句优化方式的信息。 若使用额外的输入参数,db2expln工具则还可用于解释动态SQL(不包含参数标记的动态sql语句)语句。 查看静态package例子:
与db2expln工具不同,db2exfmt工具用于直接处理已收集并存储在解释表中的全面解释数据或解释快照数据。给定数据库名和其他限定信息,db2exfmt工具将在解释表中查询信息、格式化结果,并生成一份基于文本的报告,此报告可直接显示在终端上或写入ASCII文件。
db2look是可以从命令行提示符下和控制中心中调用的一个强大的工具。这个工具可以:
从数据库对象中提取数据库定义语言(DDL)语句生成update语句,用于更新数据库管理器和数据库配置参数生成db2set命令,用于设置DB2概要注册表提取和生成数据库统计报告生成update语句,用于复制关于数据库对象的统计信息 LOAD之类的应用程序要求目标表已经存在。您可以使用db2look命令提取表的DDL,在目标数据库上运行它,然后调用装载操作。db2look非常容易使用,下面的例子展示了这一点。这个例子生成peter在数据库department中创建的所有对象的DDL,输出被存储在alltables.sql中。
db2look -d department -u peter -e -o alltables.sql [db2inst1@db22 ~]$ db2look -d sample -u peter -e -o alltables.sql -- Creating DDL for table(s) -- Output is sent to file: alltables.sql -- Binding package automatically ... -- Bind is successful -- Binding package automatically ... -- Bind is successful [db2inst1@db22 ~]$ less alltables.sql -- This CLP file was created using DB2LOOK Version "11.1" -- Timestamp: Thu 13 Apr 2017 11:13:02 AM CST -- Database Name: SAMPLE -- Database Manager Version: DB2/LINUXX8664 Version 11.1.1.1 -- Database Codepage: 1208 -- Database Collating Sequence is: IDENTITY -- Alternate collating sequence(alt_collate): null -- varchar2 compatibility(varchar2_compat): OFF CONNECT TO SAMPLE; ------------------------------------------------ -- DDL Statements for Schemas ------------------------------------------------ -- Running the DDL below will explicitly create a schema in the -- new database that corresponds to an implicitly created schema -- in the original database. CREATE SCHEMA "DB2INST1"; COMMIT WORK; CONNECT RESET;下面的命令生成
数据库department中所有对象的DDL,(由-d、-a、-e选项指定)update语句,用于复制数据库中所有表和索引的统计信息(由选项-m指定)GRANT授权语句(由选项-x指定)用于数据库管理器和数据库配置参数的update语句和用于概要注册表db2set命令(由选项-f指定) db2look -d department -a -e -m -x -f -o db2look.sql下面的例子生成模式名为dbinst1 的对象所需的REGISTER XMLSCHMA和COMPLETE XMLSCHEMA命令(由选项-xs指定)。/home/db2inst1中将创建输出db2look.sql,这个目录由-xdir选项指定。
db2look -d department -z db2inst1 -xs -xdir /home/db2inst1 -o db2look.sql下面的db2look 命令创建了DDL以复制所有数据库对象,以及配置和统计信息:
db2look -d <dbname> -a -e -m -o db2look.sql -a:为所有的创建器(createor)生成统计数据。如果指定了该项,那么将忽略-u选项。-e:提取复制数据库所需的DDL文件。该选项生成包含了DDL语句的脚本。该脚本可以在另一数据库上运行以重新创建数据库对象。-m:以模拟模式运行db2look实用程序。该选项包含了SQL UPDATE语句脚本。这些SQL UPDAE语句捕获所有的统计数据。该脚本可以在另一数据库上运行以复制原来的那一个数据库。当指定-m选项时,将忽略-p,-g,-s选项。为了仅仅收集某些表和相关对象的统计数据和DDL,可以使用下列命令:
db2look -d <dbname> -a -e -m -t <table1> <table2> .. <tableX> -o table.ddl -t:为特定的表生成统计数据-z:模式名:如果同时指定了-z和-a,那么将忽略-z