|
DB2 9.7 现在已经可获得了!下载最新版的 DB2 Express-C 9.7, 到下面链接:
http://www.ibm.com/developerworks/cn/downloads/im/udbexp/
DB2 Express-C 9.7 包括很多改进和增强,太多以至于无法在这提供一个完整列表。DB2的其它版本包括更多的改进。你可以浏览DB2信息中心中的“What‘s new overview”板块来获得更详细的介绍。尽管如此,下面是我喜欢的一些新特性:
1) 锁增强
通过CS隔离级别新的当前提交语义,写操作(比如,update)将不会阻塞读操作(比如,select)。读操作将会在更新操作前读取当前提交数据的值。这将会提高并发现和降低死锁。
举例说明,比如你有一个T1的表并存储了下面的数据:
FIRSTNAME LASTNAME
Raul Chong
Jin Xie
现在一个应用程序 AppA执行下面语句,但没有提交:
update T1 set lastname = 'Smith' where firstname = 'Raul'
此外,另一应用程序AppB 执行下面语句:
select lastname from T1 where firstname = 'Raul' with CS
在9.7版本以前,后面的一个执行将会等待,因为它需要等待AppA由update引起的排他锁(x-lock)释放掉。而在DB2 9.7中,当前提交功能被允许(新数据库的默认模式),AppB执行完后将会得到当前已被提交的数据“Chong”。
2) 性能增强
对于动态SQL, DB2 9.7引入“语句集中器(statement concentrator)“特征,这将会提高像Ruby和PHP这种程序语言开发出程序的性能。正如名字所暗示的,执行语句集中器将会寻找那些除参数外都相同的SQL语句,并将它们集中到一个里面,例如:
SELECT name FROM employee WHERE empid = 10
SELECT name FROM employee WHERE empid = 20
SELECT name FROM employee WHERE empid = 30
将会被集中成:
SELECT name FROM employee WHERE empid = ?
问号 (?) 代表一个参数标识. 在执行期间, 对于该例DB2将用10,20,30代替问号.这将会极大的提高性能. 在先前发行版本, DB2将会将每条语句都当做一条语句来处理,并分别编译和执行它们, 对所有语句的访问计划(access plan)基本一样, 因此重复计算将会是一种资源的浪费。有了语句集中器,DB2将会编译语句一次并取得访问计划,然后重用它。
其它性能的改进时能够将小的LOBs内联到数据行中。因为这些小的LOBs可以通过bufferpool来访问,也改进也改进了性能。
3)应用程序开发增强
对应用程序员来说有大量的改进:
a)
触发器和UDFs现在增强了SQL PL支持。在DB2 9.7之前,它们只能支持内联SQL PL,SQL PL的一个小的子集。
b)
对于SQL PL存储过程,默认的参数值和按照名字的委派参数值已经被包含在内。 另外,新的布尔值,游标。行和数组类型已经被支持。
c)
支持ROWNUM 和ROWID
d)
DB2 9.7现在支持一种叫做单元(module)的概念(和Oracle中的”Package(包)“的概念类似)。一个单元可以将相关数据库对象的定义关联在一起。
e)
支持隐式的数据类型间转换。这对于像PHP和Ruby等这种动态语言很有用。例如,下面情形是被允许的:
create table t1 (col1 int)
select * from t1 where col1 = '42'
在例子中, 字符串现在能与数值型的列做比较。
f)
对字符串,时间处理提供更多新的函数,等等。
g)
DB2 现在支持创建全局临时表Create Global Temporary Tables (CGTTS)。这些是临时表,其中的数据只在会话期间存在。CGTTS和Declared Global Temporary Tables (DGTTs) 的不同是,在CGTTS中,表的定义被存储在DB2 catalog表中,因此,一旦CGTTs被创建,它就可以被任何会话使用,而不需要重新去创建一次。每个会话中的行是非依赖的。
g)
添加对全局对象引用的公共别名(public synonym)。在DB29.7之前,所有DB2对象有一个唯一的两部分构成的名字。第一部分是模式名,然后是对象名。通过创建public synonym,你可以在不需要模式名的情况下引用对象,而不需要考虑是否连接到数据库,例如:
connect to sample user arfchong using mypsw
create public synonym raul for table arfchong.staff
select * from raul ## works OK
select * from arfchong.raul ## Error
connect to sample user db2admin using psw
select * from raul ## works OK
h)
DB2 9.7放宽对象依赖的规则从而允许更加灵活的模式衍变。例如,假设你有该依赖:
View2 --> View1 --> Table1
如果你想改变视图View1,你必须首先drop掉视图View2因为其依赖于View1。现在这并不做要求。DB2会立即或者在该视图使用时再自动评估View2的有效性。这可以帮助开发者在测试他们应用程序时,当他们需要添加列,或者对数据库模式做其它更改。
其它的在模式上的改进包括:列名可以重被命名,在多个Create语句中添加REPLACE选项而并不需要使用drop语句,因此所有在对象上的权限将会被保留。ALTER COLUMN可以使用SET DATA TYPE对所有的数据类进行修改。
i)
增强Visual Studio add-ins
j)
增强JDBC和SQLJ支持上面所说的一些功能
k)
支持TRUNCATE SQL语句快速删除
l)
支持带有精度的数据类型,比如NUMBER, VARCHAR2, TIMESTAMP
m)
对python-DB2应用程序的更好支持
n)
pureXML增强,现已支持声明全局临时表( Declared Global Temporary Tables)
4) 存储增强
每当我讲授DB2, 我总会被问 "DB2能存储多少数据?". 几乎在每一个发行版本上, 我惊讶的发现我们在实验室的开发人员一直给我强调它的数据量大小限制。对DB2 9.7, 大的和临时表空间已经被增长了四倍. 比如, 一个32k页的大表空间现在可以存储64TB。以前只能存储16TB。
5) 安全性增强
在以前我通常会把SYSADM比作“上帝”,因为他可以访问DB2中的任何东西 。在DB2 9.7中,增强安全模型允许职责分割。这将少了数据外泄并满足政府的要求。 有了新的权限包括DATAACCESS 和 ACCESSCTRL. 这些权限可以让用户访问数据并使能授权访问数据.这将意味着一个安全管理员 (SECADM) 可以取消 SYSADM 或者一个DBADM的权限 , 他们将不会有权限再去访问任何数据。
6) 易管理性增强
现在你可以在线状态将表移动到另一个表。 这将意味着在用户访问表的同时,你可以改变表的存储地
7) 安装增强
现在你可以使用命令db2val来判断安装是否正确。
许多关于这些增强的描述在在线免费书《Getting Started with DB2 Express-C - 3rd Edition》中都有描述,已经更新到DB2 9.7。可以从下面网址下载到该书:
http://www.ibm.com/developerwork ... ;amp;S_CMP=expcsite
尽情享用新的 DB2 9.7!!!
备注:
本文作者Raul Chong IBM多伦多实验室一位DB2高级数据库工程师,现在担任DB2 Express-C全球推广计划的经理,大家有兴趣可以与他一起交流,学习,提高自己数据库的知识。欢迎大家参与到DB2 Express-C计划中来! |
|