IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for IBM i – 7.2 新功能和最新TR更新 郭琦([email protected]) IBM中国系统与科技研发中心 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 日程 • DB2 7.2 新功能简介 • 7.1 TR8, TR9 和 7.2 TR1 新功能简介 2 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 日程 • DB2 7.2 新功能简介 • 7.1 TR8, TR9 和 7.2 TR1 新功能简介 3 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i • 标准兼容 • 安全性 • 可扩展性 • 功能强大 • 优异性能 • 易用性 • 易于维护 7.2 Row and Column Access Control XMLTABLE 7.1 核心价值 6.1 Omnifind V5R4 WebQuery V5R2 SQE Stage 1 V5R1 SQL triggers Java Functions DRDA DUW TCP/IP 2 GB LOBs 1 Terabyte Table Journal Minimal Data Two-phase over TCP/IP 4 CONNECT BY XML Support IASPs Identity columns Savepoints UNION in views Scalar subselect UDTFs DECLARE GLOBAL TEMPORARY TABLE Catalog views V5R3 SSD Memory Preference Partitioned tables On Demand Performance Center UFT-8 and UTF-16 ICU sort sequence Health Center MQTs Completion of SQL Core Sequences Scalar fullselect Implicit char/numeric Recursive CTE BINARY/VARBINARY INSTEAD OF triggers GET DIAGNOSTICS Descriptor area DRDA Alias XA over DRDA DECIMAL(63) DDM 2-phase DECFLOAT Grouping sets /super groups Named arguments Result set support in and defaults for embedded SQL parameters CURRENTLY COMMITTED INSERT in FROM Global variables VALUES in FROM Array support in Extended Indicator procedures Variables Partition table enhancements Expression in Indexes Three-part names and aliases ROW CHANGE TIMESTAMP SQE Logical file Statistics catalog support views SQE Adaptive Query Processing CLIENT special registers EVI enhancements 2M SQL statement DDM and DRDA IPv6 CREATE OR REPLACE 1000 tables in a query Deferred Restore of MQT and Logicals Environmental limits Scrollable cursor QDBRPLAY DDL Journaling JDBC V3.0 Database Navigator DRDA Kerberos SQE Stage 5 Generate SQL Journal Standby Implicit journaling enhancements Array support in UDFs MQ Functions Inline functions Ragged SWA Obfuscation of SQL routines & triggers MERGE SQE Stage 6 SQE Stage 3 Online Reorganize MySQL storage engine TRANSFER OWNERSHIP Encryption enhancements (FIELDPROCs) Timestamp precision Multiple-action Triggers Built-in Global Variables Record movement between partitions on UPDATE 1.7 Terabyte Indexes Health Center – Nondatabase limits Navigator Graphing and Charting SQE I/O Costing model improvement TRUNCATE © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i 7.2 新功能要点 • • • 数据安全 – – – – Row and Column Access Control (RCAC) TRANSFER OWNERSHIP GRANT TO GROUP / USER Remote journal and SSL 应用开发 – – – – – – – – Named augment and default Autonomous Procedures Obfuscation of SQL routines Timestamp precision (0 – 12) Record movement between partitions Multiple-action Triggers ( PTFed to 7.1 ) Dynamic Compound Statement ( PTFed to 7.1 ) TRUNCATE TABLE 数据库性能 – SQE support of native (QRY/400 and OPNQRYF and RCAC) – Use Maintained Temporary Indexes (MTIs) for Statistics (PTFed to 6.1) – 数据库可用性和备份/恢复 – Deferred journal restore 5 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 行列访问控制 Row and Column Access Control (RCAC) • IBM Advanced Data Security for i (Boss option 47) • 行级别访问控制 – 根据用户所在的组(或其他条件)控制用户是否能看到表 中的所有或者部分记录 • 列级别访问控制 – 根据用户所在的组(或其他条件)控制用户是否能看到列 中的真实数据或者经过掩码后的数据 6 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 RCAC 示例 • 医疗保险行业示例 费用清算 (会计) 结算中心 数据库 管理用 户 管理部门 保险公司 数据源 医院 (医生、病人) 政府及研究机构 工作人员 • 确保健康状况信息的私密性 • 保证电子数据传输中的机密性 数据库 访问用 户 • 控制数据只能被有相应权限的用户访问 • 记录对受保护的数据的访问 7 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Row Permission & Mask 示例 • 8 创建 Permission © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Row Permission & Mask 示例 • 医生 Lee 在 Permission 规则上更新数据 UPDATE patient SET pharmacy = ‘codeine’ WHERE name = ‘Sam’ UPDATE patient SET pharmacy = ‘codeine’ WHERE name = ‘Doug’ 9 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Row Permission & Mask 示例 在 Permission 规则上访问数据 • select * from patient 医生Lee select * from patient select * from patient 会计与市场分析人员 10 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Row Permission & Mask 示例 • 创建 Mask CREATE MASK pid_mask ON patient FOR COLUMN pid RETURN CASE WHEN VERIFY_GROUP_FOR_USER (SESSION_USER, ‘PATIENT’ ) = 1 THEN pid ELSE ‘XXX XXX ‘ || SUBSTR (pid, 8, 3) END ENABLE; ALTER TABLE patient ACTIVATE COLUMN ACCESS CONTROL; 11 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Row Permission & Mask 示例 • 在 Permission & Mask 规则上访问数据 select * from patient 医生Lee select * from patient 12 病人Bob © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 行列访问控制 Row and Column Access Control (RCAC) • 由 Security Admin 使用 SQL 语法定义 – – • 对所有数据存取接口都有效 (SQL, RPG Native, JDBC, CPYF, etc) • RCAC 保存在数据表内部 (*FILE),并且RCAC的相关数据访问运行在 SQE • 可以直接应用在物理文件上,对现有应用无需任何改动 • CURRENT_USER 特殊寄存器(special register)可以获取当前用于验证权限的 用户ID – • Adopted authority被考虑在内 可以通过使用Client Special Register将应用级别用户信息传至数据库服务器端 用于RCAC规则验证 – – 13 用户功能组 QIBM_DB_SECADM *ALLOBJ权限无法更改RCAC CURRENT CLIENT_APPLNAME , CURRENT CLIENT_USERID … http://ibmsystemsmag.com/Blogs/i-Can/Archive/i-can-use-client-special-registers/ © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 CURRENT_USER 特殊寄存器(special register) CURRENT USER特殊寄存器保存了用于验证当前执行语句权限的用户名。 换言之,如何当前程序继承了所有者权限,它返回被继承的用户名。 如果当前线程有多个被继承的用户名,它返回最近一次被继承权限的用户名 SELECT CURRENT_USER FROM SYSIBM.SYSDUMMY1 CREATE MASK SSN_MASK ON EMPLOYEE FOR COLUMN SSN RETURN CASE WHEN (VERIFY_GROUP_FOR_USER(CURRENT_USER,'PAYROLL') = 1) THEN SSN WHEN (VERIFY_GROUP_FOR_USER(CURRENT_USER,'MGR') = 1) THEN 'XXX-XX-' CONCAT SUBSTR(SSN,8,4) ELSE NULL END ENABLE; 14 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 TRANSFER OWNERSHIP SQL 语法对于 CL 命令CHGOBJOWN 的实现 TRANSFER OWNERSHIP OF TABLE mjatst.t1 TO USER paul PRESERVE PRIVILEGES 操作可以是事务的一部分,可以被提交/回滚 Grant to GROUP and USER 对于DB2 用户组功能的支持 GRANT ALL ON council TO USER frank WITH GRANT OPTION GRANT ALL ON council TO GROUP marketing WITH GRANT OPTION 表明ID是用户还是用户组 15 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Timestamp 精度提升 • • • • 目前7.1及之前的版本的TIMESTAMP类型仅支持小数点后6位精度(微秒) 对某些类型的应用精度不够,对另外一些则不需要如此高精度 7.2里用户可以指定TIMESTAMP使用0 – 12位精度 支持TIMESTAMP数据类型的地方都可以指定 (包括RPG程序) CREATE TABLE x (C1 TIMESTAMP(12), -- 需要额外的12位精度 C2 TIMESTAMP(0)) -- 不需要非整数的精度 16 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 命名参数和参数缺省值 Named Arguments and Defaults for Parameters 存储过程支持 7.1 – 函数支持 7.2 支持 SQL 和外部存储过程和函数 – making it possible to run more SQL applications on IBM i. 可以用于扩展存储过程/函数的参数列表,而不用担心对现存应用的 功能更改。只需要简单的对新参数指定缺省值即可。 此功能可以实现: • 1) 定义了缺省值的参数可以在调用时省略 • 2) 可以在调用时以任意顺序指定参数 • 3) 支持LANGUAGE SQL 和 EXTERNAL 存储过程/函数 CREATE PROCEDURE p1 (i1 INT, i2 INT DEFAULT 0, i3 INT DEFAULT -1)... CALL p1(55) CALL p1(55, i3=>33) PTFed back to 7.1 17 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 自治存储过程 Autonomous Procedures 自治存储过程是运行在一个独立的事务中的存储过程,与 调用它的事务完全隔离。 •自治存储过程内部可以执行Commit或者rollback •Commit和rollback独立于外部事务 •自治存储过程使用activation group QSQAUTOAG. CREATE PROCEDURE writelog (loginfo VARCHAR(1000) AUTONOMOUS BEGIN … INSERT INTO MJATST.T1 VALUES(LOGINFO); … END PTFed back to 7.1 18 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 对SQL例程加密 • 使用下列的实用程序,应用可以对有知识产权的SQL例程(存储过程,函 数,触发器)代码进行加密。最终用户将无法看到例程的具体语句。但是 DB2仍旧可以识别和执行这些SQL例程。 • CREATE_WRAPPED存储过程可以创建一个加密的SQL例程。加密过的 SQL语句会被保存在catalog和程序对象中. – 例如: CALL CREATE_WRAPPED(‘CREATE FUNCTION salary(wage DECFLOAT) RETURNS BIGINT RETURN wage * 40 * 52’) • WRAP函数读取一个创建SQL例程的SQL语句(如CREATE PROCEDURE),返回一个加密后的语句 – 例如:WRAP(‘CREATE FUNCTION salary(wage DECFLOAT) RETURNS DECFLOAT RETURN wage * 40 * 52’) – 返回如下结果: CREATE FUNCTION salary(wage DECFLOAT) WRAPPED SQL09073ablGWmdiWmtaTmtaTmteTmtuUmtaUmJqUodaYmdaXidaWmdaW mdaWmZG1mIaGicaGDwrKycCQn0cnVDazWFkrtEgG1bLP5trZHfmwhQr5nI PrzhaQzfzWkGaa PTFed back to 7.1 19 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 在单一SQL触发器中支持多种事件类型 • 可以使用单个SQL触发器处理INSERT,UPDATE和DELETE事件。 • 易于管理,安装和维护。 下面的例子中,单一触发器可以: a) 插入新员工记录的时候递增员工号 b) 删除员工记录时递减员工号 c) 更新薪酬超限的时候出发警告 CREATE TRIGGER HIRED AFTER INSERT OR DELETE OR UPDATE OF SALARY ON EMPLOYEE REFERENCING NEW AS N OLD AS O FOR EACH ROW BEGIN IF INSERTING THEN UPDATE COMPANY_STATS SET NBREMP = NBREMP + 1; END IF; IF DELETING THEN UPDATE COMPANY_STATS SET NBREMP = NBREMP - 1; END IF; IF UPDATING AND (N.SALARY > 1.1 * O.SALARY) THEN SIGNAL SQLSTATE '75000' SET MESSAGE_TEXT = 'Salary increase > 10%' END IF; PTFed back to 7.1 END 20 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 动态复合(DYNAMIC COMPOUND) 语句 • • • • • 支持对一个动态的复合语句进行PREPARE和EXECUTE COMPOUND语句指的是BEGIN和END包围起来的语句集合 之前只能通过存储过程实现 可以使用变量,错误处理和所有的控制语句 支持ATOMIC和NOT ATOMIC BEGIN DECLARE V_ERROR BIGINT DEFAULT 0; DECLARE V_HOW_MANY BIGINT; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET V_ERROR = 1; SELECT COUNT(*) INTO V_HOW_MANY FROM STAFF WHERE JOB = 'Clerk' AND SALARY < 15000; IF (V_ERROR = 1 OR V_HOW_MANY = 0) THEN RETURN; END IF; UPDATE STAFF SET SALARY = SALARY * 1.1 WHERE JOB = 'Clerk'; END; 21 PTFed back to 7.1 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 TRUNCATE TABLE • • 类似“fast delete” 可以指定 – – – – IGNORE or RESTRICT when delete triggers are present CONTINUE or RESTART identity values DROP or REUSE storage IMMEDIATE performs the operation without commit even if running under commit TRUNCATE x IGNORE DELETE TRIGGERS TRUNCATE x RESTRICT WHEN DELETE TRIGGERS IMMEDIATE TRUNCATE x CONTINUE IDENTITY TRUNCATE x RESTART IDENTITY IMMEDIATE 22 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 SQE对原生数据访问的支持 • 从7.2开始,下面的数据访问接口会使用SQE作为缺省引擎 • OPNQRYF • QUERY/400 • 此外,如果被访问的文件或表上定义有RCAC的话,对它的所有打开操作 都将由SQE处理。例如: • RPG open of PF, LF • CPYF, CPYFRMIMP, … SQE = Performance! • Any database file open operation • 此行为可以使用QAQQINI配置文件的中的SQE_NATIVE_ACCESS 参数控制 。 23 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 日程 • DB2 7.2 新功能简介 • 7.1 TR8, TR9 和 7.2 TR1 新功能简介 24 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i – 通过 DB2 PTF Group发布的新功能 IBM i 7.1 & 7.2 TR7 7.1 - TR9 7.2 – TR1 7.2 - GA 7.1 - TR8 SF99701 Level 26 7.2 - GA • SF99702 SF99701 Level 1 Level 29 7.1 - TR8 timed Enhancements: First DB2 PTF Group • for 7.2 • All IBM i 7.1 Enhancements • thru TR8 • • 7.2 – TR2 7.2 – TR3 SF99701 Level ?? SF99702 Level ?? SF99701 Level ?? SF99702 Level ?? 2015 2014 • Faster JDBC Toolbox SF99701 Level 32 SF99702 Level 3 7.1 – TR9 timed Enhancements: 7.2 – TR1 timed Enhancements: • • Everything in TR9. and… • System Limits Phase 3 - IFS • CREATE OR REPLACE support on MASK and PERMISSION Pipelined Functions Use SQL to programmatically analyze performance • Generate SQL procedure • New IBM i Services Program & Package statement level statistical catalogs • Guardium and Performance Monitoring improvements • And more… • Database Navigator Enhancements DB2 Built-in Global Variables for job name • And more… • And more… Regular Expression Scalar Functions Enhancements delivered by PTF are documented here: www.ibm.com/developerworks/ibmi/techupdates/db2 25 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i – 通过 DB2 PTF Group发布的新功能 • 通过浏览developerWorks IBM i Technology Updates wiki可以了解DB2 PTF Group的发布计划,状态和新功能列表。 www.ibm.com/developerworks/ibmi/techupdates/db2/groupptf • 26 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i: 7.1 TR8, TR9 and IBM i 7.2 TR1中提供的新功能 • 查找和处理数据 – 正则表达式Regular Expressions – 新的字符串填充函数(LPAD/RPAD) • 通过SQL部署复杂的用户自定义表函数(UDTF) – 管道化表函数Pipelined Table Functions • 更容易的获取环境参数细节 – 新的内建全局变量New DB2 built-in Global Variables – 通过API访问DB2内建全局变量 SQL 应用开发 IBM i Services 系统/DB 管理 安全 性能 • 更好的SQL编程支持和体验 – – – – – – – 27 用系统提供的存储过程为SQL对象生成DDL语句 用于生成引号隔开的SQL对象名字的工具 复制表格数据后同步目标表的标识列 乱序创建表分区 IBM i 调试器支持SQL程序和触发器(绿屏和GUI) SQL消息返回SQL列名字(而不是系统名字) RUNSQL支持假脱机打印队列输出 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i: 7.1 TR8, TR9 and IBM i 7.2 TR1中提供的新功能 • 日志相关的编目表(Catalog Table) – 可以了解本地和远程日志的详细信息 – 包含环境和统计信息 • 库列表编目表Library List Catalog – 可以返回当前连接的库列表(包括对于的模式名称) • 应答列表编目表Reply List Catalog – 适用SQL查询应答列表 – 通过编程和以实现不同机器间的应答列表比对 SQL 应用开发 IBM i Services 系统/DB 管理 安全 性能 • 作业日志表函数 – 应用可以通过SQL表函数访问当前或其他作业的日志 – 例如可用于处理作业中的错误信息 28 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i: 7.1 TR8, TR9 and IBM i 7.2 TR1中提供的新功能 • Navigator for i – 改进了DB相关的对话框 – 大幅提升了性能 • System Limits 阶段 3 – IFS SQL 应用开发 IBM i Services – 发现大的IFS对象 – 发现IFS对象的不断增长趋势 – 应对可能的IFS对象超限情况 系统/DB 管理 安全 性能 • Database Monitor用户过滤器增强 – 选择 1-10个需要监控的用户 – Navigator和绿屏命令都可以支持 – Guardium Database Activity Monitor使用这一新功能 • PTF Group “currency” 视图 – 了解当前系统安装的PTF Group与IBM发布的相比是否是最新的 • • • 29 Consume a live XML feed from IBM PSP Group information Access the current partition and extract the PTF Group information Use the SQL Query Engine to perform a live comparison © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i: 7.1 TR8, TR9 and IBM i 7.2 TR1中提供的新功能 • 使用DB2性能工具时保护敏感数据 – Database monitor 支持安全主机变量 – Navigator和命令行支持 • Row & Column Access Control – 更便捷的部署 OR REPLACE子句 SQL 应用开发 IBM i Services 系统/DB 管理 安全 性能 30 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i: 7.1 TR8, TR9 and IBM i 7.2 TR1中提供的新功能 • SQL 性能分析 – Visual Explain 支持更详细的 UDTF信息 • Drill down to see program statements – DRDA连接会标记特定的信息岛客户端特殊寄存器 – 受控的复杂查询优化 – 使用程序访问查询计划缓存快照 • “In Memory” 改进 SQL 应用开发 IBM i Services 系统/DB 管理 安全 性能 – 使用SQL语言可以设定表或者索引的In Memory属性 – 完整的Navigator支持 • 更多关于Index的信息 – 更易于评估索引的价值 – 可以通过编目表和Navigator获取数据 • Database monitor性能改进 – 精减主机变量的值的收集方式 – 减少I/O和CPU资源消耗 31 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 使用SQL生成SQL DDL源代码 SQL存储过程qsys2.generate_sql可以用来生成DDL源代码 call qsys.create_sql_sample('SAMPLE_CORPORATE_DB'); -- creates library SAMPL00001 call qsys2.generate_sql ('%', 'SAMPLE_%', 'TABLE', REPLACE_OPTION => '0'); (these calls generate the same detail) call qsys2.generate_sql ('%', 'SAMPL00001', 'TABLE', REPLACE_OPTION => '0'); 32 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 乱序创建表分区 • 使用CREATE TABLE创建分区表时,现在可以乱序指定分区区间了。添加分区也可以添 加在已有分区中间。 With TR8, out of order ranges are tolerated Example: create table corpdb.sales_table(trans_date timestamp) partition by range(trans_date) (starting('2013-01-01 00:00:00.000000') ending ('2013-03-31 23:59:59.999999'), starting('2013-07-01 00:00:00.000000') ending ('2013-09-30 23:59:59.999999')); -- Oops, forgot a partition, add it in alter table corpdb.sales_table add partition starting('2013-04-01 00:00:00.000000') ending ('2013-06-30 23:59:59.999999'); 33 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 正则表达式支持 正则表达式是强大的字符串搜索和匹配工具。现在可以在查询语句中使用下列正则表达式 谓词或者SQL函数. 函数或谓词 描述 REGEXP_LIKE 谓词 Searches for a regular expression pattern in a string and returns True or False REGEXP_COUNT Returns a count of the number of times that a pattern is matched in a string REGEXP_INSTR Returns the starting or ending position of the matched substring REGEXP_SUBSTR Returns one occurrence of a substring of a string that matches the pattern REGEXP_REPLACE Returns a modified version of the source string where occurrences of the pattern found in the source string are replaced with the specified replacement string Select the employee number where the last name is spelled LUCCHESSI, LUCHESSI, or LUCHESI from the EMPLOYEE table without considering upper or lower case letters. SELECT empno FROM employee WHERE REGEXP_LIKE(lastname,'luc+?hes+?i','i') 34 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 使用 LPAD & RPAD进行字符串补齐 • 使用LPAD/RPAD函数向左或者向右填充字符串 SELECT RPAD(FIRSTNME, B.LENGTH, '.') CONCAT CASE WHEN MIDINIT IS NULL OR MIDINIT = ' ' THEN '?' ELSE RPAD(MIDINIT, C.LENGTH, '.') END CONCAT '.‘ CONCAT RPAD(LASTNAME, D.LENGTH, '.') AS Employee_Names FROM toystore5.employee A, (SELECT LENGTH FROM QSYS2.SYSCOLUMNS WHERE TABLE_NAME = 'EMPLOYEE' AND COLUMN_NAME = 'FIRSTNME' AND TABLE_SCHEMA = 'TOYSTORE5') B, (SELECT LENGTH FROM QSYS2.SYSCOLUMNS WHERE TABLE_NAME = 'EMPLOYEE' AND COLUMN_NAME = 'MIDINIT' AND TABLE_SCHEMA = 'TOYSTORE5') C, (SELECT LENGTH FROM QSYS2.SYSCOLUMNS WHERE TABLE_NAME = 'EMPLOYEE' AND COLUMN_NAME = 'LASTNAME‘ AND TABLE_SCHEMA = 'TOYSTORE5') D 35 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 IBM i Debugger 对SQL的进一步支持 • STRDBG (绿屏) & IBM i Debugger (GUI界面) 可以用于调试SQL procedures, functions and triggers • 之前调试器只能显示编译好的SQL变量对应的高级语言变量或数据结构成员,且 无法单步执行SQL语句,不够友好。 • 在TR7中,调试器可以在SQL语句上中单步执行了。 • 在 TR9中,调试器可以支持EVAL SQL变量 New… 36 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 SQE – 受控的复杂查询的优化 • SQL Query Engine (SQE) 现在可以检测盒控制复杂查询的优化过程,带来查询 性能的提高和系统资源消耗的降低。 1. SQE可以识别出当前有同样的查询同时进入优化阶段。 2. SQE可以识别出查询时复杂查询 (>20 表引用) 3. 1 & 2 可以阻止超过3个相同查询的实例进入优化阶段。同样的查询情况会被暂 挂,直到现有优化过程完成。 这提高了SQE查询计划缓存的效率。原理是同样的查询有更高的机会可以重用 已经存在的计划,避免重复的优化过程。 7.1 DB2 PTF Group SF99701 Level 29 37 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 SQE – 受控的复杂查询的优化 New with TR8… Is the query complex? Job 1 Select … Job 2 Select … Job 3 Select … Optimize Open Run SQE Plan Cache Match a query already in optimization phase? No System resources System resources No Yes # of matches > 3? Yes 38 Wait for optimization to complete DB Open Exit Query Governors Adaptive Query Processor © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 跟踪系统极限值 – 阶段3 阶段 3 – 跟踪IFS文件系统中的目标极限值 被监控的文件系统: 39 • “root” (/) 文件系统 • Open systems 文件系统 (QOpenSys) • Document library services file system (QDLS) • 用户定义文件系统 (UDFSs) Discover trends, high consumers and more © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 跟踪系统极限值 – 阶段3 Limit ID Limit value 阈值 增量 Number of objects linked in a directory 18402 0 100,000 10,000 Maximum number of directories linked in a directory 18403 1,000,000 1,000 1,000 Maximum number of file system objects in *SYSBAS ASPs 18404 2,147,483,647 100,000 10,000 Maximum number of file system objects in an independent ASP 18405 2,147,483,647 100,000 10,000 Maximum number of document library objects in a folder 18406 65510 1,000 500 Number of document library objects in the system ASP 18407 0 100,000 10,000 Maximum number of document library objects in a user ASP 18408 349,000 100,000 10,000 Maximum number of bytes in a stream file 18409 1,099,511,627,776 16,777,216 1,048,576 Maximum number of bytes in a document 18409 2,147,483,647 16,777,216 1,048,576 极限值描述 http://iprodeveloper.com/systems-management/ondemand-tracking-important-system-limits-ibm-i http://iprodeveloper.com/systems-management/gain-big-insights-db2-i-system-limits-phase-2 40 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 跟踪系统极限值 – 阶段3 -- 检查系统中最大的IFS对象,返回按大小排序的列表 SELECT SIZING_NAME, IFS_PATH_NAME, OBJECT_TYPE, CURRENT_VALUE, USER_NAME, LASTCHG FROM QSYS2.SYSLIMITS WHERE LIMIT_CATEGORY = 'FILE SYSTEM' ORDER BY CURRENT_VALUE DESC 41 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 QSYS2.JOBLOG_INFO表函数 – 获取作业日志 • 作业日志包含大量关键信息 • 作业出现错误时,可以浏览作业日志获取错误信息 • 日志中的REQUEST消息可以用于了解执行过的CL命令 • 即使trace和其他错误记录手段存在, IBM服务部门通常都会要求获得作业日志 以帮助定位问题或异常 新的JOBLOG_INFO()表函数提供了一种全新的获取作业日志的方式,可以帮助应 用开发人员和系统管理者更方便的获取和处理作业日志 唯一的参数就是希望检查的作业名字 • ‘*’ 表示当前作业 • 或者指定另一作业的完整限定名 • • Example 1: Find the most recently executed command in a target job SELECT MESSAGE_TEXT FROM TABLE(QSYS2.JOBLOG_INFO('706721/SCOTTF/QPADEV0006')) A WHERE A.MESSAGE_TYPE = 'REQUEST' ORDER BY ORDINAL_POSITION DESC FETCH FIRST 1 ROW ONLY 42 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i – 获得进一步的技术信息 • Enhancements delivered by PTF: www.ibm.com/developerworks/ibmi/techupdates/db2 • Some InfoCenter books, including the 7.1 SQL Reference, are updated with TRs: http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/topic/db2/rbafz.pdf • The “IBM i 7.1 Technical Overview” Redbook: http://www.redbooks.ibm.com/abstracts/sg247858.html • We publish deep dive White Papers on some topics: HTTP functions & DB2 for i - http://bit.ly/httpAndDB2fori XML on DB2 for i - http://bit.ly/XMLonDB2fori • We explore some Technology topics with articles: www.ibm.com/developerworks/ibmi/library • DB2 for i – Power page http://ibm.com/systems/i/db2 43 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i – 获得进一步的技术信息 • developerWorks (re-designed) – – – • Blog – • Mike Cain: http://db2fori.blogspot.ca/2013/10/seven.html Twitter – 44 DB2 for i enhancements: https://www.ibm.com/developerworks/ibmi/techupdates/db2 DB2 for i forum: http://www.ibm.com/developerworks/forums/forum.jspa?forumID=292 Technical articles, and more… https://www.ibm.com/developerworks/ibmi/ Scott Forstie: https://twitter.com/Forstie_IBMi © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Backup 45 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 使用SQL生成SQL DDL源代码 • Today, SQL DDL can be generated for existing objects using IBM i Navigator’s Generate SQL… or via the Generate Data Definition Language (QSQGNDDL) API. With IBM i 7.1 in the TR8 timeframe, an SQL approach is now possible! • The QSYS2/GENERATE_SQL() procedure can be called to generate DDL for one or more objects. • The procedure has many parameters (33 of them), but leverages DB2 for i support for defaults on parameters. • Use the API documentation to understand the required privileges and procedure parameters: http://bit.ly/QSQGNDDL •The generated DDL can be written to a user specified output file or consumed as a result set. • Since this is an SQL procedure, SQLCODE=-443 is a generic indicator of failure. • If the object name is delimited, the delimited name needs to be input. • Either the SQL name or System name is permitted on input. • The procedure handles generic names, something unique to this interface. SQL interfaces are easy to use and powerful 46 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 管道表函数 管道表函数允许单纯使用SQL语言更灵活的创建复杂的UDTF,避免用户需要创建程序或者服务程序。 增强了UDTF的可移植性,因为不在需要依赖于特定的高级语言程序。 Traditional External UDTF Pipelined SQL UDTF CRTSQLCI OBJ(applib/producer) SRCFILE(appsrc/c80) COMMIT(*NONE) OUTPUT(*PRINT) OPTION(*NOGEN) CREATE FUNCTION producer() RETURNS TABLE ( largest_table_sizes INTEGER ) LANGUAGE SQL BEGIN CRTCMOD MODULE(applib/producer) SRCFILE(qtemp/qsqltemp) TERASPACE(*YES) STGMDL(*INHERIT) FOR LimitCursor CURSOR FOR SELECT CURRENT_VALUE FROM QSYS2.SYSLIMITS WHERE SIZING_NAME = 'MAXIMUM NUMBER OF ALL ROWS' ORDER BY CURRENT_VALUE DESC DO PIPE CURRENT_VALUE; END FOR; CRTSRVPGM SRVPGM(applib/udfs) MODULE(applib/producer) EXPORT(*SRCFILE) SRCFILE(BUILDLIB/APPEXP) SRCMBR(PRODUCER) ACTGRP(*CALLER) RETURN; END; CREATE FUNCTION producer() RETURNS TABLE (largest_table_sizes INTEGER ) EXTERNAL NAME applib.udfs(producer) LANGUAGE C PARAMETER STYLE SQL 47 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 管道表函数 Ease of Implementation • Pipelined table functions are easy to implement. While “set-at-a-time” processing remains the best practice, pipelined functions provide a user friendly alternative. Greater runtime flexibility • Pipelined table functions allow the flexibility to programmatically create 'virtual' tables with greater control than SELECT or CREATE VIEW can provide. UDTF input parameters Ability to handle errors and warnings Application logging References to multiple databases in a single query Customized join behavior Big Data / Analytics / Performance • In those scenarios where only a subset of the result table is consumed, pipelined functions are preferred. Interoperability / Portability • Compatible with DB2 for LUW support 48 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i – Name delimiting function • SQL Catalogs store names in un-delimited form • Most SQL statements and services require that input names be properly delimited. • The QSYS2/DELIMIT_NAME() User Defined Function (UDF) is a new DB2 for i supplied service that can be used to insure a name is ready for use. • Delimiters are only added if needed. • Input InName VARCHAR(128) & RETURNS VARCHAR(258) Example: SELECT TABLE_NAME , QSYS2.DELIMIT_NAME(TABLE_NAME) AS TABLE_NAME_DELIMITED FROM QSYS2.SYSTABLES ORDER BY TABLE_NAME 49 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Enhanced ability to copy tables with identity columns • Identity value columns are guaranteed to contain a unique value. • When tables are copied with INCLUDING IDENTITY COLUMN ATTRIBUTES or via CL commands like Copy File (CPYF), the next value for the identity column is the defined first value • In many cases, the Database Engineer (DBE) would prefer to have the new table use the same “next value” as the source table. • Now, you can easily reestablish the identity value using the QSYS2/RESTART_IDENTITY() procedure. The procedure calculates the NEXT VALUE of the source file’s identity value and alters the target file to match. Procedure signature: CALL QSYS2.RESTART_IDENTITY(<source-library-name>, <source-file-name>, <target-library-name>, <target-file-name>); 50 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Regular Expressions -- 7.1 version CREATE OR REPLACE FUNCTION FindHits(v_search_string CLOB(1M), v_pattern varchar(32000) ) RETURNS TABLE (website_reference varchar(512)) LANGUAGE SQL Regular expression & Pipeline BEGIN DECLARE V_Count INTEGER; function example for IBM i 7.1 DECLARE LOOPVAR INTEGER DEFAULT 0; SET V_Count = REGEXP_COUNT(v_search_string, v_pattern,1,'i'); IF v_pattern IS NULL OR LENGTH(v_pattern) = 0 THEN SET v_pattern = '(\w+\.)+((org)|(com)|(gov)|(edu))'; END IF; WHILE LOOPVAR < V_Count DO SET LOOPVAR = LOOPVAR + 1; PIPE( REGEXP_SUBSTR(v_search_string,v_pattern, 1, LOOPVAR, 'i') ); END WHILE; RETURN; END; SELECT * FROM TABLE(FindHits('Are you interested in any of these colleges: isu.EDU or www.umn.Edu? We could even visit WWW.wisc.edu if we have time.')) A; 51 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Regular Expressions -- 7.2 version CREATE OR REPLACE FUNCTION FindHits(v_search_string CLOB(1M), v_pattern varchar(32000) DEFAULT '(\w+\.)+((org)|(com)|(gov)|(edu))' ) RETURNS TABLE (website_reference varchar(512)) LANGUAGE SQL Regular expression & Pipeline BEGIN DECLARE V_Count INTEGER; function example for IBM i 7.2 DECLARE LOOPVAR INTEGER DEFAULT 0; SET V_Count = REGEXP_COUNT(v_search_string, v_pattern,1,'i'); WHILE LOOPVAR < V_Count DO SET LOOPVAR = LOOPVAR + 1; PIPE( REGEXP_SUBSTR(v_search_string,v_pattern, 1, LOOPVAR, 'i') ); END WHILE; RETURN; END; SELECT * FROM TABLE(FindHits('Are you interested in any of these colleges: isu.EDU or www.umn.Edu? We could even visit WWW.wisc.edu if we have time.')) A; 52 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Regular Expressions – understand the choices Query Choice Considerations Regular Expressions OmniFind Text Search Server for DB2 for i Enablement 7.1 - TR9 7.2 - TR1 No charge option (5733OMF) available at 6.1 and higher Finding matches REGEXP_LIKE predicate CONTAINS function Search Target Expression that returns a character string, graphic string, numeric, or datetime Column within a table, Spool files, IFS stream files, and more Search mechanism Pattern matching (grep, awk, etc…) Linguistic Variations Keyword, phrase matching, keyword variations (“mice” for “mouse”) Performance consideration No ability to use indexes for implementation Text search index Maintenance consideration None Index build & update(s) Complementary services REGEXP_COUNT, REGEXP_INSTR, REGEXP_SUBSTR & REGEXP_REPLACE SCORE Resources SQL Reference https://ibm.biz/IBMi_OMF 53 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Controlled padding using LPAD & RPAD • Works with many data types SELECT LPAD(EMPNO, 10, '0') as employee_number, LPAD(salary + bonus + comm, 12, '*') as total_compensation FROM toystore5.employee ORDER BY total_compensation; 54 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 QSYS2.JOBLOG_INFO表函数 – 获取作业日志 Example 2: 在应用中自动处理作业日志 CREATE OR REPLACE PROCEDURE TOYSTORE.UPDATE_SALES (IN P_NEW_SALES INTEGER, IN P_SALES_PERSON VARCHAR(100), IN P_SALES_DATE DATE) DYNAMIC RESULT SETS 1 LANGUAGE SQL MODIFIES SQL DATA SET OPTION COMMIT = *CHG BEGIN DECLARE C_RESULT_SET1 CURSOR WITH RETURN TO CALLER FOR SELECT MESSAGE_ID, MESSAGE_TEXT, MESSAGE_TYPE FROM SESSION.My_Joblog; Mainline: BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN DECLARE GLOBAL TEMPORARY TABLE My_Joblog AS (SELECT * FROM TABLE(QSYS2.JOBLOG_INFO('*')) A) WITH DATA WITH REPLACE; OPEN C_RESULT_SET1; END; UPDATE TOYSTORE.SALES SET SALES = SALES + P_NEW_SALES WHERE SALES_PERSON = P_SALES_PERSON AND SALES_DATE = P_SALES_DATE; END Mainline; END ; CALL TOYSTORE.UPDATE_SALES(3, 'LUCCHESSI', '1995-12-31') 55 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 SQL column names in messages • SQL Column names are much easier to understand than Field names • SQL Language constructs like FOR SYSTEM NAME and FOR COLUMN make it easier to recognize and understand failures, because the name is chosen instead of system generated • A behavior change has been made, to give preference to SQL column names in failure messages. The list of SQL messages changed to return SQL column names is: SQL0190, SQL0196, SQL0197, SQL0404, SQL0406, SQL0407, SQL0415 Now… Before… 56 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Programmatic consumption of Snapshots SQL Performance Monitors and SQL Plan Cache snapshots contain extensive detail about database activity. Today, the primary benefactor of this detail is the DBA or DB performance analyst who is using IBM i Navigator to graphically analyze the activity. The QSYS2/EXTRACT_STATEMENTS procedure provides an SQL interface to pull out the important / deep details. Example – Extract the 100 most recent statements CALL QSYS2.DUMP_PLAN_CACHE('SNAPSHOTS', 'SNAP020114'); CALL QSYS2.EXTRACT_STATEMENTS('SNAPSHOTS', 'SNAP020114', '*AUDIT', 'AND QQC21 NOT IN (''CH'', ''CL'', ''CN'', ''DE'', ''DI'', ''DM'', ''HC'', ''HH'', ''JR'', ''FE'', ''PD'', ''PR'', ''PD'')', ' ORDER BY QQSTIM DESC FETCH FIRST 100 ROWS ONLY ', null, null); 57 Parameters: 1) MONITOR_SCHEMA varchar(10) - required 2) MONITOR_NAME varchar(10) - required Optional parameters… 3) ADDITIONAL_SELECT_COLUMNS varchar(5000). A value of *AUDIT will cause the procedure to return the merged statement and columns that are normally interesting to auditing 4) ADDITIONAL_PREDICATES varchar(5000) 5) ORDER_BY varchar(5000) 6) OUTPUT_SCHEMA varchar(258) 7) OUTPUT_TABLE varchar(258) If parameters 6&7 are not specified, a result set is returned © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Programmatic consumption of Snapshots Example – Extract the 10 queries with the longest runtime, where the query took > 1 second CALL QSYS2.DUMP_PLAN_CACHE('SNAPSHOTS', 'SNAP020114'); CALL QSYS2.EXTRACT_STATEMENTS('SNAPSHOTS', 'SNAP020114', ADDITIONAL_SELECT_COLUMNS => ‘DEC(QQI6)/1000000.0 as Total_time, QVC102 as Current_User_Profile ', ADDITIONAL_PREDICATES => ' AND QQI6 > 1000000 ', ORDER_BY => ' ORDER BY QQI6 DESC '); Note: Extraction takes time, this is not a quick operation 58 Coding guide: http://bit.ly/1000rcdFields © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Finding the most expensive queries Everyone sees value in reviewing the most expensive queries. While “most expensive” can be interpreted in many ways, the total elapsed time needed to execute the query is the best place to start. The QSYS2.DUMP_PLAN_CACHE_topN procedure provides an SQL interface to programmatically mine the live SQL Plan Cache. Automate Example: CALL QSYS2.DUMP_PLAN_CACHE_topN('SNAPSHOTS', 'TOPN020214', 20); select qqc21,DEC(QQI6)/1000000.0 as Total_time, QVC102 as Current_User_Profile, qq1000 from SNAPSHOTS.TOPN020214 where qqrid=1000 order by qqi6 desc; using SQL Parameters: 1) OUTPUT_LIBRARY varchar(10) 2) OUTPUT_TABLE varchar(10) 3) Top_N_Choice INTEGER 7.1 DB2 PTF Group SF99701 Level 29 59 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 QSYS2/GET_JOB_INFO() enhanced • • GET_JOB_INFO() enhanced to accept ‘*’ to indicate that the current job as the target The UDTF table is enhanced to include the most recently executed (or currently executing) SQL statement text Example 1) Get job information for the current job select a.* from table(qsys2.get_job_info('*')) a; Example 2) Get job information for the current job select a.* from table(qsys2.get_job_info('803868/Quser/Qzdasoinit')) a; 60 IBM i 6.1 IBM i 7.1 DB2 PTF Group SF99601 Level 32 DB2 PTF Group SF99701 Level 29 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i Built-in Global Variables • • • The qualified job name of the current connection is easily accessed When SQL Server Mode is used, the job name of the application instance which owns the connection is accessed through SERVER_MODE_JOB_NAME Use these variables to deploy advanced logic in triggers, RCAC rules, and more New with IBM i 7.2 SF99702 Level 3 Available with base IBM i 7.2 61 Variable name Schema Data Type Size JOB_NAME QSYS2 VARCHAR 28 SERVER_MODE_JOB_NAME QSYS2 VARCHAR 28 CLIENT_IPADDR SYSIBM VARCHAR 128 CLIENT_HOST SYSIBM VARCHAR 255 CLIENT_PORT SYSIBM INTEGER - PACKAGE_NAME SYSIBM VARCHAR 128 PACKAGE_SCHEMA SYSIBM VARCHAR 128 PACKAGE_VERSION SYSIBM VARCHAR 64 ROUTINE_SCHEMA SYSIBM VARCHAR 128 ROUTINE_SPECIFIC_NAME SYSIBM VARCHAR 128 ROUTINE_TYPE SYSIBM CHAR 1 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 QSYS2.JOURNAL_INFO – View • Use SQL to retrieve detail for local & remote journals • Information from QjoRetrieveJournalInformation() API, RJRN0100 format. • The view returns Key 1 & 3 information, one row == information about one journal. -- Which remote journals are the most heavily used? SELECT JOURNALED_OBJECTS, A.* FROM QSYS2.JOURNAL_INFO A WHERE NUMBER_REMOTE_JOURNALS > 0 AND JOURNALED_OBJECTS IS NOT NULL ORDER BY JOURNALED_OBJECTS DESC -- Find journals that are nearing the limit of journaled objects: SELECT * FROM QSYS2.JOURNAL_INFO WHERE JOURNALED_OBJECT_LIMIT = '*MAX250K' AND JOURNALED_OBJECTS > 200000 62 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 QSYS2.JOURNAL_INFO – View • Use this new source of information to achieve better journal management • Recognize conditions that require attention -- Which remote journals fell the farthest behind this week? SELECT MAXIMUM_TIME_BEHIND, MAXIMUM_BEHIND_TIMESTAMP, ESTIMATED_TIME_BEHIND, TOTAL_SIZE_JOURNAL_RECEIVERS, RTRIM(ATTACHED_JOURNAL_RECEIVER_LIBRARY) CONCAT '/' CONCAT RTRIM(ATTACHED_JOURNAL_RECEIVER_NAME) AS JrnName, A.* FROM QSYS2.JOURNAL_INFO A WHERE MAXIMUM_BEHIND_TIMESTAMP > CURRENT TIMESTAMP - 7 DAYS AND MAXIMUM_TIME_BEHIND > 0 AND MAXIMUM_TIME_BEHIND IS NOT NULL ORDER BY MAXIMUM_TIME_BEHIND DESC FETCH FIRST 10 ROWS ONLY 63 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 QSYS2.REPLY_LIST_INFO – view • • One reply list handles system wide automatic response to messages Now, SQL can be used to: Compare (exception join) the configuration of two machines Determine whether a specific sequence number is already in use Confirm whether setup is complete REPLY_LIST_INFO matches the Work Reply List Entry (WRKRPYLE) command behavior of allowing *PUBLIC users to view the reply list information • Example: SELECT * FROM QSYS2.REPLY_LIST_INFO WHERE message_ID like 'CPA%' 64 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 QSYS2.LIBRARY_LIST_INFO – view • With direct access to the library list, SQL users can tap into the library list detail to: • Programmatically review the environment • Know when the library list needs to be adjusted • Derive information about the libraries IASP Number Schema vs Library name mapping User vs System vs Product libraries Above all else, order of libraries searched for unqualified objects Example: SELECT * FROM QSYS2.LIBRARY_LIST_INFO 65 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 SYSTOOLS.GROUP_PTF_CURRENCY View SELECT * from SYSTOOLS.GROUP_PTF_CURRENCY WHERE PTF_GROUP_RELEASE = ‘R720’ ORDER BY ptf_group_level_available ptf_group_level_installed DESC Current or behind on service? 66 PTF Group Info Level installed on this partition Level available from IBM Date that IBM last updated this group © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 SYSTOOLS.GROUP_PTF_CURRENCY View http://www912.ibm.com/s_dir/sline003.nsf/PSPbyNumL.xml?OpenView&count=500 XML namespace & structure 67 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 SYSTOOLS.GROUP_PTF_CURRENCY View Study the XML structure to define the data to the HTTP function. HTTPXML document structure TCP/IP Enablement: ‘www-912.ibm.com’ maps to 129.42.160.32 IBM i TCP/IP configuration Technote: Enablement http://www-01.ibm.com/support/docview.wss?uid=nas8N1018980 White papers: • https://ibm.biz/XMLandDB2fori • 68https://ibm.biz/HTTPandDB2fori Developer resources © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 SYSTOOLS.GROUP_PTF_CURRENCY View CREATE OR REPLACE VIEW SYSTOOLS/GROUP_PTF_CURRENCY FOR SYSTEM NAME GRPPTFCUR ( PTF_GROUP_CURRENCY FOR COLUMN GRP_CRNCY , SQL Source PTF_GROUP_ID FOR COLUMN GRP_ID , PTF_GROUP_TITLE FOR COLUMN GRP_TITLE , PTF_GROUP_LEVEL_INSTALLED FOR COLUMN GRP_LVL , PTF_GROUP_LEVEL_AVAILABLE FOR COLUMN GRP_IBMLVL , PTF_GROUP_LAST_UPDATED_BY_IBM FOR COLUMN GRP_LSTUPD , PTF_GROUP_RELEASE FOR COLUMN GRP_RLS , PTF_GROUP_STATUS_ON_SYSTEM FOR COLUMN GRP_SYSSTS ) AS SELECT CASE WHEN ACTUAL.GRPPTF IS NULL THEN 'PTF GROUP DOES NOT EXIST ON ' CONCAT CURRENT SERVER WHEN PSPS.PSP_NUMBER IS NULL THEN 'PSP INFORMATION NOT AVAILABLE' WHEN ACTUAL.GRPPTF = PSPS.PSP_NUMBER AND ACTUAL.PTF_GROUP_LEVEL = PSPS.PSP_LEVEL THEN 'INSTALLED LEVEL IS CURRENT' WHEN ACTUAL.GRPPTF = PSPS.PSP_NUMBER AND ACTUAL.PTF_GROUP_LEVEL < PSPS.PSP_LEVEL THEN 'UPDATE AVAILABLE' WHEN ACTUAL.GRPPTF = PSPS.PSP_NUMBER AND ACTUAL.PTF_GROUP_LEVEL > PSPS.PSP_LEVEL THEN 'PSP IS DOWNLEVEL - ' CONCAT ACTUAL.PTF_GROUP_STATUS END PTF_GROUP_CURRENCY, COALESCE(PSPS.PSP_NUMBER, ACTUAL.GRPPTF) PTF_GROUP_ID, COALESCE(PSPS.PSP_TITLE, ACTUAL.PTF_GROUP_DESCRIPTION) PTF_GROUP_TITLE, ACTUAL.PTF_GROUP_LEVEL PTF_GROUP_LEVEL_INSTALLED, PSPS.PSP_LEVEL PTF_GROUP_LEVEL_AVAILABLE, PSPS.PSP_DATE AS PTF_GROUP_LAST_UPDATED_BY_IBM, COALESCE(PSPS.PSP_RELEASE, ACTUAL.PTF_GROUP_TARGET_RELEASE) PTF_GROUP_RELEASE, ACTUAL.PTF_GROUP_STATUS PTF_GROUP_STATUS_ON_SYSTEM FROM XMLTABLE('/all_psps/psp' PASSING XMLPARSE(DOCUMENT HTTPGETBLOB('http://www-912.ibm.com/s_dir/sline003.nsf/PSPbyNumL.xml?OpenView&count=500' , '')) COLUMNS PSP_RELEASE CHAR(5) PATH 'release', PSP_NUMBER CHAR(7) PATH 'number', PSP_TITLE © 2014 IBM Corporation 69 VARCHAR(1000) PATH 'title', PSP_LEVEL INTEGER PATH 'level', PSP_DATE CHAR(10) PATH 'date' IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Automated management of Plan Cache detail More procedures added to the roster… • QSYS2/IMPORT_PLAN_CACHE() procedure • QSYS2/REMOVE_PLAN_CACHE() procedure • QSYS2/IMPORT_EVENT_MONITOR() procedure • QSYS2/REMOVE_EVENT_MONITOR() procedure Example usage: CREATE OR REPLACE PROCEDURE SNAP_AND_IMPORT() LANGUAGE SQL BEGIN DECLARE SNAP_NAME CHAR(10); DECLARE OLDEST_SNAP_NAME CHAR(10); DECLARE SNAP_COMMENT VARCHAR(100); SET SNAP_NAME = 'SNAP' CONCAT DAYOFYEAR(current date) CONCAT SUBSTR(YEAR(current date),3,2); SET OLDEST_SNAP_NAME = 'SNAP' CONCAT DAYOFYEAR(current date - 60 days) CONCAT SUBSTR(YEAR(current date - 60 days),3,2); CALL QSYS2.DUMP_PLAN_CACHE_topN('SNAPSHOTS', SNAP_NAME, 100); CALL QSYS2.IMPORT_PC_SNAPSHOT('SNAPSHOTS', SNAP_NAME, 'Top 100 Queries-' CONCAT CHAR(CURRENT DATE)); CALL QSYS2.REMOVE_PC_SNAPSHOT('SNAPSHOTS', OLDEST_SNAP_NAME); END; CALL SNAP_AND_IMPORT(); 70 Automated capture & import Automated removal of oldest detail © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DRDA connections imprinted with client special register values • • • By branding DRDA connections with client special register default values, it becomes easier to recognize and understand workload identity. When using an IBM i Application Requestor (AR), the values will be imprinted and flow to the AS. When any AR connects to an IBM i Application Server (AS), these values will appear if the register does not already contain a value CLIENT PROGRAMID 'DRDA‘ CLIENT APPLNAME pppvvrrm (for example 'QSQ07010‘) where: • ppp identifies the AR product signature as follows: ‘ARI’ - DB2 for VM and VSE ‘DSN’ - DB2 for z/OS ‘QSQ’ - DB2 for i ‘SQL’ - all other DB2 products • vv is a two-digit version identifier • rr is a two-digit release identifier • m is a one-character modification level CLIENT USERID The user ID on the AR CLIENT WRKSTNNAME The DB2 for i system name on the AR CLIENT ACCTNG The user's accounting code on the AR 71 7.1 DB2 PTF Group SF99701 Level 29 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DRDA connections imprinted with client special register values • Where does this information surface? Answer: Pervasively throughout IBM i Navigator For example… within Visual Explain 72 © 2014 IBM Corporation ® IBM DB2 IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 ® for i Catalogs Privileges Catalogs Routines Statistics SYSCATALOGS INFORMATION_SCHEMA_CATALOG_NAME Schemas SYSSCHEMAS SQLSCHEMAS SCHEMATA Database Support SQL_FEATURES SQL_LANGUAGES SQL_SIZING CHARACTER_SETS SQLCOLPRIVILEGES SQLTABLEPRIVILEGES Tables Views Indexes SYSCOLUMNS SYSCOLUMNS2 SYSFIELDS SYSINDEXES SYSKEYS SYSTABLEDEP SYSTABLES SYSVIEWDEP SYSVIEWS SYSCOLAUTH SYSPACKAGEAUTH SYSROUTINEAUTH SYSSCHEMAAUTH SYSSEQUENCEAUTH SYSTABAUTH SYSUDTAUTH SYSVARIABLEAUTH SYSXSROBJECTAUTH Constraints SYSCHKCST SYSCST SYSCSTCOL SYSCSTDEP SYSKEYCST SYSREFCST AUTHORIZATIONS ROUTINE_PRIVILEGES UDT_PRIVILEGES USAGE_PRIVILEGES VARIABLE_PRIVILEGES SYSTRIGCOL SYSTRIGDEP SYSTRIGGERS SYSTRIGUPD SQLFOREIGNKEYS SQLPRIMARYKEYS COLUMNS TABLES VIEWS CHECK_CONSTRAINTS REFERENTIAL_CONSTRAINTS TABLE_CONSTRAINTS 73 SQLFUNCTIONCOLS SQLFUNCTIONS SQLPROCEDURECOLS SQLPROCEDURES PARAMETERS ROUTINES SQLSTATISTICS Miscellaneous Objects SYSPACKAGE SYSSEQUENCES SYSTYPES SYSVARIABLEDEP SYSVARIABLES XML Schemas Triggers SQLCOLUMNS SQLSPECIALCOLUMNS SQLTABLES SYSCOLUMNSTAT SYSINDEXSTAT SYSMQTSTAT SYSPACKAGESTAT SYSPACKAGESTMTSTAT SYSPARTITIONDISK SYSPARTITIONINDEXES SYSPARTITIONINDEXDISK SYSPARTITIONINDEXSTAT SYSPARTITIONMQTS SYSPARTITIONSTAT SYSPROGRAMSTAT SYSPROGRAMSTMTSTAT SYSTABLEINDEXSTAT SYSTABLESTAT SYSFUNCS SYSJARCONTENTS SYSJAROBJECTS SYSPARMS SYSPROCS SYSROUTINEDEP SYSROUTINES XSRANNOTATIONINFO XSROBJECTCOMPONENTS XSROBJECTHIERARCHIES XSROBJECTS SQLTYPEINFO SQLUDTS DB2 for i catalog views (QSYS2) ODBC and JDBC TM catalog views (SYSIBM) ANS and ISO catalog views (QSYS2) Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both. Other company, product or service names may be trademarks or service marks of others. USER_DEFINED_TYPES http://www.ibm.com/systems/i/software/db2/ © 2014 IBM Corporation ® IBM DB2 IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Health Center Procedures QSYS2.HEALTH_ACTIVITY QSYS2.HEALTH_DATABASE_OVERVIEW QSYS2.HEALTH_DESIGN_LIMITS QSYS2.HEALTH_ENVIRONMENTAL_LIMITS QSYS2.HEALTH_SIZE_LIMITS QSYS2.RESET_ENVIRONMENTAL_LIMITS Utility Procedures QSYS2.CANCEL_SQL QSYS2.DUMP_SQL_CURSORS QSYS2.EXTRACT_STATEMENTS QSYS2.FIND_AND_CANCEL_QSQSRVR_SQL QSYS2.FIND_QSQSRVR_JOBS QSYS2.GENERATE_SQL QSYS2.RESTART_IDENTITY SYSTOOLS.CHECK_CST SYSTOOLS.CHECK_SYSROUTINE ® for i Services Application Services QSYS2.QCMDEXC - PROCEDURE QSYS2.OVERRIDE_TABLE – PROCEDURE QSYS2.DELIMIT_NAME – UDF SYSPROC.WLM_SET_CLIENT_INFO – PROCEDURE Security Services QSYS2.FUNCTION_INFO – VIEW QSYS2.FUNCTION_USAGE – VIEW QSYS2.GROUP_PROFILE_ENTRIES – VIEW SYSPROC.SET_COLUMN_ATTRIBUTE - PROCEDURE QSYS2.SQL_CHECK_AUTHORITY - UDF QSYS2.USER_INFO – VIEW TCP/IP Services QSYS2.TCPIP_INFO - VIEW SYSIBMADM.ENV_SYS_INFO - VIEW Work Management Services QSYS2.SYSTEM_VALUE_INFO - VIEW QSYS2.GET_JOB_INFO - UDTF QSYS2.OBJECT_STATISTICS – UDTF Storage Services QSYS2.SYSDISKSTAT – VIEW QSYS2.USER_STORAGE – VIEW QSYS2.CHANGE_PLAN_CACHE_SIZE QSYS2.DUMP_PLAN_CACHE QSYS2.DUMP_PLAN_CACHE_PROPERTIES QSYS2.DUMP_PLAN_CACHE_topN QSYS2.END_ALL_PLAN_CACHE_EVENT_MONITORS QSYS2.END_PLAN_CACHE_EVENT_MONITOR QSYS2.START_PLAN_CACHE_EVENT_MONITOR (2) Journal Services QSYS2.DISPLAY_JOURNAL - UDTF System Health Services Performance Services 74 QSYS2.PTF_INFO - VIEW QSYS2.GROUP_PTF_INFO - VIEW Object Services Plan Cache Procedures SYSTOOLS.ACT_ON_INDEX_ADVICE - PROCEDURE SYSTOOLS.HARVEST_INDEX_ADVICE - PROCEDURE QSYS2.OVERRIDE_QAQQINI - PROCEDURE QSYS2.RESET_TABLE_INDEX_STATISTICS PROCEDURE QSYS2.SYSIXADV - TABLE SYSTOOLS.REMOVE_INDEXES - PROCEDURE PTF Services DB2 for i Services QSYS2.SYSLIMTBL - TABLE QSYS2.SYSLIMITS – VIEW IBM i Services http://www.ibm.com/developerworks/ibmi/db2 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i – Navigator Enhancements 75 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Navigator – what database users need to know What are the choices? iAccess for Windows (aka System i Navigator) IBM Navigator for i Where does it run? Windows PC Install Browser Served from IBM i 6.1, 7.1 & 7.2 Recent service level? IBM i Access Windows Service Pack IBM HTTP SERVER FOR i PTF Group: 7.2 - SF99713 Level 3 TR8 7.1 - SF99368 Level 29 TR8 6.1 - SF99115 Level 40 Database commonality Most features are identical, including IBM i TR8 and IBM i 7.2 enhancements Most features are identical, including TR8 enhancements Database differences Run SQL Scripts Visual explain PDI Perspectives OmniFind administration Webpage to watch www03.ibm.com/systems/power/software/i/access/windows_sp.html www-912.ibm.com/s_dir/SLINE003.NSF/PTFbyNumber/SF99368 www-912.ibm.com/s_dir/SLINE003.NSF/PTFbyNumber/SF99115 www-912.ibm.com/s_dir/SLINE003.NSF/PTFbyNumber/SF99713 Next (planned) Update December 31, 2014 IBM i 7.1 TR9 & IBM i 7.2 TR1 December 31, 2014 IBM i 7.1 TR9 & IBM i 7.2 TR1 76 7.1 – SI53584 TR8 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i – Navigator Enhancements in IBM i 7.1 TR8 Navigator feature Improvement Database folders Preference control to ‘Retrieve all rows when populating the list’ Run SQL Scripts Options ‘Allow Save Results’ will enable result sets from CALL statements to be saved Visual Explain Ability to launch multiple explains in one action 77 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Preference control to ‘Retrieve all rows when populating the list’ Control how Schema lists are populated 78 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Visual Explain Ability to launch multiple explains in one action Power launch VE enmass 79 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Options ‘Allow Save Results’ enables ability to save multiple result sets from a procedure CALL Save secondary result sets using one of 5 file types 80 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 DB2 for i – Navigator Enhancements in IBM i 7.1 TR9 Navigator feature Improvement Performance Monitor New host variable control Filter up to 10 user profiles or group names Visual Explain Visual Explain of UDTFs Schema folder -> Indexes Ability to view index create timestamp and usage statistics Schema folder -> Object View and change Media preference and Memory Preference of table, partition and indexes definition SQL Detail for Jobs 81 View client host name and client port © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Navigator SQL Performance Monitors • SQL Performance Monitors New HOSTVAR (*BASIC / *CONDENSED / *SECURE) control Enhanced ‘Filter by User’ control, support for 1-10 user or group names 82 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Navigator SQL Performance Monitors • Enhancement requires both Navigator update and DB2 PTF Group. • If you have an up level client and down level IBM i, you will see the following… Monitoring improvements appear, but are disabled when working with IBM i partitions running older releases or with older PTF Group levels 83 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Navigator Visual Explain of UDTFs Visual Explain is enhanced to allow you to “drill down” into activity within UDTFs • Works against Performance Monitors, Snapshots or the live SQL Plan Cache • Returns statements executed within the UDTF, after the start time of the VE’d query 84 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Navigator Schemas Folder and Indexes Working with existing indexes via Navigator includes usage detail, making it possible to quickly gauge the value of an existing index. • The addition of the ‘Date Created’ column provides more context for the usage statistics 85 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Navigator Schemas Folder and Indexes If you have ever customized this dialog, you have to use the Columns… control to add the new column Date Created column is empty when working with IBM i partitions running older releases or with older PTF Group levels 86 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Navigator Schemas Folder and Object Definition Whether the object is a table, index, or partition, Navigator can be used to assess the Media Preference & Memory Preference. ON SSD IN MEMORY 87 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Navigator Schemas Folder and Object Description Use the Description action to see the Media and Memory Preference You can change the settings and either: • Complete the change by selecting ‘Ok’ • Select the ‘Show SQL’ button to see the equivalent SQL IBM i 7.1 IBM i 7.2 88 © 2014 IBM Corporation IBM中国系统与科技研发中心 --- IBM i 实验室之旅深圳站 Navigator SQL Details for Jobs SQL Details for Jobs is enhanced to show more insight into the environment of the target job. The Client port and Client host name values match what that job would see if it used the DB2 Built-in Global variables SYSIBM.CLIENT_PORT & SYSIBM.CLIENT_HOST Note: Right-click on the statement text window to see the Refresh and other actions 89 © 2014 IBM Corporation
© Copyright 2024