详解DB2 9.7中值得DBA关注的几点新特性
2015-08-27来源:

【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恢复到新表空。

在线表移动

推荐信息
Baidu
map