【51CTO独家特稿】首先声明一点,本文不是DB2 9.7新特性的详尽清单,我仅仅列出了针对DBA或开发人员非常重要的清单。
联机方案修改
请看Burt关于联机方案修改的文章,地址:http://www.ibm.com/developerworks/data/library/techarticle/dm-0907db2outages/index.html。
CGTT – 创建全局临时表
现在可以创建全局临时表,再也不用在每次会话中声明临时表了,全局临时表有以下几个好处:
1、CGTT根据授权控制
2、可以在CGTT上定义视图,索引和触发器
3、CGTT和DGTT可以包括LOB数据类型
CREATE GLOBAL TEMPORARY TABLE DGTT_TABLE
(
EMP_ID INTEGER,
HIRE_DATE TIMESTAMP(3)
)
参数标记
存储过程中的参数可以有默认值。
在调用语句中,你可以直接使用默认值,跳过参数的赋值。
命名参数允许按名称,以任何顺序赋值。
DB2中的SSL连接
DB2允许在Java客户端和服务器之间使用SSL连接,但需要同时对客户端和服务器进行配置才能正常使用。
服务器端配置
使用iKeyman GUI工具创建一个证书数据库,即KeyStore文件;
将你从证书颁发机构购买的服务器数字证书导入到证书数据库;
设置下面的DBM配置参数;
◆ SSL_SVR_KEYDB:密钥存储文件
◆ SSL_SVR_STASH:Stash文件
◆ SSL_SVCENAME:SSL端口
另外,选择一个密码套件
◆ SSL_CIPHERSPECS:允许的加密套件
◆ SSL_VERSIONS:允许的SSL/TLS版本
开启实例SSL通信功能
db2set DB2COMM=SSL或db2set DB2COMM=SSL,TCPIP
客户端配置
使用ikeyman GUI工具创建一个签名证书数据库;
将你从证书颁发机构购买的服务器数字证书导入到证书数据库。
修改连接属性
....
properties.put("sslConnection", "true");
System.setProperty("javax.net.ssl.trustStore", "/home/db2inst1/client.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "myPassword");
....
con = java.sql.DriverManager.getConnection(url, properties);
SSL握手是如何工作的?
客户端请求一个SSL连接,列出它的SSL版本和支持的加密套件;
服务器使用一个选定的加密套件进行响应;
服务器将它的数字证书发给客户端;
客户端验证服务器的证书(服务器验证);
客户端和服务器安全地协商一个会话密钥;
客户端和服务器使用前面选定的密钥安全地交换信息。
XML增强
在XML处理方面有一些增强,值得关注的是:
对pureXML的完整支持;
XDA对象中的XML文档也可以压缩;
XML索引在线重组;
UDF中可以使用XML列;
MDC表中可以使用XML列;
来自查询CLP命令的DECOMP:为了拆分XML文档,可以使用DECOMPOSE XML DOCUMENTS IN <select_statement> XMLSCHEMA <xmlschemaname>;
来自查询存储过程的DECOMP:sysproc.xdb_Decomp_XML_From_Query;
ADMIN_IS_INLINED和ADMIN_EST_INLINE_LENGTH可以用于了解XML或LOB是否内联或其长度。
DECOMP示例:
DECOMPOSE XMDOCUMENTS IN
'SELECT DOCID, SALESDOC
FROM ABC.SALESTAB'
XMLSCHEMA ABC.SALES
MESSAGES /home/myid/errors/errorreport.xml
CALXDB_DECOMP_XML_FROM_QUERY (
'ABC', 'SALES',
'SELECT DOCID, SALESDOC FROM ABC.SALESTAB',
0, 0, 0, NULL, NULL, 1,
:hnumInput, :hnumDecomposed, :herrorreportBuf);
注意:XDA=存储XML文档,且在基础表中没有内联的对象。
CLPPLUS vs SQL*Plus
DB2有一个和Oracle的SQL*Plus类似的工具,叫做CLPPlus,如果你知道怎么用SQL*Plus,那你一定会用CLPPlus。
DB2中的PL/SQL
这个听起来似乎最能吸引人们的目光,试想一下你在DB2中使用Oracle PL/SQL的感觉,记住Oracle已经有20年的PL/SQL开发经验,因此与Oracle比起来还是有差距的,但相信IBM会越做越好。
DB2中的PL/SQL编译器是天生的,不是什么屏蔽层,不是将PL/SQL转换成DB2 SQL PL,因此可以在代码级调试PL/SQL。
支持的DBMS包:
DBMS_OUTPUT
UTL_FILE
DBMS_ALERT
DBMS_PIPE
DBMS_JOB
DBMS_LOB
DBMS_SQL
DBMS_UTILITY
UTL_MAIL
UTL_SMTP
支持的PL/SQL特性
所有语言逻辑支持,如IF, WHILE :=等;
异常 - Try/catch处理;
用户定义的异常;
常数变量 – 变量不能被设置;
单步调试查询结果集;
单步调试游标结果集;
%TYPE – 锚标数据类型;
%ROWTYPE – 锚标行类型;
BULK COLLECT/FETCH – 将结果集聚集到数组中;
FORALL – 将数组输入到SQL语句;
AUTOMONOUS事务 – 在一个独立的TX中执行一个存储过程;
匿名块;
标量函数;
存储过程;
包;
触发器;
包上的同义词。
DB2中的Oracle类型:
NUMBER
VARCHAR2 - NULL = '',尾部空白敏感整理
TIMESTAMP(n) - 0 (date + time) <= N <= 12(日期+时间+皮秒)
DATE – 年到秒,sysdate
BOOLEAN
INDEX BY
VARRAY
Row Type
Ref Cursor – 允许传递和预定义游标
DB2中重要的Oracle函数部分清单
TO_CHAR, TO_DATE, TO_TIMESTAMP, TO_NUMBER, TO_CLOB
EXTRACT, ADD_MONTHS, ...
INITCAP, RPAD, LPAD, INSTR, REVERSE, ...
DECODE, NVL, LEAST, GREATEST, BITAND
DB2中的Oracle SQL清单
CONNECT BY
(+)-join
DUAL
ROWNUM
NEXTVAL/CURRVAL
MINUS
Unnamed inline views
TRUNCATE table
Public synonym
CREATEd temp table
职责分离
SYSADM在DB2中当上帝的日子一去不复还了,现在各个角色的分工非常明确。
有了数据库级的SECADM后,赋予SYSADM的DBADM肯定会移除了;
SECADM现在可以被分配给ROLE和GROUP;
SECADM现在可以授予/取消数据库和对象认证;
DBADM可以按这种方式创建,因此它不能看到数据,也不能执行授权/撤销授权;
DBADM不能获得间接授予的权限;
创建了新的权限,如EXPLAIN, DATAACCESS, ACCESSCTRL, SQLADM, WLMADM。
自动存储
新增了一些自动化存储方面的功能,值得关注的是:
当现有存储路径被填满后,你可以在线增加一个存储路径,如果你想跨4个存储路径条带化数据以获得高并行能力,可以使用ALTER TABLESPACE myts REBALANCE命令重新平衡数据,另外还可以使用ALTER TABLESPACE myts REDUCE命令减小高水位标记;
你可以使用ALTER DATABASE DROP STORAGE PATH ON 'path1'删除一个存储路径,存储路径被修改成DROP PENDING状态,所有的表空间被标记为“基本存储路径已经被删除”,当所有使用它的表空间通过ALTER TABLESPACE ts1 REBALANCE重新平衡后,DROP PENDING存储路径被移除;
ALTER TABLESPACE ts1 REDUCE命令将会释放截留的空间,不允许高水位标记低于早前的DB2版本;
你可以将非自动化存储数据库转换成自动化存储数据库:
◆ALTER DATABASE ADD STORAGE支持非自动化存储数据库;
◆上面的命令给数据库增加一个存储池;
◆它允许使用自动化存储创建新的表空间。
你可以将非自动化存储DMS表空间转换成自动化存储表空间:
◆ALTER TABLESPACE … MANAGED BY AUTOMATIC STORAGE;
◆来自新存储路径的新增长被添加到数据库中;
◆旧容器可以使用DROP或REBLANCE移除。
使用自动化存储,可以从旧的DMS执行REDIRECTED RESTORE恢复到新表空。
在线表移动