在语句级别指定访问路径
您可以通过创建语句级访问路径,建议 Db2 在指定范围内对特定SQL语句的所有实例使用特定的访问路径。
准备工作
- 准备管理访问路径。
- 您拥有以下权限之一:
- SQLADM
- 系统管理员
- SYSCTRL
- SYSADM
- 在您的架构下,或者在输入表的单独架构下,存在以下用户表:
- 用户查询表
- PLAN_TABLE
- 在PLAN_TABLE的下列列上创建索引:
- QUERYNO
- APPLNAME
- PROGNAME
- 版本
- COLLID
- OPTHINT
SDSNSAMP库的成员DSNTESC中包含创建索引的示例语句。
- 包含语句的包是由BIND PACKAGE语句创建的。 对于由其他语句创建的包中的语句,不支持影响访问路径的语句级方法,例如CREATE FUNCTION、CREATE TRIGGER和CREATE PROCEDURE语句。
关于本任务
语句级访问路径使用语句文本的匹配,将指定的访问路径应用于以下范围之一中语句的所有实例:
- 系统范围
- 从任何版本的特定收藏和套餐中
- 从特定版本的收藏和套餐中
提示: IBM® Db2 Query Workload Tuner for z/OS® 和 IBM Db2 Administration Foundation for z/OS 提供增强的查询调整功能,可以帮助您完成这项任务。
过程
创建引人注目的访问路径:
结果
当您重新绑定包含静态 SQL 语句的程序包时,静态 SQL 语句的目录表行将被验证并应用。 动态 SQL 语句的目录表行在语句准备时进行验证和强制执行。
如果 Db2 使用了您指定的所有访问路径,则从EXPLAIN语句的PREPARE和SQL语句的PREPARE返回SQLCODE +394,这些语句使用了指定的访问路径。 如果指定的访问路径无效,或者发现任何重复,请发送电子邮件至 Db2 ,并附上SQLCODE +395。 通过设置SUPPRESS_HINT_SQLCODE_DYN子系统参数的值,可以禁止动态SQL语句中的SQLCODES +394和+395。
后续操作
请考虑采取以下措施:
- 确认已创建相应的目录表行:
- 将一行插入到DSN_USERQUERY_TABLE表中,其中QUERY_TEXT和SCHEMA列包含值。
- 发出以下命令:
Db2 发出以下消息,以指示目录表是否包含与 DSN_USERQUERY_TABLE 行相对应的有效行。BIND QUERY LOOKUP(YES)- DSNT280I 在目录表中与每行DSN_USERQUERY_TABLE匹配的行。
- DSNT281I 在目录表中不匹配的每行DSN_USERQUERY_TABLE的行信息。
- 如果在目录表中找到匹配的行,则发送一条消息,或者 DSNT290I 如果在目录表中找到匹配的行,则发送一条消息;如果 DSNT291I 如果没有找到匹配的行,则发送一条消息。
- 删除DSN_USERQUERY_TABLE行,以防止在您发出后续BIND QUERY命令时替换现有目录表行。 当您发出BIND_QUERY命令时,会为DSN_USERQUERY_TABLE中的每一行创建或替换目录表行。 如果旧行保留在DSN_USERQUERY_TABLE中,而您再次发出BIND_QUERY命令,则其他输入表中的数据更改可能会产生意想不到的后果。