简介
DB2 Express-C 是 DB2 免费的社区版本。您可以将它作为生产系统的一部分使用,将其嵌入和部署到应用程序中,或者只是为了简单的开发目的而使用它,并且所有这些都是免费的!
尽管 DB2 Express – C 只能使用两个核心和 2G 内存,但是您可以在任何大小的服务器上安装它,而且在数据库的大小上是没有任何限制的。与其他厂商提供的社区版本相比,这已经是相当慷慨了。
自 2009 年 6 月 DB2 Express-C Version 9.7 发布到现在,DB2 Express-C 镜像已经更新了两次。最新版 9.7.2 在 2010 年 5 月 28 日发布。本文概述了在 9.7 版和最新的 9.7.2 版中的一些重要新特性和增强功能。9.7 版以及两个更新版中所有新功能的完整介绍,参考 IBM DB2 Database for Linux、UNIX、and Windows 信息中心的 最新概述 主题。
锁定增强
有了新的 Cursor Stability (CS) 隔离级 Currently Committed (CC) 语义,编写器(UPDATE 操作)不再锁定读取器(SELECT 操作)。读取器应在执行 UPDATE 操作之前读取当前的提交值。该增强功能提高了并发性、减少了死锁。
假设有一个名为 T1 的表,其中有以下内容:
表 1. 表 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
|
在 DB2 9.7 之前,AppB 发布的语句将被挂起,因为要等待 AppA(编写器)的 update 语句释放持有的互斥锁。当您启动这个新 CS 行为(在新 DB2 9.7 数据库中是默认行为)时,AppB 发布的语句返回当前提交值,而不需要等待。在这种情况下,返回值应该是Chong ,因为 AppA 发布的更新尚未提交。
回页首
性能增强
DB2 9.7 引入了语句集中器特性,提高了使用动态 SQL、以及 Ruby 和 PHP 语言开发的程序的性能。语句集中器寻找除参数值之外都相同的 SQL 语句。顾名思义,它将多条语句合并为一条。例如,语句集中器将以下语句:
SELECT name FROM employee WHERE empid = 10SELECT name FROM employee WHERE empid = 20SELECT name FROM employee WHERE empid = 30
|
合并为:
SELECT name FROM employee WHERE empid = ?
|
问号(? )代表一个参数标记。在这个例子中,运行时 DB2 提供参数值 10 、 20 和 30 。
此功能使 DB2 较之前的版本性能有显著的提升。由于没有语句集中器,DB2 之前的版本需要单独处理上述例子中的每条语句,分别单独编译和执行。然而,每条语句的存取计划基本相同,重复的计算是一种资源浪费,现在有了语句集中器特性,DB2 9.7 只编译一次获取语句的存取计划,然后重用即可。
另一个性能增强与大型对象(LOB)的存储有关。您现在能够以数据行的形式在行内存储小于指定大小的 LOB。这提高了这些 LOB 的性能,因为您可以通过缓冲池对其进行访问。
回页首
应用程序开发增强
DB2 9.7 包括大量针对应用程序开发人员的改进:
- 触发器和用户自定义函数(UDF)增加了 SQL PL 支持。DB2 9.7 之前,仅支持内联 SQL PL,这只是 SQL PL 的一个很小的子集.
- 对于 SQL PL 存储规范和 UDF,您可以指定默认参数值,也可以根据名称分配参数值。此外,现在也支持新布尔、指针、行和数组数据类型。
- 现在也支持备用的 SQL 语法,例如可以使用
ROWNUM 和 ROWID 。
- DB2 9.7 现在支持模块概念(这与 Oracle 中的 “包” 概念有点类似)。您可以使用一个模块来绑定相关数据库对象定义。
- DB2 9.7 现在也支持数据类型的强制转换。这对于 PHP 和 Ruby 这类动态语言很有帮助。例如,现在允许以下操作:
create table t1 (col1 int)select * from t1 where col1 = '42'
|
-
在这个例子中,现在您可以将字符串值 42 与 col1 的整数进行比较。
- 有许多新功能用于处理日期、字符串和其他类型的数据。
- DB2 现在也支持 Create Global Temporary Tables (CGTTs),这是一个临时数据表,仅在会话中可用。对于 CGTT 来说,CGTT 与 Declared global Temporary Tables (DGTTs) 之间的不同在于,DB2 目录表中保留表定义。因此,一旦创建了一个 CGTT,它将可用于任何会话,没有必要再次创建。但是,行是与会话无关的。
- 您现在可以使用 public 别名(也称为 public synonyms)来引用全局对象。在 DB2 9.7 之前的版本中,所有 DB2 对象有一个惟一的名称,由两部分组成,第一部分是架构名,第二部分是对象名。通过创建一个公共同义词,您可以引用一个没有架构名的对象,不管连接到数据库的用户 ID 是什么。例如:
connect to sample user arfchong using mypswcreate public synonym raul for table arfchong.staffselect * from raul ## works OKselect * from arfchong.raul ## Errorconnect to sample user db2admin using pswselect * from raul ## works OK
|
-
- DB2 9.7 放宽了对象依赖规则,允许有更灵活的架构演化。例如,假设有以下依赖性:
View2 --> View1 --> Table1
以前,如果您想要改变 View1,就必须删除 View2,因为 View2 依赖于 View1。但是在 DB2 9.7 中,没必要删除 View 2。现在,DB2 立即自动执行 View2 重新验证,或者在视图下次使用时执行,这在您测试应用程序或需要改变数据库架构(例如,增加列)时很有用。
架构演化中的一些其他改进:
- 可以重命名列。
- 在多个
CREATE 语句中添加 REPLACE 选项,因而无需发布一个 drop 语句。因此,对象上的所有的权限仍然保留。
-
ALTER COLUMN 现在可以对所有类型的对象使用 SET DATA TYPE 。
- Visual Studio 插件,以及 IBM Data Server Provider for .NET 也得到增强。目前提供商支持主变量、模块、
ARRAY 数据类型、复合语句和可变长度时间戳。
随着 9.7.2 的更新,IBM Data Server Provider for .NET 的 32 位版本包含在 64 位驱动程序包中。在安装 64 位驱动程序时,32 位驱动程序也安装在名为 sqllib\bin\netf20_32 的单独目录下。
这也有一个新的 db2dsdriver.cfg 文件关键字 QueryTimeout ,它定义客户端在超时之前应该等待查询多长时间。
其他的增强包括 CALL 语句以任意次序携带指定参数的能力。
- 为了支持前面提到的那些增强功能,也对 JDBC 和 SQLJ 进行了增强。
- 现在支持使用
TRUNCATE SQL 语句进行快速删除。
- 现在也支持有极小的秒精度设置的新数据类型,如
NUMBER 、VARCHAR2 和 TIMESTAMP 。
- 也有一些支持 Python-DB2 应用程序的改进。
- pureXML 增强包括对 Declared Global Temporary Tables 的支持.
- 现在也支持使用
LIMIT 和 OFFSET 子句的新 SQL 语法。如果想要限制一条 SQL 语句返回的记录数,可使用 LIMIT 子句。例如,USERS 表有 100 条记录,但是您只想返回其中 5 条。可以使用以下语句:
SELECT * FROM users LIMIT 5
|
SELECT * FROM users LIMIT 5 OFFSET 10
|
$ db2set DB2_COMPATIBILITY_VECTOR=MYS$ db2stop$ db2start
|
回页首
存储增强
“ DB2 能存储多少?” 是目前和今后的 DB2 用户经常问的一个问题。每一个新版本中,IBM DB2 开发团队都一如既往地突破极限。对于 DB2 9.7,大型表空间和临时表空间的大小限制增加了 4 倍。例如一个页面大小为 32 KB 的大型表空间现在可以存储 64 TB,而在此之前只能存储 16 TB。
回页首
安全增强
在 DB2 的早期版本中,系统管理员几乎有权访问所有内容。在 DB2 9.7 中,安全模式已经增强,允许职责分离。使得数据暴露的危险最小化,同时也帮助组织者满足政府的遵从性需求。有几个新的管理权限级别,其中两个 DATAACCESS 和 ACCESSCTRL ,分别用来给予用户访问数据的权限或授权访问数据。这意味着,安全管理员可以撤消系统管理员和数据库管理员的权限,从根本上使用户无权限访问任何数据。
DB2 9.7.2 更新版也包括审计改进,允许重放以前的数据库活动。例如,您想要分析几年前的某个请求是如何影响一些表的,可以使用数据库审计信息获取所需要的分析报告。
回页首
可管理性增强
DB2 现在为您提供联机移动表到不同的表空间的功能。这意味着,甚至在用户访问表的同时,也可以改变表的存储位置。这个例子也说明了 DB2 如何力图提供数据 24x7 可用性。当一个 DBA 检测到其中一个表空间的存储即将填满时,他或她可以使用 DB2 9.7 提供的 ADMIN_MOVE_TABLE 存储程序将该表移动到另一个有可用空间的表空间。用户不受一点影响; 他们照样可以SELECT 、INSERT 、UPDATE 和 DELETE 。为了能实现这项功能,DB2 创建了一个表的映射拷贝并跟踪对原始表进行的改变。这些改变随后将应用到映射副本。
可管理性方面的另一个改进是关于传输数据库架构的。可以将 DB2 中的一个 SQL 架构看作是不同类型的数据库(比如表、视图、索引等)的分类方式。假设表 RFCHONG.T1 和视图 RFCHONG.V1 使用同一个名为 RFCHONG 的架构。有时候您可能想要将同一架构的所有对象传输到另一个数据库。一种方法是使用 db2move 实用程序,这只适用于表。在 9.7.2 更新版中,可以使用带有TRANSPORT 选项的 RESTORE 命令,从数据库备份镜像中将表空间和 SQL 架构整体复制到另一个活动数据库中。
回页首
安装增强
现在,您可以使用 DB2 副本的验证工具命令 db2val 来快速验证 DB2 Express-C 的安装是否正确。
回页首
DB2 Spatial Extender
尽管 DB2 的空间功能出现将近十年了,但是很多用户并不知道。尽管这项功能并不是 9.7.2 版更新镜像中独有的,但值得一提的是,Spatial Extender 在所有 DB2 版本(包括DB2 Express-C)中都是免费的。Spatial Extender 允许您使用 SQL 语句处理空间数据和大地测量数据。例如,该功能可帮助您回答这类问题:“对于住在多伦多的用户来说,最近的零售商店是哪一家?以及去年销售额超过 $3000 的是哪一家?” DB2 Spatial Extender 也可用于医疗行业。例如,它可以回答 “在 MRI 脑部扫描中恶性肿瘤细胞是什么形状?” 这类问题。欲了解更多信息,请参考 IBM DB2 Database for Linux、UNIX、and Windows 信息中心的 About DB2 Spatial Extender相关主题。
回页首
结束语
本文着重介绍了从 DB2 Express-C 9.7 版本到目前的 9.7.2 最新版中一些显著的增强功能。IBM 的 DB2 免费社区最新版包括与性能、应用程序开发、存储、安全等相关的功能,这些功能以前仅在 DB2 收费版中可用。
尽情享受最新版 DB2 Spatial Extende 吧!
|
请发表评论