oracle与DB2

1、体系结构,DB2的实例和数据库分开的做法,我个人还是比较喜欢的,因为实例可以创建多个,数据库的恢复直接恢复到实例下就可以了,相对ORACLE简单多了。 2、管理工具,DB2的管理工具做得太简陋了,控制中心只能说能用而已,而且还有好多BUG,不如ORACLE的企业管理器做得好,连WEB版都没有。 3、备份管理,DB2的备份只能说是简陋了,没有备份集的管理功能,没有恢复预览和校验功能,不能写到网络驱动器上,唉太多的没有了,ORACLE的RMAN确实强大; 4、DB2的命令执行方式,我很喜欢,可以在命令行上执行SQL,也可以在命令窗口上执行SQL,相对SQLPLUS灵活多了; 5、DB2的自动维护功能做的很好,可以定期自动整理数据库碎片和重建索引,唯一不大理想的是自动维护的备份功能不能指定压缩备份,相对而言ORACLE的自动维护功能就很一般了; 6、DB2的运行状况的功能我也很喜欢,ORACLE也有类似的AHM,但是 DB2的运行状况更为直接,可以一下就看出数据库目前有啥问题,DB2还给出了如何处理的建议顾问程序; 7、DB2的内存状况监控功能本来我也很喜欢,可以直接在内存状况监控上直接改相应的参数,但是发现一个巨大BUG后,我就很不喜欢了,如果你一直点刷新,发现内存占用量会不断上升,我有次为了监控一个内存参数,让这个工具运行了一天一夜,结果回来一看,晕倒,所有的内存参数增长到数百G,我想看的历史变化情况居然没有。 8、DB2的远程网络连接采用的编目方式描述连接串的方式我感觉很不爽,为了改个客户端的连接服务器的IP地址,所有的客户端都需要将编目删除,然后重新编目连接地址,晕倒100多台PC机搞下来,尽管可以使用脚本,但是还是把人都快搞疯了。ORACLE采用的用文件来配置远程服务器的方式,所有的PC机都通过更新服务器直接更新本机的TNSNAME,1分钟搞定。 9、DB2的数据库创建如果要手工管理容器,居然没有指定缺省的系统表空间数据文件名,你要创建一堆相应的文件名,没办法,只好照抄oracle的OFA体系结构的文件名。 10、DB2的连接配置图形工具实在是差了,在上面配置一步步配出的连接居然不能用!只好使用脚本,这点ORACLE比DB2强多了。 11、DB2在WINDOWS 平台的可靠性不怎么样,3个多星期无缘无故DOWN了4次机,ORACLE配好了应该没有这么悲惨吧。 12、DB2的锁自动管理机制,我比较喜欢,打开后,互锁的概率大大降低,相同的程序,在DB2下锁明显少许多,但是不爽的是DB2的select命令也是加锁的。 13、DB2 9.7的ORACLE兼容模式,我也很喜欢,迁移麻烦少了许多许多。 14、DEB2 的自动内存管理我看要比ORACLE 要强一些,几乎所有的内存参数都能自动管理,ORACLE11G貌似也可以全部自动管理了。 15、DB2的导出数据的工具实在太简陋了,连oracle的EXP/IMP 都不如,更不要说expdp/impdp 16、DB2的SQL语句运行速度明显快于ORACLE,5-6段相同的代码,同一台机器,参数都是缺省参数,个人测试DB2执行速度大约要快10%-15%,也许和DB2缺省的参数调优有关,ORACLE10g调优后,还是还有5-10%左右的差异。

1 作者:

Jacqueline Bloemen

Jacqueline(电子邮件:jacqueline.bloemen@pass-consulting.com)1980年开始进入IT业, 1986年成为顾问。从1988年开始,她致力于关系和数据管理技术,并主要关注异构DBMS和平台上的数据仓库和决策支持系统。当前研究的主题包括分析CRM和知识管理(Knowledge Management)。她是IBM数据管理金牌顾问团队的成员。

Guido Brunner

Guido(电子邮件:Guido.Brunner@partner-pass-consulting.com)从1982年开始从事IT行业 – 已经在PASS工作了9年。他的主要领域是为主要分布在银行领域中的不同的客户进行数据仓库和数据管理的咨询。他在主流DBMS方面有着丰富的经验,例如Sybase,Informix,Microsoft SQL Server,DB2(OS390和NT)和Oracle – 在最近的12个月中他主要研究DB2 UDB 7.1和Oracle 8.1.6。

William Miller

在过去12年中,William一直是许多大型的德国和国际公司的DB2顾问。他熟悉DB2的方方面面 - 从概念数据库设计到底层的性能监控和调整。他是IBM DB2 金牌顾问的成员,经常在全球的DB2 会议上讲演。

Bjarne Nelson

Bjame的专业领域是DB2,尤其是性能和分布式方面。他已经为DB2全时工作了15年,主要在北欧和中欧工作,偶尔在澳大利亚、加拿大、拉丁美洲以及
远东。在1996年和1997年,他是欧洲IDUG的会议主席,并作为IBM金牌顾问项目数据管理的独立顾问。Bjarne定期编写有关DB2的文章和报
告,主要通过伦敦的Xephon出版。从1992年开始,Bjarne已经在众多会议上针对DB2的性能和分布式问题进行了演示,例如
IDUG,PRDUC,CMG和Xephon Briefings。他的经验涉及到整个DB2系列,但主要是利用DB2 UDB EEE实现大型数据仓库,而且他仍然致力于DB2 for OS/390,参与了众多数据共享的实现。

Steffen Oliver Schulz

Steffen拥有商业管理硕士学位(专业是计算机科学)。从1987年进入IT行业以来,曾为多家公司工作,包括Microsoft(领导PM数据库 DACH)。从1995年开始他作为一个独立的顾问,致力于银行、工业行业和卫生环境的数据库和数据挖掘项目。他曾经作为从Informix到Sybase/MS SQL Server到Oracle数据库的开发者和管理员,了解众多的DBMS。他从Oracle 版本7开始使用Oracle – 现在正在管理8.1.7 Parallel Server。

Bernd Strohle

Bernd拥有数学的硕士学位,到现在为止,已在IT业工作了近25年。他从1997年开始作为独立顾问,为IBM工作,当时是APPC开发小组的一员。从日常工作中,他了解了主要DBMS系统的工作 – 从主机上的IMS DB到不同平台上的DB2和Oracle。他从Oracle 6.0版开始使用Oracle,致力于复杂环境下,主要是银行和保险公司的Oracle数据仓库项目。

2 概要说明

分析人士传达了一个明确信息:只有3个DBMS会从近几年的市场竞争中胜出:Oracle,IBM的DB2 和Microsoft的SQL Server。因为MS SQL Server限制在Windows平台上,因此,竞争者将剩下Oracle和IBM,目前激烈的市场竞争也很好地证明了这一点。

在2001年6月,Oracle和IBM都发布了最新的DBMS版本:Oracle9i和DB2 通用数据库 V7.2 for Unix, Windows, Linux and OS/2。

本文从技术角度讲述了这些新版本中采用的数据库技术,为数据库专业人员提供它们的特性、功能和实现体系的概述。在简要讲述版本概要之后,本文将从以下10
个方面来描述和比较这两种产品:性能,可扩展性,易管理性,可用性,意外故障,备份和恢复,连接性,安全性,符合标准性,集成。接下来,我们将从更为详细
的技术角度来总结。但是,在我们总结优势和弱点时,重要的是要理解这些差别仅仅是由于技术成熟度不同而造成,并在以后可能会弥补的,还是根本上由于不同的
体系或概念造成的。Oracle9i和DB2 UDB的不同主要体现在并行体系、查询优化功能和异构数据集成战略方面。这些方面将在下面进行讲述。

从可扩展性、可用性和意外故障的角度来看,Oracle9i和DB2 UDB的不同主要体现在它们的并行体系方面。Oracle支持“共享磁盘”的方法,类似于DB2 UDB for OS/390,而DB2 UDB for UWO(以及提供的其它DBMS实现)采用的是“非共享”的解决方案。它们不同的体系是导致在扩展性和可用性/意外故障领域出现最相关差异的决定性因素。因为“非共享”在可扩展性方面具有明显的优势,而“共享磁盘”似乎在可用性方面有领先优势。

从性能的角度来看,DB2仍然具有领先优势。DB2的优化器和静态SQL的概念都要比Oracle的实现具有明显的优势。DB2优化器保持对应用程序完全透明,因此无需优化“提示”,甚至不允许使用“提示”,优化器将在需要时重写接收到的查询。DB2 还提供多个向导和其它的工具来简化性能的调整。但是,尽管新的DB2 V7.2基准测试结果已经公布,但到目前为止,我们还没有发现任何可以相比较的9i的基准结果。

日益提高的DBMS的复杂性导致人们对极端高效的易管理解决方案(其前景是DBMS自治管理)的需求不断提高。在DB2以前的版本中已经解决了这个问题,并进一步在版本7内的后续版本中继续增强。Oracle在这一点上有点落后,但是在9i产品中增强了它的产品。

备份和恢复是两种DBMS都已经成熟并具有丰富的功能的领域。

IBM将DB2 定位于作为任何数据源的联合网关,不管这些数据是存储在DB2内部还是外部。连接性是DB2 UDB V7.2很有说服力的特色之一,并将进一步得到加强。尽管Oracle具有一个类似的概念,但其实现的深度无法相比。尤其是DB2优化器集成了对异构数据源的支持,在这一点上二者的差异表现得非常明显。

DB2的安全概念采用的是握手的方法,利用相应的操作系统和它的用户/组的实现。Oracle的解决方案没有集成这一特性。但是,Oracle9i引入了一个很有前途的新概念,用于实现记录行等级的安全性,作为对视图安全性的替代方案。

在标准化和集成方面,DB2具有相当大的优势。尽管Oracle支持最新的SQL标准,但Oracle还是优选自己的专用实现。对于其它功能的集成(即:BI,电子商务,消息,应用),Oracle采用了一个集成但封闭的方法,在自己的“工厂”提供每个部件。IBM 采用的是相反的策略。IBM将自己定位在中间件提供商的位置,鼓励与其它软件提供商建立战略联盟。这种方式使得DB2最近成为许多标准软件提供商的首选开发平台。

总之,我们得到了如下各个方面的胜利者分别是谁:

性能:DB2 UDB V7.2

可扩展性:DB2 UDB V7.2

易管理性:DB2 UDB V7.2

可用性:Oracle9i

意外故障:Oracle9i

备份和恢复:平手

连接性/互操作性:DB2 UDB V7.2

安全性:DB2 UDB V7.2

符合标准性:DB2 UDB V7.2

集成:DB2 UDB V7.2

3 范围

Oracle和IBM在2001年6月都发布了最新的DBMS版本:Oracle9i和DB2 通用数据库 V7.2 for Unix, Windows, Linux and OS/2。

本文从技术的角度讲述了数据库技术,目的是为数据库管理员提供一份对DBMS效率的评估。因此,本报告中的主题集中在扩展性、可用性、(自治)管理、性能/VLDB领域。其它的主题,例如应用问题,商业智能,数据挖掘,电子商务等,将只提供概述。

本文的作者们对Oracle8i和DB2 UDB V7.1都有实际使用经验,但是,Oracle9i和DB2 UDB V7.2的增强只是理论上了解。本比较不是基于实际的基准和测试,只是从理论上对特性和功能进行比较。

这里所使用的信息的来源包括手册,提供商网页,直接与提供商联系以及其它在Internet上的与DBMS相关的信息。

本报告主要针对UNIX、NT和OS/2平台。

为了能在接近两种新的DBMS版本可获得日期的时间提供本文档,我们尽力在极短的时间内掌握信息。我们的目标是提供精确的信息,以便使读者高效阅读本文档。

尽管有一章专门针对集成,但是有一点很重要,那就是集成的一个很重要的方面,电子商务集成,没有详细地进行讨论。要想评测电子商务集成性能,需要详细地处
理应用服务器以及消息体系和产品,以及相关的标准(例如EJB)。尽管我们相信这非常重要,但它不包含在本文档的范围之内。

4 新特性概述

4.1 IBM DB2 通用数据库7版

前言:DB2 产品系列

DB2 产品系列含盖了从手持设备到主机等众多的异构平台。

DB2 通用数据库 for Unix, Windows, Linux and OS/2 (DB2 UDB for UWO)分为4个版本:

DB2 通用数据库个人版,用于单用户模式(DB2 UDB PE)

DB2 通用数据库工作组版,用于工作组或部门的应用和数据共享(DB2 UDB WE)

DB2 通用数据库企业版,用于从单处理器到最大型的SMP需要的复杂配置和大型数据库(DB2 UDB EE)

DB2 通用数据库企业版 – 扩展版,在大型并行处理器(MPP)或群集环境中的大型数据库(DB2 UDB EEE)

DB2 通用数据库 for AS/400(DB2 UDB for AS/400)

DB2 通用数据库 for OS/390(DB2 UDB for OS/390)

DB2 for VSE & VM

DB2 Everyplace 用于手持设备运行环境。

正如前面所述,本文主要针对的是DB2 UDB for UWO。

UNIX、Windows和OS/2环境下的IBM DB2 通用数据库7.2版

IBM的发行战略是每18个月推出主要的版本(即,Vx变为Vx.1)。同时,每3到4个月,发布一个FixPak,修改已经发现的错误,并向引擎中添加新的功能。如果功能的变化很大,IBM将发布一个发行版(即Vx.2),将小数点后面的数字加一。

DB2 UDB 7.1在2000年6月发布。DB2 UDB 7.2在2001年6月发布,仅从数据库引擎来说,它与7版FixPak 3相同 – 但是引擎之外的所有增强(例如新的连接器,对仓库管理器的改进)只在V7.2中提供。

DB2 版本7(7.1 和7.2)关注集成:

集成商业智能功能

数据仓库中心(Data Warehouse Center)将以前的“Visual Warehouse”集成到DB2 控制中心(Control Center)中,提供了一个单一的用户界面。它提供了内置的功能来创建、生成、存储和维护数据仓库和OLAP立方体(cube)。

OLAP Starter Kit提供了集成在核心数据库引擎中的OLAP服务器功能。

新的预先定义的仓库管理器(Warehouse Manager)连接器扩展了对SAP R/3,i2 TradeMatrix BPI等应用的访问。其它新的数据源将点击流(clickstream)数据、OLE DB对象和MQSeries队列引入到仓库中。

7.2 DB2 现在支持OMG的通用仓库模型(Common Warehouse Model,CWM)

集成XML文档

将XML文档作为新的列数据类型来存储

将XML文档分解、存储到不同的表中的

支持基于XML/SOAP/UDDI的Web服务

DB2 数据或存储过程以Web服务的形式对外提供

通过SQL访问来自Web服务的数据

与IBM MQSeries集成

内置了通过SQL来访问或写入MQSeries队列的功能

MQSeries作为仓库管理器的数据源

通过MQSeries队列的XML文档

与DB2打包在一起的MQSeries

集成IBM DataJoiner与通用数据库

访问所有存放于DB2系列DBMS的数据

访问来自其它支持OLE DB标准的数据库提供商的数据

访问位于Oracle、Sybase、Informix和MS SQL Server中的数据

在存储过程中访问异构数据源

DB2 生命科学数据连接(Life Sciences Data Connect)

透明访问生物技术数据源

DB2 文本信息扩展器(Text Information Extender)

增强的文本文档搜索功能

与Windows 2000 Active Directory和Kerberos集成

但是,引擎中并不仅仅添加了集成功能。其它方面还有:

存储过程

支持嵌套(nested)存储过程

遵循 ANSI SQL99标准,用户现在可以创建存储过程,函数和触发器,作为“永久存储模块” – 在DB2中称为“SQL存储过程”

支持以Visual Basic编写的存储过程

在所有使用相同的操作系统的服务器上运行已经编译的存储过程

各种数据管理增强

增强了对Identity列的支持,包括LOAD工具

将日志的限制提高到32GB

支持外部保存点(savepoint)

重新命名表空间

在AIX,HP-UX和Solaris上支持64位 – 在Windows 2000上使用AWE

增强了Unicode

加密和解密字符串数据

备份/恢复功能增强:双份日志/并行恢复/从分离(split)的映象备份/分离映象处理/命名管道支持/渐进式和增量备份/交叉平台备份和恢复

按需日志存档

在日志目录满之后,*事务处理

语句级隔离等级

DB2 Everyplace 这一产品,IBM将其定位为手持设备的DBMS,例如PDA(个人数字助理)和HPC(手持个人计算机)

UserID支持超过8个字符

动态组合SQL语句

触发器和SQL函数中的变量和控制流程

可更新的分区键

下一版本的DB2 UDB将包括众多的改善和增强,这些增强主要是在高可用性(减少计划内和意外故障的次数)、易管理性(减少管理工作)、性能和可扩展性(包括大型SMP和群集环境)等领域,并为应用软件开发者提供更好的支持。

Informix和IBM最近签署了一份协议,IBM收购了Informix 数据库业务。IBM计划将Informix的关键技术集成到DB2的未来版本中。

4.2
Oracle9i 
Oracle的产品战略是每12到18个月发布一个主要版本。主要发行版本所遵循的命名战略在PC领域中更为常见,它不再采用通常的版本编号方法,而是采用市“姹竞牛ò姹8.1变成8i,以反映Oracle在Internet上的重点)。下一个主要版本是Oracle 9i,这在以前称为Oracle 8.2 。

Oracle 9i不是数据库服务器的版本名称,而是围绕核心服务器的一整套产品套件的家族名称。这些产品包括:

Oracle9i 应用服务器 
Oracle9i DBMS 
Oracle9i 开发者套件 
Oracle9i 的官方发布是在2001年6月在欧洲的Oracle Open World上公布的,此后立即开始供货。因为本报告仅仅是比较DBMS产品,因此只考虑了Oracle9i DBMS。

Oracle9i的核心方法是强调Oracle对Internet和电子商务的专注。它将增强Oracle在关键事务计算领域中的地位。为了确认这一方法,Oracle9i在如下领域提供了新的或增强的功能:

可用性增强 
备份(stand-by)数据库支持,例如初始化实例,故障恢复,主从相互切换,日志应用延迟。

增强了完全的在线重组织和重定义体系,使得更多的管理动作可以在线完成,例如更改表或列的属性,将表移动到一个新的位置,或是分区一个表,动态增减内存的分布(SGA)

面向数据块的表恢复可以在恢复损坏的块的同时可以保持表的其它块在线

LogMiner允许损坏点之后的重作(redo)项被获取和应用

查询历史和SQL等级上的撤销功能使用了多版本读取一致性

扩展性和性能改进 
提高Oracle9i Real Application Clusters的交易吞吐量

减少了每个用户占用的空间,允许更多的用户使用

精心优化的消费者组等级上的自动资源管理

多项性能增强,例如预取,自调节直接I/O,虚拟接口(Virtual Interface, VI)支持,等

安全性增强 
强壮的三层安全性,包括X.509认证,并与LDAP集成

基于标准的公开密钥体系(PKI) 
精心细化的审计功能 
n 增强的用户和安全策略管理

n 数据加密和标签加密(Label Security)

? 开发平台 
n 企业Java引擎(以前是JServer)

n XML类型和XDK 
n SQL增强,例如支持CASE,兼容ANSI的联接,滚动游标

n PL/SQL支持所有的SQL语法

? 管理性 
n DBMS管理撤销(undo)表空间中的回滚段

n 动态内存管理 
n Oracle管理的文件 
n 可恢复运行的语句 
n 一个数据库中存在多种大小的块

n 恢复管理器支持自动管理备份

n 企业管理器(Enterprise Manager)中综合了基于Web的管理工具

? 集成Windows 2000(Active Directory,PKI,OLE DB提供者)

? 商业智能 
n 完整的商业智能平台:集成ETL,OLAP分析和个性化功能

n OLAP Server,Oracle新的OLAP计算引擎

n 支持外部表 
n 核心引擎中的ETL功能

n 核心引擎中的数据挖掘功能(基于Darwin)

? 电子商务增强 
n 支持通过XML和Advanced Queuing在Internet上传输消息

n 与其它专用消息系统的网关,例如MQSeries,Tibco和MSMQ

n 改进的分布式环境 
? 全球化 
n 对UTF-8和UTF-16的Unicode支持

n 新的支持时区的日期时间格式

n Locale Builder可以查看、更改和定义各种与地区相关的数据

? Internet 内容管理

n 存储、管理和搜索各种类型的内容 – 文件,多媒体,电子邮件 …

n 适于Internet应用的内容联合(Content Syndication)

n 适于协作型项目的内容组织

n 支持各个位置、面向移动的内容

5 比较 
比较DBMS一般不是一项简单的任务,这是因为:

? 数据库的功能和复杂度非常广泛,因此深入的比较极端耗时

? 一些特性的价值只能通过实际的经验和基准测试才能判断(即,性能的影响)

? 因为潜在上不同的实现深度以及体系方法与产品哲学的普遍不同,导致从特性上进行比较很困难

? 详尽的特性往往很难直接比较

我们确定了会影响到管理员的日常工作的10个主要领域。对于每个领域,都简要并分别给出两种产品的体系方法和实现特性。

接下来,对两种产品进行直接比较,明确两者的不同点、共同点、优势和劣势。但是,我们不做任何评分。这里描述的一些特性都是新的,需要进行基准测定,并可能需要进一步成熟。我们认为没有一个评分模型能够合理地含盖了这些方面。

这10个领域分别以单独的章节描述,它们的顺序是以从技术DBA的角度来看的重要性进行排列的。重要的是要意识到根据商业实例和角度的不同,这种排列也可
能不同。但是正如在第三章(作者)中提到的,本文主要是从DBA技术的角度上进行评价。这也解释了本文中将“集成”(第5.10章)作为最不重要的角度的
原因,尽管在众多其它场合,这个角度可能是最重要的。

5.1 性能 
引用IBM Almaden 研究中心的Burce Lindsay的话来说,对于一个有效的数据库系统来说,有三个因素非常关键。它们是性能,性能,和性能。尽管我们认为可靠性、可扩展性、易管理性、使用性和功能一起构成了第二个关键因素,但无疑性能是数据库处理中最为重要的。

性能是对处理数据库请求的效率的衡量。应用软件需要高的数据库性能来确保他们的用户的满意度。数据仓库用户需要高的效率,在可接受的时间内获取他们的复杂
的查询的结果。为了在完成数据库维护时能不影响应用或用户,数据库管理员需要高的性能。在本节中,我们不讨论性能的这最后一个方面,它更适合于可用性,我
们主要集中于讨论性能,因为它与完成数据请求相关。

DB2 UDB V7.2

DB2性能的核心组成部分是SQL编译器。在接收到SQL并确认它的有效性之后,SQL编译器使用众多先进的技术将接收到的查询转换为可以进行更好优化的等价格式 – 即查询重写工具。在操作合并(Operation Merging)(视图合并,共享聚集以及其它)中,DB2通过合并,减少了对数据进行的操作的数量。操作转移(Operatino Movement)的查询重写功能通过重新定位或消除(消除DISTINCT操作符,通用谓词pushdown,消除相关)操作,来最小化操作的数量。查询重写的最后一个主要的类别是谓词转换(Predicate Translation)。在这些技术中,添加了隐含的谓词,以便更好地考虑联接的策略,并将OR谓词转换为IN。

优化器接收到重写的查询,并使用保存在编目(catalog)中的信息(例如数据分布,约束,索引)和系统资源(例如CPU速度和可用的内存)来计算最优的访问路径。为了评估是否可以使用并行机制,优化器构建分段部分(subsection pieces,SSP)。
SSP是一组可以并行执行的操作。SSP的成本(cost)也被用于确定访问路径。DB2的优化器总是以成本为基础的;根据所有可以被用来满足查询的资源
来分析候选访问路径,最后选择最为有效的路径。DB2具有众多的扫描方法、索引访问策略、谓词评价选择、联接技术和并行技术。

从最开始,DB2就支持静态SQL。在准备程序时,SQL编译器计算访问路径,并将路径保存下来。对于以后的SQL,将利用预先计算的访问路径执行。通过这种方法消除了动态SQL的开销。也可以通过包缓存(Package cache)特性来消除动态SQL的开销。当重复执行SQL时,访问路径从内存中读出,并执行。CLI,ODBC和JDBC编程模型从本质上说就是动态的。利用DB2,你可以使用Static Profiling将动态的SQL转换为静态的SQL。DB2具有一个特殊的工具,使您可以在应用软件运行时捕捉SQL语句。然后这些语句传送到SQL编译器中。DB2将识别动态的CLI/ODBC/JDBC SQL调用,并找到存储的访问路径。DB2使您可以利用您最喜欢的编程工具轻松编程,同时还您还将拥有静态SQL的性能。

性能的一个很重要的影响因素是并行机制。DB2 可以并行执行所有的SQL。查询内并行机制(Intra-query parallelism)
能将单个的查询或数据库操作分解为多个部分,这些部分可以在一个数据库分区内并行执行。分段部分可以自己复制自己,也就是说它们可以执行相同的操作,但却
针对不同部分的数据。SSP是SMP并行机制的基础。在EEE环境中,每个分区都具有一部分数据。SSP可以在每个分区上使用,从而可以在MPP并行机制
中使用SMP并行机制。

使用复杂SQL语句的数据仓库应用可以利用被称为自动摘要表(automatic summary table)的高级特性。您可以定义一个摘要表,它包含一个大型事实表(fact table)中的多个角度的摘要信息。它可以包括联接、累计和高级分组。优化器就可以识别SQL请求的事实表中的摘要信息,使用摘要表中预先计算的结果。CUBE或ROLLUP的的高级分组功能使得DB2 可以使用1个表,而不是利用多个表来获取多维的摘要信息。摘要表可以与基础数据保持同步,这种同步可以利用REFRESH IMMEDIATE(使得DB2 总是保持摘要表与基”淼耐剑部梢岳肈EFERRED:DB2将根据一个命令优化生成所有的摘要信息。因此一个大型的事实表的12个摘要表的刷新只需要扫描一遍数据。

DB2 拥有全局优化功能。在多个数据库联合查询中(其中涉及了多个数据库系统,例如Oracle),DB2可以根据数据的位置以及涉及的数据库系统优化查询。DB2 将
分解查询,并将要完成的工作发送到成本最小的地点,其中要考虑的因素包括CPU的相对速度,通讯成本以及其它系统的功能。DB2可以补充数据源不支持的功
能。DB2的全局优化很彻底,使对其它数据库系统的查询将得到更好的优化,以至于通过DB2运行查询时甚至比在其它数据库系统的本地执行查询性能还要
好。

Oracle9i 
Oracle9i除了具有基于成本的优化器的标准特性之外,它还精心优化了查询优化器,可以动态收集访问时间以便在实际系统条件下定制成本的计算。此外,
增强的优化器还将更多的因素考虑在内,例如CPU成本和网络传输的成本,以尽量提供最快的响应速度。在支持所有现代的方法来增强性能(例如视图合并、谓词
推动,子查询解除嵌套,利用实例化视图重写查询)之外,它还能够更多地利用现有的索引。9i引入了新的开发现有索引的途径,例如使用索引跳跃扫描可以略过
没有在where条件中但在索引中的列。在这项技术中,以前没有使用的索引现在可以集成到访问路径中。新的索引类型,例如允许跨表索引的位图联合索引(或
实例化联合)(位图是根据外键引用的其它表的值创建的),现在可以高性能的执行商业规则。Oracle对动态和永久位图索引的支持使用这种类型的索引。在
调整不好的SQL性能时,管理员将特别喜欢历史访问路径的可用性,这些访问路径显示了上一个语句执行时的准确路径,并在SQLTRACE中提供所有的信
息。

除了范围和散列分区外(两者联合在一起称作组合分区),Oracle引入了一种新的分区类型,称作列表分区,它允许在一定的范围内(例如A-K)分区数据,或是在不一致的范围内分区(例如TX,NM,AZ,CA)。

在将数据插入到表中时,多表插入(根据定义的标准,一个select语句中的所有的记录将插入到多个表中)由于仅收集数据一次,从而节省了开发人员构建的时间,省去了不必要的开发,并提供整体的性能。

尽管实例化视图(materialized views)可以节省查询的时间,但有时刷新很耗时。在9i中,引入了增量刷新功能,减轻了这种权
衡的考虑。为实例化视图添加索引可以进一步加速查询的性能。优化器的查询重写功能使用在实例化视图中存储的结果,加速获”磺肭蟮氖荩苊饬酥馗唇懈吆姆训牧
踊蚓酆稀_sina_nbsp_word__

不仅数据收集本身与查询的性能相关,数据仓库领域(CUBE,ROLLUP,RANK和其它)中的分析函数也能帮助降低得到最终结果的时间,它将以前在客户端完成的工作发送到最适于完成这一任务的服务器。

可以将处理密集型的PL/SQL包编译为高性能的本地代码,这也是向着获得高速响应所迈出的一步。

以前,要区分已有记录(需要更新)和新记录(插入时不会出现主键冲突)区别开来,需要进行2步操作,新的MERGE操作符将可以在1步中完成这一功能。

为了稳定执行所选择的计划,Oracle可以存储访问路径,并复用存储的概要来保证稳定的性能。

结论 
性能是数据库的一个属性,两家提供商都严肃地对待这一特性。性能的范围很宽。因为数据库的用途以及对性能的需求相差很大,应避免空洞的结论。在这种情况下,我们在一些场景(scenario)中比较性能的组成部分。

索引对于性能来说至关重要。Oracle拥有多个索引类型 – 索引的选择依据是所期望的处理的类型,如果处理模式发生变化,索引可能成为性能的拖累。DB2 只具有一种索引类型 – 但也可以在查询执行需要时动态创建位图和散列联接(hash-join)索引。

在线、面向事务的应用场合中,SQL必须能快速生成一个结果集(往往相对较小)。索引和缓冲区是主要组成部分。DB2和Oracle都提供了相应技术,表现良好的性能。DB2因为长期支持静态SQL,因此稍稍具有优势。

数据仓库是的性能表现与事务处理系统相反。对于数据仓库或数据中心,复杂的SQL一般会需要扫描、搜索和比较大量的数据,并返回相当巨大的结果集。部分结果集可以自动计算并透明地在DB2(自动摘要表 – 从版本5开始提供)和Oracle(实例化视图 – 在
Oracle8i中首次引入)中使用。用于访问数据仓库的查询可以非常复杂。报表工具所生成的查询不能被手工优化。因此优秀性能的关键是基于成本的优化
器,因为可能的访问路径很多,而且还要考虑到并行机制。尽管Oracle在它的查询优化器中集成了以成本为基础的模型,在这一方面迈出了一大步,但DB2
仍然具有优势。此外,DB2利用Static Profiling也取得的更好的性能,这一自动特性可以将动态SQL转变为静态SQL。

DB2的这一出色的优化器功能,使它在事务型和数据仓库环境中都领先。

5.2 可扩展性 
可扩展性指的是DBMS在不同的硬件平台上,从手持设备到具有TB级数据和数千用户,无需应用重新设计或其它根本上的变化就能提供可相比较的服务的能力。可扩展性也包括在给定环境中根据构建者的业务需要进行扩展的灵活性等级。

DB2 UDB V7.2

DB2 产品系列涵盖了异构平台,从手持设备到大型主机。家族成员并不总是采用相同的代码,以便能够利用各种平台的特性更好地运行。尽管在在特
性的提供方面有所差异,但是共同的特性一般相同,确保移植性。IBM的战略是根据客户的优先级实现特性,这些优先级在不同的平台上可能是不同的,从而导致
针对每种代码具有不同的实施计划。有关产品家族成员的更为相信的信息,参看“前言:DB2产品系列”一章。

本文所关注的是DB2 UDB for UWO V7.2。在中型平台上,扩展所面临的一个主要问题是能够面对伴随OLTP和电子商务类型应用的数据仓库所提出的挑战。DB2 UDB 企业扩展版(即EEE)被认为是UWO系列中的“扩展型”,主要支持MPP,但也支持SMP和Numa。DB2 UDB企业版(即EE)支持SMP体系。

DB2 UDB EEE在SMP、Numa以及MPP上扩展。对它很多的研究成果被用于增强引擎本身,而且所有的操作或多或少是并行完成的。这并不是仅仅针对select操作,而且所有的insert、update和delete以及命令和实用工具也都是并行完成的。

DB2 UDB EEE在不同硬件体系上的扩展性的关键是数据库在一个非共享的环境中被分解为独立的分区。在一个非共享的群集中,每个分区都具有自己的资源,例如内存,CPU和磁盘。分区可以存在于SMP内,Numa内,以及群集内的服务器中。DB2 UDB EEE为一个群集添加节点的数量限制在1000个节点之内。

数据将通过散列分布到分区内。添加新的分区将通过数据重新分布来处理。分布是通过一个非常有效的散列的方法完成的 – 比关键范围查找方法更为有效。

除了在DB2 UDB EEE内的分区内提供系统之间的并行机制之外,DB2还在每个数据库分区内提供系统内并行机制。

当分区是在两个系统中间建立时,它们被认为是物理分区,通讯和数据传输是通过高速通讯链接(可以是RS/6000高性能交换机,共享内存通讯或基于VI的
设备)完成的。当分区是在一个SMP环境中建立时,分区被认为是逻辑分区,通讯和数据传输是通过共享内存完成的。尽管其中涉及到多个DB2实例,但它们被
看作是一个单一的数据库,它们共享相同的DB2编目。

为了在OLTP环境中支持大量的用户,DB2提供连接池、本地旁路和负载均衡功能。

DB2能够很好扩展的必要条件(也是关键的研究成果),是查询优化器。它可以逐个分析所有可能的检索方法,以便提供最快的答案。另一个关键领域是大规模的分析:引擎具有内置的、复杂的可以并行执行的SQL OLAP扩展以及通过自动摘要表提供的内置的聚合。

基准,例如TPC-C(OLTP)和TPC-H(Ad-Hoc Query),显示了DB2在扩展性方面的能力。在MPP和NUMA环境中,可以提供95%的扩展比,在SMP环境中,经SUN在64 CPU E1000上的测量,可达到90%的扩展性(详细信息参见www.tpc.org)。 
Oracle9i 
Oracle9i支持从手持设备到超级计算机的扩展。这是因为,根据Oracle的说法,除Oracle Mobile for handhelds之外(因为它的规模要小),所有的产品在所有的操作系统上和所有的家族成员中(从标准版,到企业版,到Real Application Cluster – 以前称为Oracle 并
行服务器)都使用相同的基础代码。共同的代码使得Oracle可以在所有平台上提供近乎相同的功能,使得开发者可以将他们的应用缩放到适用于任何OS平
台,而且不必进行应用的重新设计。一般说来,在实施一个多平台战略时,您可以使用Oracle的所有特性。采用共同的代码的另一个优势是可以在很短的时间
内在最具吸引力的硬件平台上提*品。

Oracle9i缩减了每个用户所占用的空间,从而可以在相同的硬件上,尤其是咱大型系统中可以提供更令人满意的响应时间。

为了实现这种扩展性,Oracle并行处理的实现与数据的分发无关(有时也称为数据分区分布)。这就意味着所有的实例都通过一个分布式锁管理器来访问所有
的数据和同步数据的变化,从而可以无需应用分区即可透明扩展。因为所有的处理器都可以访问在共享磁盘环境中的所有数据,每个处理器都可以用来运行一个查询
从进程。此外,对行或语句缓存的共同访问可以加速系统的访问,这是因为可以复用已经被另外一个资源(处理器或磁盘)完成的工作,避免了不必要的浪费资源。
在使用来自不同应用分区的数据时,这种方法尤其有效。在DML的读写操作中都可以使用并行机制。此外,Oracle可以并行化DDL语句,例如
CREATE TABLE表或CREATE INDEX。

在Oracle9i中,Oracle发布了第二代的“缓存融合(cache fusion)”,即Real Application Cluster(RAC)。RAC的目标是使得DBMS可以在多个节点之间扩展,这一特性往往不能被Oracle共享磁盘体系提供。RAC依赖于与操作系统相关的群件(Cluster Manager和进程间通讯),对于UNIX操纵系统,由OS-vendor提供,对于Windows NT和Windows 2000,由Oracle和Oracle OSD群件提供。群件中节点数量的限制取决于所使用的群件,当前在大多数情况下不超过8个节点。不幸的是,当前只针对Compaq Alpha和Compaq Linux具有一个认证 – 当前还没有公布其它的认证。

在RAC环境中,Oracle随附了共享磁盘体系。这一体系允许访问来自群集中每个节点的数据 – 无需为了优化性能而复制或重新配置数据。RAC的运行带有这一方式所固有的弱点 – 基于磁盘的并行控制 – 通过全局缓存服务和全局队列服务。这些服务放置在每个节点的内存中,可以通过消息进行进程间的通讯。

Oracle建议针对RAC仔细调整数据库和应用设计,以便达到最佳性能。这就意味着在向群集中添加节点的时候建议重新检查设计。

Oracle9i还引入了一个经过改善的动态内存的特性,它允许数据库引擎动态为进行分配内存,无需DBA的干涉。Oracle对行级锁的实现不会将锁升
级到其它等级(块,表),配合多版本读取模型,可以支持扩展性,因为与重写无关的读进程将不会阻塞一个写进程。

 

概述
   Oracle 数据库10g(Oracle
Database 10g)是第一个专门为企业网格计算设计的数据库。Oracle Database
10g降低了数据管理成本,同时可以提供最优质的服务,能够使IT迅速满足业务需求的变化并最大限度降低风险。系统易于部署和管理,这一点同样具有十分重
要的意义。

  通过不断推出先进的创新技术,Oracle在竞争中始终保持领先地位。Oracle Database 10g的推出,进一步拉大了用于Linux,
Unix和Windows的IBM DB2 UDB v8.1在这一领域的技术差距。就性能、扩展能力、可用性、安全性及价格等方面而言,Oracle
Database是当之无愧的领先产品,这已是Oracle客户的共识,媒体、分析人士和业界专家也对此给予积极的回应。Oracle
不断推出的先进创新技术,使各类规模的企业能够花更少的钱,办更多的事。

  本文将对Oracle
数据库10g与用于Linux, Unix和Windows的IBM DB2 UDB
v8.1的技术性能进行对比,论证Oracle“功能成本俱佳”的体系结构较之非共享的数据库在性能、扩展能力、资源利用、管理、可用性及满足技术发展趋
势等方面所具有的强大优势。

网格计算
   Oracle 10g是第一个,也是唯一一个专门为网格计算开发的基础架构
件。Oracle
数据库10g和应用服务器10g为灵活、动态的网格计算提供了完全集群、工作负载管理和数据中心自动化技术,使用Oracle网格的客户可以实现高的资源
利用率并显著降低成本。他们还可以通过Oracle系统在可移植性、可用性、安全和扩展能力等方面得到全面提升。Oracle系统的可移植性可保证您在所
有运行平台环境下同样受益,包括Linux
和常规集群系统。目前,只有Oracle能以低成本集群产品为基础,实现真正的扩展,提供高可用性,并且可以动态配置资源。Oracle使网格牢不可破,
您即不能断开网格,也不能侵入网格。

  Oracle还在网格技术方
面实现重要突破,如推出了Oracle真正应用集群(Oracle Real Application
Clusters)、Oracle流(Oracle Streams)、Oracle 可传输表空间(Oracle Transportable
Tablespaces)等。最重要的,Oracle长期以来一直成功地为领先的平台和系统运行环境提供软件产品。Oracle网格客户对投资
Oracle技术的信心有助于推动网格技术的应用。

  Hartford在多个应用
之间共享Oracle数据库资源,包括记帐、会计合并、现金帐户、应收帐户,从而使企业可以花更少的钱,办更多的事。Oracle技术,包括Oracle
资源管理器和Oracle Streams,为Hartford管理工作负载,在所有应用之间合理配置资源提供了必要的功能。

  CERN(欧洲核研究组织)
建立了Large Hadron
Collider(LHC)计算网格,用以管理LHC实验数据。每年,该组织大型实验生成的数据量高达一千万亿字节。这些实验数据供2000多用户和
150多个机构应用分析。CERN决定LHC计算网格采用Oracle系统。数据库和应用服务器是这一解决方案的重要套件。Oracle数据库和
Oracle应用服务器能够满足LHC计算网格的技术要求。Oracle具有扩展性、信息共享和VLDB功能,可供几千个用户在LHC计算网格*享和访
问数据。可传输表空间可以快速移动大量数据,对数据量没有限制。同时,Oracle真正应用集群以Linux集群产品为基础,为CERN提供了具有高可用
性和强大扩展能力的数据库。

  
去年,IBM极力打造“随需应变计算”的品牌形象。IBM的产品包括一体化托管服务、基于开放式标准的模块和由业务咨询服务部进行的专用软件开发。其核心
是集成(DB2信息集成器)、自动化(SMART)和可视化(通过硬件产品)。IBM通过CPU硬件划分和处理器按需定期许可的方式销售大型SMP服务
器。这又回到了大型主机业务模式的老路,带来成本和限制等方面的一系列问题。随需应变是以WebSphere为粘合剂拼凑成这样一个运行环境。IBM在网
格产品中配置的软件是DB2信息集成器、DB2内容管理服务器和WebSphere。IBM可能有大量关于网格计算的学术论文,但却没有专门针对网格开发
的软件产品。

  有充分依据证明,Oracle系统更适合用于网格计算:
1. Oracle完全在常规硬件环境下运行。IBM则建议在高档SMP环境下运行他们的数据库。他们的集群数据库不支持实际应用(如SAP、PeopleSoft、Siebel等)。 
2. Oracle
RAC可以动态添加或删除数据库实例,无需停机。这意味着,您可以根据负载与管理优先级的要求,改变不同数据库的资源配置。IBM集群数据库不共享任何资
源。如果需要添加节点,您必须重新划分数据,所以不得不停机。因此,您不得不为满足高峰期间的需要去规划一个非共享的数据库,利用率极差。
3.
如果您需要在刀片服务器与SMP之间分割软件,需首先确定配置决策。在刀片上运行的软件不能利用空闲的SMP,而在SMP上运行的软件也不能利用空闲的刀
片。因此,异构硬件组合也限制了您的系统应有的利用率。为了最大限度利用资源,对优先级和负载做出最佳响应,您需要建立同类硬件环境。完全同类的刀片环境
可以大大降低成本,而能够完全在刀片环境下运行的只有Oracle软件集。
4. Oracle 数据库
10g包括自动存储管理(ASM),用以垂直集成专门为Oracle数据库文件开发的文件系统和卷管理器。ASM将I/O负载分布到所有可用资源中,从而
优化系统性能,不必进行人工I/O调整。ASM可使DBA在不中断系统运行的情况下调整存储配置,增加数据库的尺寸,帮助他们动态地管理数据库运行环境。
5. Oracle
Streams可以通过统一的基础结构实现异步信息共享。这一真正意义上的统一架构,将信息队列、复制、事件、数据仓库加载、通告、发布/订阅全部结合在
一套技术中。您可以根据需要,随着变化逐渐增加共享信息。您不必安装、管理、集成大量不同的产品。IBM不能以这样的方式共享信息,除非组合不同的产品,
编写许多代码,并对各种组件进行管理。
6. Oracle可传输表空间可用来传输整块数据库。Oracle Streams是随着变化逐渐增加共享信息,而可传输表空间则可迅速地成批移动数据,即使在不同的平台之间。当然,这两个套件可以结合使用。
7.
有时,共享和集成信息的最好方法其实只是在需要的时候,能够进行远程访问。Oracle已经内置了分布式SQL、远过程调用和分布式事务。您可以查询其他
数据库所需的信息,在必要时更新这些信息,访问其他服务器的程序逻辑。通过Oracle通用网关,或采用我们的透明网关,还可以访问其他数据库管理系统中
的数据。您可以组合Oracle与非Oracle数据,同样,您可以使用Oracle
Streams通过我们的网关共享非Oracle信息。而如果您想更新非DB2数据库的话,IBM则要求您购买DataJoiner,他们没有通用网关或
Streams之类的产品。
8. Oracle 产品集为网格计算提供所需的高可用性。Oracle RAC 与Oracle 数据保护(Oracle Data
Guard)可避免集群内部,以及集群之间的运行中断。这种保护包括计划停机(打补丁,升级)及非计划运行中断(服务器故障、灾难)。计算不具备可用性
时,计算效用也就无从谈起。IBM采用备用数据库技术,但除非主数据库瘫痪,否则无法使用备用数据库,这无疑会造成资源利用率很低的问题。
9.
Oracle系统性能和扩展能力优于世界上任何数据库产品。这一点对于网格计算是很重要的。我们的读取一致性模型可保证系统最高吞吐量,不会发生在IMB
和微软系统中遇到的锁定问题。我们大量客户运行的数据库容量高达万亿字节以上。我们的RAC技术对于支持的节点数量不存在结构性的局限。Oracle是当
前TPC-C、TPC-H@1000GB、TPC-H@3000GB和TPC-R@100GB的领导者,并保持基于Linux的
4路、16路和64路系统TPC-C世界记录。除TPC基准测试外,Oracle还支持真实环境企业级应用基准测试,如运行Oracle应用和SAP的基准测试2。在这方面的公开评比中:
a. Oracle 位居2层订货组装ATO基准测试前三名,每小时34 260订单。
b. Oracle位居3层订货组装ATO基准测试前两名。
c. Oracle保持SAP SD 2层测试结果的前两名。
10.
Oracle将安全放在首位。Oracle致力于在其每一种产品中设计安全的功能和解决方案,尤其是用于存储数据的数据库服务器。对于设计Oracle数
据库的开发人员来说,安全是编码工作的核心,以保证推出安全的产品。Oracle安全机制已得到17家独立安全评估机构的认可。IBM是在数据库之外解决
安全问题,依靠操作系统或Tivoli的产品线来保证DB2及其他IBM产品的安全。IBM没有“虚拟专用数据库”(Virtual Private Database)和“标签安全”(Label Security)之类的功能。而且,IBM系统也未接受独立的安全评估。
11.
Oracle具有操作系统及硬件之间的兼容性,因此可以支持异构网格。IBM的DB2没有各平台之间一致的代码库,因此DB2应用不具备移植能力。
Oracle可在所有主要的操作系统上运行,而且在不同的操作系统环境下具有相同的功能和性能,因为我们采用单一代码库。Oracle的移植性意味着,无
论网格如何发展,以何种操作系统为主,Oracle都可以对其加以支持。
12.
根据表空间页面大小,DB2对行的大小有限制。一行记录不能跨过多页,因此行的尺寸必须小于页面尺寸,同时还要考虑到页面的开销(最多32677字节)。
Oracle可以一行跨过多页,Oracle术语称为块,因此可以完全避免这种复杂性。Oracle数据库10g的最大数据库尺寸为8艾字节(1018字节),而DB2 UDB的最大尺寸仅为8太字节(1012字节)。Oracle的无限尺寸使您的网格具有极为强大的灵活性。
13.
Oracle通过独立的集成产品为您提供上述全部功能。我们的理念是销售集成式软件,无论是电子商务套件,还是网格基础设施。除系统开放,支持所有相关标
准外,Oracle还提供全面集成。IBM和微软提供的组件需组装后才能部分支持网格计算。您要么装配组件,要么购买装配组件的咨询服务。而Oracle
则通过最佳集成软件对网格计算加以全面支持。
14. Oracle将推出专门针对Oracle产品集的Globus 工具包。Globus
工具包是一组用以支持资源管理、安全和发现的模型。IBM的Globus工具包已开始供货,但却未开发网格计算版软件,而我们已开发了这样的软件。因此,
若想以IBM技术采用Globus软件,您必须购买IBM服务,或投入相当的时间和费用将二者加以集成。

管理能力
  
今天,业务环境的竞争日趋激烈,如何以最低的成本,同时不以降低服务水平为代价,管理信息技术(IT)基础设施是企业目前面临的挑战。目前,这种情况正陷
入两难的境地,当系统提供越来越丰富的功能时,复杂性必然提高,因而也就加大了系统维护和管理的成本。今天,希望取得良好效益的企业不仅需要可靠、高性能
的应用为客户服务,而且必须降低运营成本,最大限度地扩大赢利空间。这种情况加之这方面技术能力的短缺使得管理成本迅速攀升,甚至对企业的竞争能力构成潜
在威胁。针对上述情况,Oracle数据库10g推出了先进的自我管理数据库,它可以自动地对自身进行监控、适应和调整。Oracle简化了数据库各个管
理环节,从而提高了管理人员的生产能力,可将客户的运营成本降低50%。在简化数据库管理方面,Oracle数据库10g大大优于IBM
DB2 UDB。2003年4月,Rauch协会对总体管理成本进行了对比:Oracle9i数据库第二版与IBM DB2
v8.1的比较结果显示,Oracle9i数据库第二版明显比IBM DB2 v8.1易于管理:
1. Oracle9i数据库第二版的管理步骤仅为DB2 v8.1 的41%;
2. 执行相同的管理任务,Oracle9i数据库第二版所需 的时间比后者短54%;
3. 在同等管理工作负荷下,Oracle9i数据库第二版所 需的管理人员数量仅为DB2的55%;
4. 由于Oracle9i管理人员工作效率的提高,每个管理 人员在系统建立后的前五年可节省管理费用 37 054美元,而且今后这一数字还将进一步增加。

  自我调试、简化复杂的管理功
能、提高日常管理工作的自动化水平和更先进的管理工具是Oracle系统管理能力始终保持领先水平的主要因素。Oracle管理体系建立在管理作业多,测
试人员少的基础上。DB2
v8.1做了许多改进,特别是在存储器配置、调试和健康监控等方面。DB2新型健康中心和配置向导主要用于缩小与Oracle在时间(或效率)方面的差
距。与此同时,Oracle也对Oracle数据库10g的可管理性做了进一步提升,这样一来,两种系统再次拉开了技术差距。

自我管理数据库
  
Oracle数据库10g自我管理基础设施由四大套件组成:自动工作负载储存库、自动维护任务基础架构、服务器生成告警和顾问框架。自动工作负载储存库
(AWR)是一个内置信息库,包含特定数据库运行统计等方面的信息。在定期的时间间隔中,数据库制作所有关键统计数据及工作负载信息的快照,将其存储到
AWR。自动维护任务基础架构可供数据库自动执行日常维护,如优化器统计刷新、重建索引等。这一套件可以利用Oracle数据库10g
提供丰富的时间安排功能(通过称为进度表的新功能),在一个预定义的“维护窗口”中运行这些任务。

  采用DB2系统时,DBA需
要决定刷新何种统计,以及刷新的方法和时间,数据库不会在这方面提供任何帮助。换句话说,DB2
DBA必须人工跟踪前一次统计生成后发生变化的表,密切掌握数据分布,以确定发生变化的数值,还要通过反复尝试的过程确定分析数据的合适的采样量。不仅如
此,他们还必须重新绑定所有的应用程序包,才能利用新的统计数据。根据DB2管理指导手册:性能“运行统计后,最好重新绑定应用程序。如果有新的统计数
据,查询优化器可以选择不同的访问计划。”3

采集统计变得像DB2这样复杂时,会妨碍DBA根据需要随时进行采集,因此导致执行计划不力。这也许是为什么DB2管理员认为查询优化是最耗时工作的又一
个原因。

  对于不能自动解决,需要通知
管理员的问题(如超空间运行),Oracle数据库10g可以自行监控并发出告警,以及时有效的方式通知DBA尚待解决的问题。在AWR获取数据的基础
上,Oracle数据库10g配置了自动诊断引擎,称作“自动数据库诊断监测”(ADDM)。ADDM可以使数据库诊断自身性能,确定如何解决识别出来的
问题,量化预期指标。

  Oracle数据库10g提供数据在位重组功能,可通过压缩数据优化空间利用率。段压缩功能可以使可用空间被表空间中的其他段重用,提高查询和DML操作的性能。

  Oracle表或索引识别功
能还使其复杂性大大低于IBM
DB2。Oracle管理员可以对数据库进行分析,通过一个工具确定需要识别的对象并完成识别。DB2则至少需要两个工具,REORCHK和REORG。
由于耗用大量资源,因此识别通常安排在非峰值期间进行。采用企业管理器(Enterprise
Manager)工具,可以很容易地将识别安排在维护窗口期间执行,无需值守。而且,EM还可以自动提示管理员识别开始、发生故障或成功。在DB2中,任
何识别作业都要由人工程序来完成,需要开发定制脚本并始终由管理员监控。

  Oracle识别程序还采用了先进的错误-处理功能。如果识别期间发生错误,管理员可以取消操作,或修复问题后重试。DB2系统识别期间发生错误时,通常必须回滚或恢复数据库来改变。

  DB2还在许多方面落后于
Oracle,包括管理能力。DB2管理员仍需调试多达12个参数才能合理配置SQL执行存储器。而Oracle管理员只需用一个参数即可指定一个实例可
用的查询执行存储器,然后令Oracle自动管理,进而保证系统的最佳运行性能。同样,Oracle可恢复空间分配功能为管理员提供了目前急需的工具,他
们用其修复错误空间,避免数据库运行发生故障。对比之下,如果未能准确估算出执行日常管理任务所需的空间,如创建新索引、装载大量数据等,DB2管理员还
得半夜起来进行处理。与V7一样,DB2

V8仍然采用基于锁的读取一致性模型,因此,他们还是需要花费大量时间通过监控死锁,解决锁冲突来应付DB2的结构性缺陷。Oracle采用基于广泛认可
的读取一致性模型,因此Oracle
DBA甚至根本不必考虑这些任务!大部分DB2配置参数仍然不能在数据库/实例不停止运行的情况下加以改变,因此会造成应用中断。以下是另外一些DB2尚
不能满足的基本管理要求:
1. 动态配置参数
2. 限定紧急事故恢复时间
3. 恢复时间建议
4. SQL访问外部文件存储的数据
5. 可恢复备份与重建
6. 自动识别占用大量资源的查询
7. 自动识别需要优化器刷新统计的表
8. 自动确定优化器刷新统计的抽样尺寸
9. 自动创建直方图
10. 可传输的表空间
12. 服务质量报告

应用/SQL调整
   应用设计问题是造成系统性能问题的最主要根源。开发人员、DBA和系统管理员的所有调整才智,都不能弥补应用结构和设计方面的缺陷。因此,SQL语句的调整是数据库系统性能调优的一个重要组成部分。

  查询优化器可以对查询性能产
生重要影响,如是否采用索引;当查询涉及连接多个表时采用何种连接技术等。Oracle投入大量人力物力开发出基于成本的优化器,这是业内最先进、最成熟
并经过全面测试验证的查询优化器。基于成本的优化器已被Oracle应用、SAP、PeopleSoft等重要应用套件所广泛采用。由于Oracle数据
库已成为广大客户使用这些应用的平台,从而证明Oracle优化器在大量的实际应用设置中取得了极大成功。

  尽管Oracle数据库提供
了最佳查询优化技术,在大部分情况下无需管理员介入,最大限度地提高了应用/查询的性能,但在一些个别的情况下,因应用性质或数据分布独特性有可能造成
SQL语句占用较高系统总体资源。ADDM可以自动识别占用较大资源的SQL语句。然后,Oracle数据库10g对其进行分析,通过查询优化器新增加的
自动调整功能(称之为自动调整优化器)提出解决方案。在此请特别注意的是,这种解决方案完全是由优化器给出的,而不是任何外部工具采用某些预定义的试探方
法生成的。

  自动调整优化器检验自身的估
算,然后采集辅助信息修正估算误差。这一系统还能根据过去SQL语句的执行记录,以定制的优化器设置方式采集辅助信息(如第一行或所有行)。通过辅助信息
建立SQL Profile,并提出创建它的建议。SQL
Profile创建之后,查询优化器(在常规模式下)可以生成经过准确调试的方案,而不改变应用代码。这种独特的功能在DBA支持第三方应用时非常实用。
这时,他们不必访问代码,否则当代码发生变化时,可能会使支持协议失效。

管理企业
   通过Oracle企业管理器10g网格控制(Oracle Enterprise Manager 10g Grid
Control),Oracle推出了真正基于Web的管理控制台,DBA可以从任何位置进行访问,且实现零客户端程序安装,完全防火墙兼容。性能管理
(Performance
Management)功能包括通过web浏览器进行实时图形数据库性能监控。为了简化Oracle软件的管理任务,网格控制配置了完整的软件库存清单,
包括硬件、操作系统、操作系统补丁、已装Oracle软件、已装Oracle补丁。网格控制跟踪硬件和软件的安装变化,便于出现问题时查明“哪些部分发生
变更?”

  网格控制通过
Metalink直接与Oracle支持(Oracle
Support)连接,可以快速查询企业内部已装Oracle产品的相关补丁。补丁可以在特定目标的上下文中查找,也可以在必要时,由管理员查询特定的路
径。确定所需补丁的位置后,网格控制可由Oracle Metalink下载补丁,将其粘贴到相应的目标主机中。

  复制软件安装用于开发或QA
是许多数据中心的日常工作。对于Oracle软件来说,网格控制使这类克隆安装工作变得相当容易。网格控制的克隆向导可以自动复制数据库和应用服务器安装
(特别是Oracle本地安装目录)。由于具有“多播”功能,因此,即使多个目标主机的多个克隆也同样可以在一次操作中完成。网格控制的本地克隆已实现智
能化:主机名、IP地址及其他环境设置都可以在新克隆的主机上自动进行调整。

  DB2控制中心在一个终端上
提供了通用和集成的成套工具,用于管理跨越不同软件和客户机硬件平台的本地及远程数据库。DB2的这种新功能,Oracle早在1994年就已经应用到
Oracle企业管理器框架中了。在DB2 Version 8.1中,您也可以选择采用Web 健康中心(Web Health
Center)通过Web浏览器访问健康监测信息,执行新的DB2命令。

高可用性
  
在今天快速发展的经济环境下,构建高可用性的IT基础设施对于各类企业成功运作显得至关重要。关键的应用服务器或数据一旦出现问题会危及到整个企业,收入
受损、客户丢失、导致赔偿,不良的形象会在客户中产生持久影响,破坏企业的声誉。故障停机的损失往往不大容易用直接成本来衡量。据Standish集团的
DARTS调查4,系统故障停机一分钟给企业造成的损失大约为每分钟2 500至10
000美元。按照这一指标计算,即使数据可用性达到99.9%,企业每年也要付出500万美元的代价。在设计具备容错和恢复能力的IT基础设施时,考虑到
非计划停机和计划停机因素是非常重要的。非计划停机主要是由于计算机故障或数据问题造成的(损坏、人为错误)。计划停机主要是由于数据变化或系统变更,必
须对生产系统做相应调整。计划停机可以使运行中断,特别是支持多个时区用户的跨国企业。这种情况下,对系统进行设计,最大限度减少有计划的停机是很重要
的。计划停机包括日常管理、定期维护和执行新部署。

数据库事故恢复能力
Oracle和DB2都具有联机和脱机备份与恢复基本功能。尽管可以提前制定并实施备份方案,但很难对所有恢复情况做出预测。Oracle综合备份与恢复能力大大优于DB2。因此,Oracle几乎可以满足所有备份和恢复要求。

Oracle数据库10g恢复管
理器(RMAN)采用独创设计,具有关键Oracle数据最佳恢复功能。在不增加成本和安装附加设备的情况下,完全可以由RMAN来管理Oracle数据
库文件的备份和恢复。由于与Oracle内核紧密集成,因此RMAN达到了具有洞察力和智能化的水平,可以有效恢复Oracle数据库。Oracle数据
库10g RMAN具备许多先进的功能,例如:
1. 快速恢复区 - 组织管理恢复的相关文件
2. 优化增量备份 - 仅对需要备份的变化块直接备份
3. 增量更新备份 - 合并数据库映像拷贝和增量备份,提供快速有效的数据库恢复
4. 企业管理器与RMAN - 提供点击备份与恢复向导

Oracle数据库10g 备份与恢复还推出了许多创新功能,如:
1. 备份压缩
2. 当重建发现丢失或损坏的备份时自动恢复前一备份
3. 自前次恢复时间点恢复-通过复位日志恢复
4. 恢复期间自动创建新文件
5. 在备份或恢复中自动实现通道故障转移
6. 自动表空间时间点恢复
7. 全DB“开始备份”命令加速镜像分割
8. 经过改进的恢复并行操作(2至4倍)
9. 表空间重命名
10. 存档日志代理(第三方)备份
11. 基于时间窗口的加速备份
12. 跨平台可传输表空间

  由于能够生成即时备份,因此分割镜像备份非常实用。Oracle和DB2都具备分割镜像备份功能。不过,Oracle可以在数据库运行和磁盘写入的同时分割镜像。而DB2镜像分割时必须挂起数据库I/O,因此操作过程中,数据库是不能写入的。

  如果存档日志文件损坏,Oracle能够通过LogMiner工具翻阅损坏的日志文件,恢复日志文件中记录的交易。对于DB2来说,存档日志文件损坏意味着不仅特定日志文件中的交易全部丢失,而且损坏日志文件之后创建的存档日志文件也会丢失。

  采用Oracle的块级介质恢复功能,当只有一个块损坏时,只是这个块需要恢复,文件的其余部分,即含有这个块的表仍然可以在线访问,从而提高了数据的可用性。DB2不能以块为单位恢复数据,因此需要将整个文件脱机、重建、恢复。

人为错误恢复
   大量调查结果显示,40%的应用中断是操作者或用户错误造成的。这些都属于人为操作不当。但这类错误很难避免,而且没有先进的计划工具和相应的技术很难恢复。

  Oracle数据库10g提供了人为错误修正技术,称为Flashback。Flashback配置了SQL接口,可以迅速分析修复人为错误。Flashback是Oracle数据库10g的独创技术,可以任何粒度级别进行恢复,包括行、事务、表和整个数据库。

1. Flashback查询可供用户查询过去某一时间点的数据,重建被意外删除或更改的数据。
2. Flashback版本查询可按行查看数据库一段时间内发生的变化。
3. Flashback事务查询可按事务查看数据库的变化。
4. Flashback数据库是一种按时间点进行恢复的新战略,可以快速将Oracle数据库倒回至以前的时间,以修复逻辑数据损坏或用户错误造成的问题。
5. Flashback表可方便快捷地恢复过去时间某一点的表或一组表。
6. Flashback删除为删除对象提供安全保证,您可以简便快速地恢复删除的表及其相关的对象。

增量磁盘备份及Flashback技术不需要分割镜像备份。DBA从备份到修正错误不必经过漫长的重建过程,在不采用费用很高的磁盘镜像技术的情况下,可以显著提高恢复速度。

在线维护
理想环境下,DBA应该能够在线执行所有维护工作,即在操作过程中可以继续所有业务交易。Oracle不仅在线执行交易的能力强于DB2,而且显著提高了
执行的控制能力。几乎每一种重组操作在Oracle中都可以在线执行,创建新索引、合并或删除现有索引,或对表进行各种改变,包括加减字段。而DB2只能
在线合并索引。DB2中的所有其他操作都需要停止数据库交易,释放所有的锁5。

  Oracle数据库大量维护
工作可以在数据库运行、用户更新或访问数据不中断的情况下进行。索引可以在数据库运行状态下,最终用户读取或更新数据的同时添加、重建或整理。同样,表也
可以在线重新定位或整理。在不中断最终用户查看或更新基础数据的情况下,还可以对表重新定义,改变表类型,加减、重命名列和改变存储参数。Oracle数
据库10g这种功能强化后,可以:
1. 支持快速克隆表索引、授权、限制及其他特性;
2. 在线将Long数据类型转换为LOB数据类型;
3. 建立唯一索引,而不需要使用关键字。

  Java?和PL/SQL?存储程序可以动态更新,Oracle管理所有从属关系,在数据库中正确集成新程序,对最终用户的运行不构成影响。Oracle数据库10g中强化了这种功能,从而可以在相关存储程序不进行重新编译的情况下,对表做各种变更。

数据中心灾难
   Oracle Data Guard是在业内推出的最全面、最可靠的灾难恢复解决方案,可以:
1. 防止人为错误导致的运行中断和系统灾难
2. 零数据丢失保护
3. 近乎实时的数据同步
4. 集成基于GUI的管理框架

  Oracle Data
Guard可以在各种系统灾难下对客户加以保护。Data
Guard可以自动完成复杂的任务,为维护备用系统提供监控、告警和控制功能。同时,除报告外,Data
Guard还利用备用服务器进行维护、更新(硬件、操作系统和数据库软件)和日常管理,从而减少了计划停机。

  IBM没有与Oracle Data Guard相当的产品。采用DB2,每个备用数据库都是一项定制作业,向备用站点发送重复日志之类的基础工作都需要依靠用户编写日志传送标注。DB2用户创建的备用数据库“解决方案”可靠性差,且实施成本高。

数据仓库与商务智能
  
商务智能系统的良好运行建立在数据仓库的基础上,这种数据仓库要求能够满足日益扩大的受众对信息不断增长的要求。无论数据存储在何处,要为客户提供即时信
息。无论是大企业,还是中小企业,也无论是传统企业或.com公司,商务智能系统都要面临上述两方面的要求。事实上,AMR调查结果显示,在为不断增长的
用户提供即时信息和透明支持大量数据源的推动下,数据库正逐渐演变为数据仓库,这种合并过程目前正在以每年40%的速度发展。这意味着,数据仓库能够储存
更多数据,支持更多用户,运行速度更快,而且不降低服务质量。数据仓库的核心要求:性能、扩展能力和管理能力仍是成功部署数据仓库的关键因素。

  Oracle数据库10g是一个基于标准的独立平台,可满足服务器一侧商务智能和数据仓库的各种要求,包括提取、转换和装载(ETL),在线分析处理(OLAP)和数据挖掘。在商务智能环境下,Oracle数据库的功能不需要多个引擎。这种商务智能架构具有许多优点:
1. 快速部署:部署商务智能系统时不需要整合多个服务器组件;
2. 降低管理成本:一个服务器意味着所有数据都存储 在一个位置,通过一个工具进行管理。而且,不需 要管理各服务器存储数据的同步流程。当Oracle 数据库10g装载新数据时,可供所有商务智能使 用。
3. 有利于制定决策:采用一个数据库,所有商务智能用户都可以迅速访问商务智能系统中的数据,因为 不需要从一个服务器到另一个服务器过滤数据。
4. 安全:全部数据存储在一个数据库中,无论采用何 种方法访问,IT管理员都可以保证商务智能数据的安全。
5. 可用性:Oracle数据库10g具有出色的可用性,远 远高于其他智能产品的可用性水平。

扩展性
  
长期以来,Oracle一直支持各种平台和操作系统,为客户提供了灵活的选择和协商的余地。Oracle支持当前扩展能力最强的64位对称多处理
(SMP)系统和非统一存储器访问(NUMA)系统,并且一直在支持90年代中期以来的同类系统结构。Oracle和IBM支持的大规模并行处理
(MPP)系统,由于需要管理多个操作系统和数据库实例,因此对维护有比较高的要求。IBM SP是针对采用分区技术的IMB DB2 UDB
ESE(以前称EEE)设计的MPP
平台。IBM解决方案依靠散列分区技术,在MPP合成系统中提供理论上对称的数据分布。这种方法需要进行MPP管理和调试,以最大限度减少实际业务查询中
的数据变形问题,这些在Oracle真正应用集群的非共享/共享磁盘系统中得到显著改善。

  IBM的VLDB实例还是以IBM平台为主,尽管IBM DB2推出了基于其他平台的产品(HP, Sun, Linux, Windows),但系统在这些平台上的性能和扩展能力几乎没有实例加以证实。

以下是部分Oracle数TB(数据)客户:
1. Amazon.com,13TB数据,运行在HP Superdome
2. Acxiom,6TB数据,运行在HP AlphaServer集 群
3. AtosEuronext,1.5TB数据,运行在RedHat Linux 集群
4. Best Buy,1.5TB数据,运行在Sun e-1000
5. 高露洁,2.6TB数据,运行于基于IMB P690的 SAP BW Financial Institute,
6. 5TB数据,运行在多节点206 CPU IBM SP
7. 法国电信,21+TB数据,运行在HP V-2500
8. 意大利移动电信,9.6TB数据,运行在HP AlphaServer集群

并行机制
  
Oracle可扩展的、并行决策支持战略以动态并行机制为核心。这种方法可以实现完全透明的并行,不需要静态表分区,大大减少了数据管理工作,最大限度地
利用硬件的潜在能力。O在racle用于数据维护的分区选项中,也增加了分区间的并行处理支持,包括并行DML。Oracle还支持每个分区内查询和插入
的并行处理。

  对比之下,IBM(DB2
UDB EEE)最初选择分区作为并行处理手段。IBM提出了“UNION
ALL”工作区的建议。有趣的是,IBM基于OS/390(Z/OS)的DB2却并未选择这种方法,而是采用了Sysplex共享磁盘,分区(范围)的方
法只是用于管理。

  Oracle8i的优化器增
加了“物化视图”,这是RDBMS中的一种分层汇总表,查询可以透明地转至汇总层,从而极大地提高了查询性能。Oracle对事实表和维表实现了这种功
能。IBM在DB2 UDB中采用了类似方法,但仅支持事实表(Version 7以上版本)。

  现在,Oracle基于成本的查询优化器成本计算功能可应用于Oracle的数据库资源管理器,用以给不同的用户组(或“查询用户”)配置成本限制,防止不够完善的查询干扰同样有性能要求的其他用户的查询。 而IBM则是通过工具由数据库外部解决这一问题。

  有必要指出,Oracle还在数据库中嵌入了OLAP选项和数据挖掘选项,因此可以在数据存储位置,而不是商务智能工具中进行高级分析,从而提高了系统的性能。OLPA选项可通过SQL或JavaAPI访问。数据挖掘选项可通过Java API访问。

分区
   分区可以将大型数据库结构(表、索引等)分解为比较小的,更加易于管理的结构单位,同时,可以提高查询的性能和资源利用率。
oracle与DB2

  DB2仅支持散列分区方法,
与Oracle分区方法相比存在很大的局限性和明显的弱点。由于只能进行散列分区,因此DB2不支持“滚动窗口”,就管理性而言,这是一种严重的不足。
“滚动窗口”可以使规定期间的数据(如一周、一个月)持续地由最新数据在线替换旧数据。DB2散列分区在加载新数据时,要求所有分区的数据重新分布,因此
延长了加载时间,降低了数据的可用性,因为数据重新分布过程中,表呈锁定状态。同样,当旧数据存档或删除时会涉及到所有分区。这样会干扰常规的插入操作,
造成空间碎片。

  DB2的另一个缺点是要求表
与索引之间均衡分区。这意味着,不能创建全局索引,包括分区的或非分区的。对于通常需要采用全局索引有效访问某个记录的OLAP环境来说,这是一个严重的
问题。采用DB2,应用设计人员无法灵活地定义在分区中的索引策略。
DB2分区方法存在的这些局限,使得管理大量数据的工作变得十分复杂。在这方面,Oracle提供了丰富的选择方法,不仅提高了可管理性,而且改善了系统
的性能。

数据加载与存档
   Oracle数据库10g采用了Oracle数据泵(Data
Pump),这是一种基于服务器的统一框架,可用于Oracle数据库系统之间快速传送批数据和元数据。利用直接路径API,Oracle数据泵可以最快
速地完成Oracle系统的数据加载和卸载。Oracle数据泵是企业级服务器基础架构,具备加载和卸载全并行功能、重启功能和监控功能。Oracle数
据泵的所有接口全部外置,因此您可以编写自己的数据传送工具。利用数据泵输出(Export)和输入(Import)工具,可以在目标平台上卸载或重新加
载任何数据对象的子集。如果在文件系统不同语法的平台间传送数据,现在可以改变某些对象输入时创建的定义,数据不会发生丢失。

  DB2输出功能一次仅允许传
送一个表的数据。因此,假如模型中有20个表,就需要执行20次输出作业,一次完成一个表。除浪费时间和人力外,还会由于表的依赖关系在不同时间传送造成
输出数据不一致。因此,如果模型中含有ORDERS和ORDER_ITEMS两个表,由于ORDER_ITEMS在ORDERS表之后输
出,ORDER_ITEMS的输出数据中可能含有ORDERS表的输出文件中不存在的项。这种不一致会造成输出文件根本无法使用,因为这样的文件不能用来
重建完全一致的数据快照。而Oracle不仅可以让管理员在模型、表和数据库层输出数据,而且可在输出作业开始后,保证输出数据相对于时间点的一致性,不
必考虑给定表的输出时间。因此,在上例中,管理员只需执行一次作业,输出完整的模型,不必担心输出数据出现不一致的问题。

  第二,由于DB2输出文件不
能提取某些表和模型属性,因此根本无法用来逻辑创建模型或数据库。据“DB2数据传送指南与参考”介绍,DB2
输出不支持带有类型列的表单,不能保留参照完整性约束、检验约束、物理空间分配设置、默认列、外部关键字定义和触发器等属性。同时,也不支持任何非表的其
他数据库对象,如视图、存储过程等。因此,与随时用来执行逻辑备份、重建模型或数据库的Oracle输出/输入工具不同,DB2工具仅用于表输入输出数
据。即使这种用途也不是随便可以执行,因为DB2输入不能用于重建LOB列定义大于1GB以上的表7。

  Oracle SQL
加载器(Oracle SQL Loader)是另一种由外部文件向Oracle数据库表加载数据的有力工具。与DB2 Load不同,SQL
Loader可以在同一次加载会话中,将数据装入多个表,从而使采用SQL函数操纵数据成为可能,数据在加载过程结束后可以进行访问。这对于DB2来说是
无法实现的,除非管理员备份表空间,启动完整性约束8。除简单数据加载外,Oracle数据库10g还配备了成套服务器功能,可满足ETL处理要求(提
取、转换、加载)。采用Oracle外部表功能,平面文件等外部源数据可以配置在数据库中,如同正常数据库表一样。这些“外部表”可通过SQL存取。这
样,外部数据可以采用SQL、PL/SQL和Java直接查询,并行装入数据库。外部表在一个步骤中完成数据转换和装载,从而大大简化了ETL处理过程。
DB2则需要采用多个人工步骤。DB2首先需要将外部数据装入“分级表”,然后进行SQL转换,最后才能进行处理。因此,增加了DBA的工作量,延长了
ETL的周期!

  操作影响
   在许多组织中,一个Oracle DBA可以管理多个数据库。对于大规模决策支持,以下实例可以有力地证明Oracle系统如何精减实际需要的的DBA人员数量:
1. Acxiom,16TB数据库,2 DBAs
2. Acxiom,6TB数据库(RAC),2 DBAs
3. Amazon.com,16TB数据库,2 DBAs
4. 法国电信,21+TB数据库,2 DBAs
5. 意大利移动电信,12TB数据库(OPS),3 DBAs
6. WestPac,2.3TB数据库,2 DBAs

  影响操作的另一个考虑因素是
技术能力问题。Oracle的技术支持能力远不止数据仓库/决策支持实施(大多数分析人士认为这只占其技术支持的30-50%),也并不仅限于
Oracle现有经验老道的顾问和设计师。一般情况下,Oracle客户利用内部技术力量完成部署工作。需要咨询帮助的客户可找Oracle,四大咨询公
司及大量二级专业咨询机构。因此,Oracle项目经理可以在丰富的技术资源和灵活的价位中进行选择。例如,最近“Monster.com”的
Oracle技能调查显示,初步掌握Oracle技能的人员达到5000人,而掌握“DB2
UDB”技术的人很少(不到200人)。

应用开发
  
每个企业都正在开发基于互联网的应用,以充分利用互联网无处不在、廉价和开放式标准的优势。不过,开发这类应用面临严峻的挑战,对开发平台也提出了更高的
要求。选择正确的平台是成功开发应用的必要条件。Oracle数据库10g为开发用于网格计算的灵活、可扩展、高性能的数据库应用,提供了最为全面的功
能。

  调查显示,大部分成套应用软件主流供应商首先支持Oracle。这是各类软件中的普遍现象,包括ERP、CRM、采购和供应链。由于Oracle系统已具有相当大的使用规模,具有基于Oracle部署成套应用丰富经验的实施提供商也相当多。

  大部分应用都要涉及某种类型的文本操作,SQL和PL/SQL所固有的对于正则表达式操作的支持可对这些应用提供有力帮助,它彻底改进了在数据库中进行文本搜索和处理的能力。在DB2中,正则表达式支持由PCRE库软件提供,这是一种数据库外部的开放源代码软件。
   ANSI SQL多重集操作可以使数据挖掘应用在数据库内部处理市场分类信息(market basket information)。Oracle现已支持基于嵌套表(Nested Tables)的SQL多重集操作。DB2根本不支持聚集类型!

  Oracle数据库10g有两种新排序方法,一种是大小写不敏感型排序,另一种是音调不敏感型排序。这样便于应用处理例如姓名和地址这样的数据,他们可以使用音调和混合大小写存储。IBM DB2不支持大小写不敏感型操作。

  实行最新Unicode标准后,Oracle字符集ATL32UTF8和AL16UTF16(gb2312和UTF-16)现已支持Unicode 3.2,加4字节补充字符。IBM DB2支持Unicode 3.0,但不支持补充字符。

  大型对象块(LOB)用于存储非结构数据,如视频、音频和文档。Oracle数据库10g可以存储检索最高128 TB的LOB,IBM DB2最多仅能存储2GB LOB。
 
   Oracle数据库10g的SQL Model子句可将查询结果作为多维数组集合,导出精细的相互关系公式。这些公式可用于复杂数字运算应用,如预算和预测,不需要提取数据组成电子数据表,或执行复杂的连接与合并操作。

  对于Microsoft .Net开发人员,Oracle推出了专门用于.Net的高性能Oracle数据供应器ODP.NET (Oracle Data Provider),这一工具符合ADO.Net标准。ODP.Net支持Oracle固有的数据类型,如REF光标和LOBS。DB2只有DB2数据供应器的开发版,仅提供相当于ODBC.Net的一个普通接口。

  Web服务正在渗透到企业计
算的各个层面,从成套电子商务应用(如ERP,CRM)到中间层(如J2EE,.NET),直至数据库基础设施。数据库中结构数据、非结构数据和数据逻辑
的激增,XML正在被越来越多地用作数据交换格式,以及HTTP作为异构环境下普遍采用的传输机制得到事实上的认可,引起人们对数据库Web服务的广泛兴
趣。数据库Web服务是双向的:数据库作为服务供应方,即由外向内调用时,客户机应用可以通过Web服务机制访问数据库;数据库作为服务消费方时,即由内
向外调用时,数据库会话中的SQL查询或应用模块使用外部
Web
服务。Oracle可以帮助您将数据库变为服务供应方。这样,您可以在企业内部网*享数据和元数据,通过SOAP请求访问数据库操作,如触发器。同
样,Oracle也可以帮助您将数据库变为服务消费方访问动态数据。这种功能自Oracle
8i开始推出,Oracle数据库10g对这一功能进一步正规化,在JPublisher中添加了新应用,支持数据库成为Web服务供应方(数据库中配置
SQL查询、SQL DML、Java),并使JPublisher支持数据库成为Web服务消费方。DB2的Version 8也提供Web
服务供应方和消费方支持,但由于DB2未与JavaVM集成,因此必须依靠手工处理静态SOAP信息,或非SOAP程序库。

基于Web的开发工具
   Oracle HTML
DB是专门为Oracle数据库10g开发的,基于浏览器的web开发部署框架。这一工具将易用、高效的个人数据库与具有可用性、可扩展和安全的企业数据
库加以整合。Oracle HTML DB是一种说明性开发工具和开发部署面向数据库web应用的框架。Oracle HTML
DB内置功能提高了应用开发速度,如设计主题、导航控制、模式处理器和灵活的报表。您只需通过 web浏览器,即可快速组装数据库驱动的先进web应用。

  许多组织采用电子数据表和个
人数据库管理信息,因此浪费了大量宝贵时间。这些产品虽然易用,但不能适于在
web环境下部署,也不能逐渐加以扩展支持多用户数据更新。将大量小的工作组级数据库,包括电子数据表整合在Oracle数据库之下,免去了开发人员控制
方面的麻烦,使得Oracle HTML DB在以下方面表现出明显的优势:
1. 当前电子数据表和个人数据库中锁定的数据部 署在web环境下,可以进行多用户并行更新,从而 提高了存取能力。
2. 电子数据表不再以附件形式通过电子邮件传送,合并和清除多个数据拷贝,从而节省时间。
3. 将分散的信息合并到安全、可靠、可扩展的Oracle数据库中,提高了安全性和可用性。
5. 构建您从未有过的应用,即使是“快速而又随性”(quick and dirty)的应用也可以立即为企业用户部署在web环境下。

全球化
   Oracle全球化开发包(GDK)包括成套Java API,为应用开发人员采用Oracle设计的最佳的全球化实践和功能开发全球互联网应用提供了基础框架。

  DB2尚未提供Java全球
化API。不过,IBM可以提供Java
全球化库,称作ICU(Unicode国际组件),这是一种开放源码,可提供GDK的子集功能。与GDK相似之处在于,ICU可以提供低端API,用于语
言分类、数字格式化、补充字符支持等。但与GDK不同的是,这一工具不能提供构建全球互联网应用的高端API,如用户地区检测、预翻译地区名、全球应用配
置文件、语言和字符集检测、自动转移、撤消本地化内容等。

管理您的所有数据
非结构数据

  
结构数据只是组织中关键数据的一部分。电子数据表、字处理文档、视频剪辑、报纸文章、新闻稿和地图等,也仅是可以在*库中集中管理的一小部分非结构对
象。Oracle数据库10g以其现有的强大功能,可以集成的方式管理您的全部数据,关系型数据、电子邮件、文档、多媒体、XML和专用数据。具体产品包
括:
1. interMedia
  a.图像扩展功能,可存储检索图像
b.音频扩展功能,可存储检索音频剪辑
c.视频扩展功能,可存储检索视频剪辑
d.位置扩展功能,可检索与坐标相关的数据
2. Text
a.文本扩展功能,可检索文档及文档摘要
3. 本机XML存储
4. 空间数据选项
a.提供数据与坐标的链接
b.地理信息系统(GIS)伙伴供应商的典型支持

IBM一直采用“扩展器”作为处
理这类数据的方法。IBM将所有媒体和元数据存储在关系数据相关的各个表中,因此处理的工作量大,媒体访问的I/O开销大,管理费用高。Oracle数据
库10g采用先进的技术可以对元数据进行自动化处理。而IBM
DB2若想使DB2表空间接收元数据,则需要DBA手工处理各个流程。由于IBM采用触发器,每创建一个媒体对象需触发一次触发器来更新含有元数据对象和
元数据的管理表,大大增加了处理成本。如果采用媒体数据类型的Java对象方法,IBM不能提供用于媒体访问的Java类库,也不能为JSP应用开发人员
提供JSP
Tag库。客户必须自己编码。大量需要开发维护的代码使得应用成本大大高于开发维护费用。

XML
   Oracle XML
DB是Oracle9i数据库第二版推出的一种高性能的XML存储检索技术。这一技术在Oracle服务器中全面结合W3CXML数据模型,为导航和查询
XML提供了新的标准访问方法。采用XML DB,您可以同时利用关系数据库技术和XML技术。XML
DB还在数据库中添加了XML库。Oracle数据库10g Intermedia 现已与XML DB
集成,可以使图像等含有媒体的XML文档具有这些图像分析过的元数据,从而可以标注索引,便于图像和母XML文件的定位。

  IBM在DB2 v8.1
XML扩展器中提供数据库XML技术。扩展器是一种松散耦合挂件,无法与Oracle固有XML支持相比。IBM在其信息集成器
8.1(Information
Integrator)中采用了XML封装数据集成技术。与Oracle不同,DB2必须采用单独软件XML扩展器(XML
Extender)和文本扩展器(Text
Extender)经“扩展”后支持XML。这三个产品是由全球不同组织分别开发的,彼此之间往往互不协调。这种系统的用户不仅受到产品集成度差带来的管
理方面的问题,而且松散耦合给功能和性能也造成不利的影响。

  Oracle的XML DB技术优于IBM的方法,具体表现在:
1. 本身支持XML数据模型及其他XML标准
2. 集成SQL、XML、Java和Text处理,不需要添加 部件,提高了扩展能力
3. 先进丰富的编程存取功能
4. 成套XML产品,包括支持面向内容XML的XML 库

Butler
Group在对主要XML数据管理技术进行比较后的报告中总结道:“IBM DB2令人感到失望…总体来看,这一系统缺乏Oracle
9i那样丰富的支持功能…在编写本报告之前,我们征求了专业人士的意见,大家一致期待着如何给这两套系统打分…一种可怕的意见认为,可以将Oracle和
IBM并列第一。这不仅是不可能的,而且两个系统几乎不可同日而语…”

结论
   Oracle 数据库10g是第一个专门为企业网格计算设计的数据库。Oracle 数据库10g在系统性能、扩展能力、资源利用率、管理性、可用性及满足新兴技术发展方面继续保持业内领先水平。Oracle使网格技术真正成为企业的解决方案。

  Oracle数据库以其25年的技术优势和专业经验为基础,始终是市场上首选的数据库产品。采用Oracle数据库不仅可以立即实现经济效益,而且这种投资也可以保证满足您未来的需求。

系统结构概述

首先,我们需要理解 Oracle 使用的架构,并理解它与 DB2 的不同之处。图 1 展示了 Oracle 的系统结构。将该图与 图 2 进行比较,后者显示了 DB2 的系统结构。在阅读本文的时候,为便于理解,可以参照这两个图。

图 1. Oracle on Linux, UNIX, and Windows Version 10.2 的系统结构
oracle与DB2

图 2. DB2 on Linux, UNIX, and Windows 系统结构
oracle与DB2

oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

实例

在 Oracle 和 DB2 中,实例 的概念是类似的。在这两者之中,实例都是指后台进程与共享内存的组合。两者之间的主要差别在于,在 Oracle 中每个实例只能有一个数据库,而在 DB2 中多个数据库可以共享一个实例。


Oracle 中,由于数据库与实例是一对一的关系,因此用 CREATE DATABASE
命令创建一个数据库的同时便隐式地创建了一个实例。或者,为了在计算机上创建一个 Oracle 实例,也可以使用 Database
Configuration Assistant,或者使用 ORADIM 实用程序,后者是 Oracle 9i 通过 NEW
选项提供的。另外还必须提供某些信息,包括系统标识符(System
Identifier,SID)或一个服务名称、实例密码、最大用户数、启动模式等等。类似地,为了删除实例,可以使用 ORADIM 实用程序加
DELETE 选项。这里需要提供 SID 或服务名称。除非在安装过程中创建一个新的数据库,否则在以 fresh 方式安装 Oracle
的时候,不会创建缺省的实例。

在 DB2 中,当在 Windows 平台上安装了该产品之后,便缺省地创建了一个实例 "DB2"。在 Linux 和 UNIX 中,缺省的实例名称为 "db2inst1"。若要在同一台计算机上创建另一个实例,只需执行命令 de>db2icrt de>。

图 3 展示了缺省的 DB2 实例 “DB2”(在 Windows 中)和从 DB2 Control Center GUI 中用 db2icrt 命令创建的另外两个实例。

图 3. 显示 DB2 实例的 DB2 Control Center GUI
oracle与DB2

若要在命令行接口中引用给定的 DB2 实例,可以使用环境变量 DB2INSTANCE。通过这个变量,可以指定当前活动实例,所有命令将应用到此实例。例如,如果 DB2INSTANCE 被设置为 PROD,然后您执行了命令 de>create database MYDB1de>,
将创建一个与实例 PROD 关联的数据库。如果要在实例 DB2 上创建该数据库,那么必须首先将 DB2INSTANCE 变量的值改为
DB2。这类似于 ORACLE_SID (System Identifier),当用户想要在不同实例之间进行切换时,也是使用
ORACLE_SID。

还有一种标识要使用的实例的简单方法,那就是使用 DB2 Control Center GUI,如 图 3 所示。要在该工具中看到对应于新实例的条目,需要通过右击 Instances 并选择 Add 来将该实例添加到此工具中。要删除 DB2 中的一个实例,可以执行命令 de>db2idrop de>。


之,在 Oracle 中,可以使用 Database Configuration Assistant 来创建、修改、启动、停止和删除实例,而在
DB2 中则可以使用 Control Center GUI 做同样的事情。而且,Oracle 实例与数据库只能是一对一的关系,而在 DB2
中却不是这样。一个 DB2 实例中可以同时存在多个数据库,并且可以并发地使用这些数据库。

oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

数据库


Oracle 中,可以用 CREATE DATABASE 命令手动创建数据库,也可以用 Database Configuration
Assistant 创建数据库。手动创建数据库时,在执行 CREATE DATABASE 命令之前,需要执行一系列的步骤,包括设置 OS
变量,准备参数文件,以及创建密码文件。

元数据信息在 Data Dictionary 中存储和管理,由基本表和相应的视图组成。基本表是在数据库创建过程中自动创建的,而视图则是通过运行 catalog.sql 和 catproc.sql 脚本构造的。

因此,Oracle 数据库可看作包含 3 种类型的文件的一个集合:

  1. 数据文件(Data File):包含实际的数据,数据库的物理实现。(类似于 DB2 中的容器。)
  2. 重做文件(Redo File):相当于 DB2 中的事务日志(Transaction Log)。
  3. 控制文件(Control File):包含用于维护和验证数据库完整性的信息。

在 DB2 中,一个实例可以包含多个数据库,如 图 2 所示。每个数据库都是一个封闭的、真正独立的单元。每个数据库有其自己的编目表空间、临时表空间和用户表空间,这些表空间是在创建数据库时缺省创建的。DB2 包含一个称为系统数据库目录(system database directory) 的二进制文件,其中包含可从 DB2 机器上连接的所有数据库的条目。这个目录保存在实例级。

当创建一个实例时,缺省情况下不会创建数据库,您需要使用 create database 命令显式地创建一个数据库。此外还可以用 Control Center 创建数据库,如 图 4图 5 所示。

图 4. 使用 Control Center GUI 创建 DB2 数据库
oracle与DB2

图 5. 使用 Control Center GUI 创建 DB2 数据库(续)
oracle与DB2

图 5 中,您也可以看看单击 Show Command
时会出现什么情况。所有的 DB2 Control Center GUI 屏幕都会显示实际上在后台执行的 SQL 语句或命令。这些命
令可以保存在一个脚本中,以便在以后执行,或者也可以将它们复制到 Command Line Processor(CLP)或 Command
Center GUI 工具中,在这些工具中执行。这些工具分别相当于 Oracle 的 SQL*Plus 和 iSQL *Plus。

可以使用 'DROP DATABASE' 命令或者在 DB2 Control Center GUI 中删除一个 DB2 数据库。而在 Oracle 中却不是使用这样的命令。数据库的删除是通过删除所有相关数据文件来完成的。

同一个实例中的数据库通常不会相互进行交互。然而,如果应用程序需要与多个数据库交互,那么通过启用联邦(federation) 支持可以满足这一需求。在 参考资料 小节中有一篇关于联邦的文章。

oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

容器、表空间、缓冲池和页

在 Oracle 中,在物理上数据是存储在被称作数据文件(Data File)的文件中的。这类似于 DB2 的容器(container),DB2
的容器也是数据实际存储的地方。每个 Oracle 数据库包含一个名为 SYSTEM 的表空间,这是在创建数据库时由 Oracle
自动创建的。其他用于用户数据、临时数据和索引数据的表空间则需要在创建数据库之后另行创建,并且在使用这些表空间之前,还需要为之指定一个用户。

在 DB2 中,表空间
是逻辑对象,作为逻辑表和物理容器之间的一层。当创建一个表空间时,可以将它与一个特定的缓冲池(数据库缓存)关联起来,并关联到特定的容器。这为性能管
理带来了灵活性。例如,如果有一个 "hot"
表,那么可以在一个单独的表空间中定义它,而这个表空间又与一个独立的缓冲池相关联。这有助于确保此表中的数据连续地缓存在内存中。

在 DB2 中,使用 CREATE DATABASE 命令及其缺省值创建数据库时,同时也会自动创建三个缺省的表空间。表 1 描述了缺省的 DB2 表空间:


表 1. 用缺省值创建数据库时,缺省创建的 DB2 表空间

表空间名称 描述
SYSCATSPACE 包含元数据的编目表空间
TEMPSPACE1 用于执行连接和排序等操作的系统临时表空间。这个表空间的名称可以更改
USERSPACE1 这个表空间是可选的,如果在创建表的时候没有显式地指定表空间,那么可以用这个表空间来存储用户表

在 DB2 中,由于数据库是独立的单元,因此表空间不能跨数据库共享。由于表空间只在一个数据库中是可知的,因此两个不同的数据库可以有具有相同名称的表空间。在图 2 中可以看到这一点,其中数据库 MYDB1 有一个名为 MYTBLS 的表空间,而数据库 MYDB2 也有一个同名的表空间。

DB2
表空间可以分为 SMS(系统管理的表空间)与 DMS(数据库管理的表空间)两类。SMS 表空间由操作系统管理,它们只能是目录。SMS
表空间可根据需要自动增长,因此 SMS 可以提供很好的性能,并且需要的管理也很少。DMS 表空间由 DB2
管理,既可以是文件,也可以是原始设备。这种类型的表空间可以提供最佳性能,但是需要进行一些管理。例如,需要预先指定想要为这个表空间分配多大的空间,
因为这种表空间不能自动增长。

Oracle 的存储模型中没有 SMS 的概念,但是它的数据文件类似于 DB2 DMS 表空间。也就是说,可以通过增加数据文件的大小,或为表空间添加数据文件,或者通过添加一个新的表空间,来增加数据库的大小。

表 2 显示了 Oracle 数据库或表空间与 DB2 数据库或表空间的对应关系。


表 2. Oracle 数据库与 DB2 数据库和表空间的对应关系

Oracle 数据库或表空间 DB2 数据库或表空间
SYSTEM 是存放编目(数据字典)信息的表空间 SYSCATSPACE(编目表空间);和在 Oracle 中一样,仅在数据库级保存该信息
Data Dictionary(包含表和视图形式的元数据),驻留在 SYSTEM 表空间中 系统编目表(由 SYSIBM 模式标识),系统视图(由 SYSCAT 或 SYSSTAT 模式标识),驻留在 SYSCATSPACE 表空间中
SCOTT 数据库 SAMPLE 数据库
TEMP 表空间 System Temporary 表空间(缺省情况下名为 tempspace1)
UNDO 表空间 N/A
USER 表空间 用户表空间。缺省情况下,USERSPACE1 一般是在数据库创建之后才创建的

前面已指出,Oracle 的数据缓冲区概念相当于 DB2 的缓冲池。但是,DB2 允许多个缓冲池存在。在 DB2 中不需要预先定义可创建的缓冲池的数量,缓冲池的名称可以是任意的。

Oracle 中块(block) 的概念与 DB2 中的页最为相似。一个 DB2 页的大小可以为 4k、8k、16k 或 32k。表中的一个行只能放在一个页中,而不能像 Oracle 中那样跨多个页。

oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

对象名称

Oracle 中的对象名称形式如下:

de>[Schema_name.]object_name[@database]de>

在 DB2 中,对象名称也是由两部分组成的结构:

de>Schema_name.object_namede>


在 Oracle 中一样,DB2 模式名称用于在逻辑上组织对象。但是两者之间一个重要差异是,在 DB2 中,模式名称不一定与一个用户 id
相匹配。任何拥有 IMPLICIT_SCHEMA 权限的用户都可以用一个不存在的模式创建对象。例如,假设 “Peter” 具有
IMPLICIT_SCHEMA 权限,他执行以下命令:

de>CREATE TABLE WORLD.TABLEA (lastname char(10))de>

该命令创建表 WORLD.TABLEA,其中 WORLD 是新创建的模式。如果 Peter 没有显式地指定模式,那么该命令就会创建表 PETER.TABLEA,因为缺省情况下是使用连接 ID。

在 DB2 中,在发出与数据库相关的命令之前,总是要连接到数据库。因此,在这种架构下,对象名称不需要包括数据库名称。

oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

表、视图和索引

在 Oracle 和 DB2 中,表、视图和索引基本上是一样的。

DB2
提供了一个名为 Design Advisor 的实用程序,可以用它来为特定的查询或工作负载推荐索引。Design Advisor 可以从
DB2 Control Center 中调用,也可以从 DB2 CLP 中使用 db2advis 命令来调用。在 DB2
中,索引是直接与表定义绑定的。例如,当使用 DMS 表空间时,可以用下面的语句指定索引存放在哪个表空间:

de>CREATE TABLE mytable (col1 integer, col2 char(10)) in tbls1 index in tbls2de>

上面的例子表明,表中的数据将存储在表空间 'tbls1' 中,而索引页将存储在表空间 'tbls2' 中。但在 Oracle 语法中,CREATE INDEX 语句有一个选项来指定索引存放在哪个表空间。

此外,在 DB2 中,索引一旦创建好,便不能修改索引定义中的任何子句。为了进行更改,需要删除索引,然后重新创建索引。

和在 Oracle 中一样,不同数据库中的 DB2 表、视图和索引可以有相同的名称。相同数据库中的表和视图则必须使用不同的名称,但是允许使用与已有的表或视图相同的名称创建索引。

oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

存储过程、触发器和用户定义函数(UDF)


Oracle 环境中,有很多方法来创建和访问存储过程、触发器和函数。PL/SQL 是 SQL
的面向对象(OO)过程扩展,支持数据操纵(DML)、流控制、变量和常量的声明、过程和函数定义以及 OO
数据类型,例如嵌套表和变长数组(varray)。Oracle 还将 JVM 并入到它的引擎中。在 Oracle 数据库中,可以使用 SQLJ
将存储过程、函数和触发器,作为类来创建、存储和执行。Oracle 还支持 Type 1 至 4 的 JDBC 驱动程序。

DB2
存储过程可以用 DB2 预编译器支持的任何语言编写,包括 Java、C、C++、REXX、Fortran 和 COBOL。但是,我们推荐您使用
SQL Procedural Language(SQL PL),这种语言非常类似于 Oracle 的 PL/SQL。在开发 SQL PL
存储过程时,需要一个 C 编译器,因为这种存储过程首先要转换成 C。存储过程的 C 实现可以提供性能优势,因为代码只需编译一次(在
unfenced 模式下性能优点尤其明显)。但是,在开发这种存储过程时,开发系统上需要一个额外的 C 编译器。在 DB2
将来的版本中,有望出现不需 C 编译器支持的 SQL PL 存储过程。DB2 存储过程开发还利用 Type 1 至 4 的 JDBC
驱动程序来支持 SQLJ 和 Java。

触发器和函数的开发可以使用内联 SQL/PL,这种方法不需要 C 编译器。这种方法支持 SQL PL 语句的一个子集。另外还可以使用 DB2 Development Center Tool 来简化 DB2 存储过程和用户定义函数的创建、构建、调试和部署。

oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

配置文件


统上,Oracle 将所有与会话和系统相关的参数存储在一个文本文件中,这种文件通常被称做
initSID.ora。但是,由于这种文本文件不具有持久性,从 Oracle 9i 开始,Oracle 引入了 Server
Parameter
File(SPFILE),这是一种存储在服务器上的二进制参数文件。它在实例停止之后到启动之前这个过程中是持久存在的。不过,当 SPFILE
不可用的时候,仍然使用 initSID.ora 文件。引入 SPFILE 之前,任何对参数有影响的 ALTER SYSTEM 和 ALTER
SESSION 命令都只能在实例或会话活动期间持久。每当数据库实例需要回弹(rebound)时,DBA 都必须手动修改 initSID.ora
文本文件。对于侦听器,网络访问配置通常存储在 listener.ora 中;对于客户机访问,网络访问配置通常存储在 tnsnames.ora
中。

在 DB2 中,配置参数也是存储在实例级和数据库级,在实例级是数据库管理器(database manager) 配置文件,在数据库级是数据库配置文件。这些参数大多数都可以动态地更改,也就是说,不需要为了使对参数值的更改生效而停止并重启实例或者重连所有连接。

如果想在 CLP 中手动更改特定的数据库管理器配置参数,可以使用命令 de>UPDATE DBM CFG USING de>。

如果想在 CLP 中手动更改特定的数据库参数,可以使用命令 de>UPDATE DB CFG FOR USING de>。

这两个命令分别相当于 Oracle 的 ALTER SYSTEM 和 ALTER SESSION。或者,也可以使用 Control Center 查看和修改这些参数的值。如果右键单击一个给定的实例,并选择 Configure Parameters,那么可以看到 图 6 中显示的窗口。

图 6. DB2 Database Manager 配置参数(实例级)
oracle与DB2

在数据库级,右击一个给定的数据库,并选择 Configure Parameters,则可以看到 图 7 中显示的窗口。

图 7. 数据库配置参数(数据库级)
oracle与DB2

DB2 提供了很多用于配置系统的参数。但是,如果想通过一种容易的方法自动配置系统,那么可以使用 de>autoconfigurede> 命令(或者 Configuration Advisor GUI),它会根据您提供的一些信息将数据库管理器配置参数和数据库配置参数设置成最佳值。图 8 显示了 Configuration Advisor。

图 8. DB2 Configuration Advisor
oracle与DB2

除了配置文件外,DB2 通常还为与平台相关的配置使用 DB2 注册表变量。注意,DB2 注册表变量与 Windows 注册表没有任何关系。可以使用命令 db2set 查看和更改这些变量。

连接(网络访问)信息存储在 System 数据库目录、本地数据库目录和节点目录中。这些都是二进制文件,只能用 CATALOG 和 UNCATALOG 命令修改。

oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

内存架构和后台进程

接下来,我们来看看内存架构和后台进程,并且比较一下 Oracle 和 DB2 中内存架构和后台进程的不同之处。

图 9. Oracle 内存架构和后台进程
oracle与DB2

Oracle 中的 System Global Area(SGA)是一组共享内存块,用于存储与实例有关的信息。其中包括语句缓存、重做日志缓冲区和数据缓冲区缓存。Program Global Area(PGA)和 User Global Area(UGA)共享内存块,包含用于服务器进程和用户会话的数据和控制信息。

Oracle 支持在同一台计算机上存在多个实例,但不允许共享后台进程。例如,同一台计算机上的三个实例就需要三组后台进程。因此建议在一台计算机上包含一个数据库、一个实例和多个模式。

图 10. DB2 内存架构和后台进程
oracle与DB2

DB2
和 Oracle 都使用共享内存块,但是 DB2 与 Oracle 内存架构的实现方式略有不同。由于 DB2
实例可以包含多个数据库,因此存在两个级别的配置。在前一节已经提到,实例级的配置可以在 DBM CFG 文件中完成,而数据库级的配置则可以在
DB CFG 文件中完成。这两个级别上的配置参数都可以进行调整,以调优内存使用情况。后文将更详细地阐述 DB2 的内存结构和不同的后台进程。

Oracle 是在实例和数据库启动时将内存分配给它们的,而 DB2 则是在不同级别上分配内存。这主要是因为 DB2 实例可以包含多个数据库。DB2 中主要有三种内存结构:

  • 实例共享内存:这是数据库管理器全局共享内存,是在使用 de>db2startde> 命令启动实例时分配给实例的,并且在发出 de>db2stopde> 命令停止实例之前,一直处于已分配状态。
  • 数据库共享内存:这是数据库全局内存,是在激活数据库或者第一次连接到数据库时分配的。分配的内存包括缓冲池、锁列表、数据库堆、实用程序堆、包缓存和编目缓存。
  • 应用程序共享内存:这是在应用程序连接到一个数据库时分配的内存,由处理连接到数据库的客户机所请求的工作的代理使用。每个连接到数据库的应用程序都会被分配内存;因此,对会影响应用程序共享内存的参数的正确配置就非常重要。

在 DB2 for Windows 中,服务器活动是以线程的形式进行的,而在 Linux 和 UNIX 环境中,这些活动是以后台进程的形式来实现的。DB2 有以下几种级别的进程:

  • 实例级:这些进程是在实例启动时初始化的:
    1. DB2 Daemon Spawner(db2gds):全局守护处理程序,每个实例都对应一个这样的进程(仅在 UNIX 中)
    2. DB2 System Controller(db2sysc):DB2 主进程。
    3. DB2 Watchdog(db2wdog):所有其他进程的父进程。
    4. DB2 Format Log(db2fmtlg):类似于 Oracle 中的 ARCn 进程,为日志路径中的日志文件预先分配空间。
  • 数据库级:这些进程是在建立到数据库的连接时初始化的:
    1. DB2 Log Reader(db2loggr):类似于 Oracle 的 PMON 进程的一个子集。该进程在回滚、重启恢复和前滚期间读取日志文件。
    2. DB2 Log Writer(db2logw):将日志从日志缓冲区刷新到磁盘上的事务日志文件中。相当于 Oracle 中的 LGWR 进程。
    3. DB2 Page Cleaner(db2pclnr):相当于 Oracle 中的 DBWR 进程,该进程在将页从磁盘上转移到 BP 中之前,清理缓冲池。
    4. DB2 Prefetcher(db2pfchr):将需要用到的页预先从磁盘取出到缓冲池中。
    5. DB2 Deadlock Detector(db2dlock):死锁检测器进程。
  • 应用程序级:每个连接到数据库的应用程序,都具有属于它自己的应用程序级后台进程与之相关联。这些进程有:
    1. DB2 Communication Manager(db2ipccm):进程间通信进程,用于每个本地连接的客户机。
    2. DB2 TCP Manager(db2tcpcm):TCP 通信管理器进程,用于使用 TCP/IP 连接数据库的远程客户机。
    3. DB2 Coordinating Agent(db2agent):代表应用程序处理所有请求的进程。
    4. DB2 Subagent(db2agnta):空闲子代理。
    5. Active Subagent(db2agntp):在启用了 SMP 并行的情况下使用的活动子代理,它使一个任务可以使用多个进程。

要获得对 DB2 进程的完整解释,请参考文章 “DB2 通用数据库进程全接触”。

oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

锁机制

Oracle 中的锁可以是手动的,也可以是自动的。Oracle Lock Manager 可以在行级隐式地锁定表数据,此外也可以使用以下 SQL 语句在事务或会话级覆盖缺省的锁:
de>1. SET TRANSACTION ISOLATION LEVELde>

de>2. LOCK TABLEde>

de>3. SELECT FOR UPDATEde>

Oracle 支持一种称为 Multi-Version Read Consistency 的机制,这是用 undo 段中的 undo 数据实现的。

DB2
实现 ANSI 标准隔离(Isolation)级别,例如未提交读(Uncommitted Read)、游标稳定性(Cursor
stability)、读稳定性(Read stability)和可重复读(Repeatable
Read)。除非使用未提交读隔离级别,否则用户只能看到已提交的数据。行锁是根据隔离级别隐式地获得的。可锁定的数据库对象有表空间、表和行,但是,只
有表和表空间可以显式锁定。可使用 de>LOCK TABLEde> 命令来锁定一个表,而不是使用缺省的行锁定。

与 Oracle 不同,在 DB2 中,锁是存储在内存中的,而不是存储在数据页中。可以使用 LOCKLIST 数据库配置参数来配置锁可用的内存,而 MAXLOCKS 配置参数则定义用于一个特定应用程序的锁的最大内存。

oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

安全性

Oracle 和 DB2 都是具有基本的和高级的安全特性的安全数据库。Oracle 中有 4 种不同的用户身份验证方法:

  • 数据库:数据库执行对用户的识别和身份验证。
  • 外部:操作系统或网络服务执行身份验证。
  • 全局身份验证和授权:由 SSL 对用户进行全局身份验证。
  • 代理身份验证和授权:中间层服务器执行身份验证。

身份验证方法是在使用 de>CREATE USERde> 命令创建用户时指定的。Oracle 中有一些 Data Dictionary 视图,其中包含了关于这些用户的信息。


DB2 中,用户不是存在于数据库中,而是由操作系统来管理。没有数据库登录信息存放在数据库表中。任何操作系统用户都有可能访问
DB2;但是,除非他们被授予了给定的 DB2 权限或特权,否则他们能做的事情不多。通过 Control Center GUI
很容易授予和撤销权限和特权。不过首先需要将可用操作系统用户或组中的一个用户或组添加到 Control Center。


DB2 中没有 “角色(role)” 这个术语。相反,DB2 使用术语 “权限(authority)”,它类似于 Oracle
的数据库角色,DB2 通过权限将特权授予某些组或用户。DB2 支持的权限有:SYSADM、SYSCTRL、SYSMAINT、DBADM 和
LOAD。

不能使用 GRANT SQL 语句授予 SYSADM、SYSCTRL 和 SYSMAINT 权限。这些特殊的权限只能在数据库管理器配置文件中设置。

DB2 还使用术语 “特权(privilege)”,它类似于 Oracle 的系统和模式对象特权。DB2 中有数据库特权(连接、创建表等)和数据库对象特权(模式、表、视图等)。图 11 显示了从 Control Center GUI 获得的 DB2 安全性信息。Change User 窗口中显示的大部分选项卡对应了 DB2 所支持的特权。

图 11. DB2 安全性
oracle与DB2

Oracle 10g 的安全性大体上没有变化,只有部分增强。下面是 Oracle 10g 中的增强的列表:

  • FGA 的 DML 支持 —— 细粒度审计(fine-grained auditing,FGA)的 SQL 支持得到了增强,现在支持查询和 UPDATE、INSERT 和 DELETE 操作这些粒度上的审计。
  • SASL 上的通信 —— 该特性为 Oracle Internet
    Directory(OID)与数据库之间或者两个数据库之间的通信提供了一种安全通道。如果您的企业部署通过密码进行身份验证的用户,那么也就不再需要
    在公共密钥基础设施(PKI)方面投入资金和管理工作。SASL(Simple Authentication and Security
    Layer)通信提供了等价的安全通道。
  • 统一用户模型 —— 目录中定义的单点登录(single sign)用户现在可以使用
    Enterprise User Security 提供的特性。不需要为供应和凭证管理而执行附加的任务。此外,Enterprise User
    Security 的管理组现在可以指派一个所有者,这促进了整体上更有力的安全性。
  • 轻松的数据库注册 —— 该特性消除了对 RDBMS_SERVER_DN 参数的需要,使得企业用户的配置更为轻松。
  • 扩展的、统一的审计跟踪 —— 该特性以标准的、细粒度的审计表的形式,为 RDBMS 审计提供了一致的审计跟踪,改进了安全性管理。事务和 SQL 信息也被添加到审计表中,以便进一步提高所有用户的可问责性(accountability)。
  • Oracle 标签安全性目录集成 —— 现在可以在一个* OID/LDAP 储存库中管理 Oracle Label Security 策略和用户标签授权。这节约了管理成本,同时也消除了多个管理点,从而增加了安全性。

DB2 中的身份验证不仅涉及对用户名和密码进行加密,还允许对客户机与服务器之间传输的数据进行加密。身份验证的位置由数据库管理器配置参数 AUTHENTICATION 的值决定。

下面是用于启用 DB2 的身份验证的有效选项:

  • SERVER_ENCRYPT —— 这个值规定身份验证发生在服务器上。首先加密连接期间指定的用户 id 和密码,然后将它们发送到服务器,在服务器上将它们与服务器端的用户和密码进行比较。如果匹配成功,那么用户就被允许访问数据库。
  • KRB_SERVER_ENCRYPT —— 规定服务器接受 KERBEROS 身份验证或加密的 SERVER 身份验证模式。
  • DATA_ENCRYPT —— 规定服务器允许 SERVER 身份验证,并且对客户机与服务器之间通过网络传输的数据进行加密。
  • DATA_ENCRYPT_CMP —— 规定服务器接受加密的 SERVER 身份验证模式和用户数据的加密。
    这种身份验证类型能与不支持 DATA_ENCRYPT 身份验证类型的下级产品兼容。
  • GSS_SERVER_ENCRYPT —— 规定服务器接受基于 GSS API 的插件身份验证或加密的服务器身份验证模式。

若要更新 AUTHENTICATION 实例参数,例如将它的值设置为 DATA_ENCRYPT,可以使用以下命令:

清单 1. 更新 AUTHENTICATION 实例参数

    UPDATE DBM CFG USING AUTHENTICATION DATA_ENCRYPT
db2stop
db2start

DB2 提供了基于标签的访问控制(Label Based Access Control,LBAC)机制,从而进一步扩展了安全性。
LBAC 特性为控制对各行和各列的读写访问提供了更大的粒度。
DB2 中提供了一种新的安全管理员角色(SECADM),用于操纵 LBAC 对象。

试图访问一个对象的用户必须被授予该对象的安全标签。如果安全标签匹配,则允许访问;如果不匹配,则拒绝访问。
实现 DB2 中的 LBAC 安全性基本上有三个步骤:

  • 创建安全策略。
    安全策略描述用于决定谁可以访问特定数据的凭证。任何一个表只能由一个安全策略来保护,但是不同表可以由不同的安全策略来保护。这是通过使用
    CREATE SECURITY POLICY 语句来实现的。安全策略的所有管理都是通过使用 SQL 语句来完成的。
  • 创建安全标签。
    一共有三种类型的安全标签:
    • 行安全标签。与数据库表中的一个数据行或记录相关联的安全标签。
    • 列安全标签。与数据库表中一个列相关联的安全标签。
    • 用户安全标签。为数据库用户授予的安全标签。

    安全标签由 SECADM 创建,作为策略的一部分。
    创建好一个安全标签之后,可以将其与表中各个列和行相关联,以保护存放在那里的数据。

  • 为用户授予安全标签,使他们可以访问数据
    安全管理员通过为用户授予安全标签来允许他们访问受保护的数据。
    当一个用户试图访问受保护的数据时,DB2 将那个用户的安全标签与保护数据的安全标签进行比较。

除了特权和权限外,数据库安全性还包含其他方面。简单地说,Oracle 与 DB2 之间既有不同点,也有相同点:

用户身份验证和授权

Oracle
在创建用户之后,使用存储在目录中的加密密码。DB2 支持用于用户身份验证的密码,并使用底层的操作用户进行身份验证。Oracle 和 DB2
都支持 LDAP (Oracle Internet Directory 与 IBM Directory Server)。Oracle 和
DB2 都支持单点登录(SSO)。

数据加密

Oracle 支持数据加密,它可以对敏感数据,例如信用卡号和一些高度敏感的商业数据进行加密。DB2 允许列级的数据加密。

网络加密

Oracle 通过它的 Oracle Advanced Security 提供网络加密。Oracle 使用 DES、3DES 和 RC4 业界标准加密。DB2 本身不进行网络加密。但可以使用附带的 Tivoli SecureWay 实现网络加密。

审计跟踪

Oracle 允许审计跟踪用户和对象。还可以使用日志挖掘程序调查和分析有疑问的查询。DB2 也提供了类似的审计设施。在 DB2 中,可以使用 db2audit 实用程序进行审计跟踪。

oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

DB2 9 pureXML 特性

在本节中,我们将 Oracle 对 XML 的支持与 DB2 对 XML 的支持进行比较。
Oracle XML DB 特性随 Oracle 9i Release 2 一起发布,借助该特性,通过定义 XMLTYPE 表和列,将它们存储为 CLOB 或拆分(分解)到关系表中,可以实现对 XML 存储、检索和模式的管理。
Oracle 10g 为管理 XML 文档提供了一些增强。例如,通过映射已有的数据,可以动态地反映模式的更改,而不必重新导入。Oracle 10g 包括一些工具包,例如:

  • XML-SQL Util(XSU) —— 为 PL/SQL 和 Java 提供的接口。
  • XML Developer's kits(XDK) —— 用于受支持的语言,例如 PL/SQL、C++ 和 Java。

Oracle 10g 仍然是一种 支持 XML 的
数据库。它提供的所有接口、API 和包,都是为了减轻 XML 与关系表之间的相互转换和映射所带来的负担、复杂性和维护。支持 XML
的数据库,不管是使用 CLOB 还是分解方法,都不能提供良好的性能。例如,在使用 CLOB 的情况下,XML
文档作为镜像文件存储在数据库中。您可能已经知道,镜像文件的管理是很麻烦的。分解方法在性能方面也不如人意。将一个 XML
文档分解成小块并存储在多个表中之后,当需要将 XML 文档组合成原样时,就不得不使用一个 SQL JOIN 操作。SQL 中的 JOIN
是开销很大的,特别是表的数量较多时这一点尤其明显。保持数字签名的保真度同样也是一个挑战。

另一方面,DB2 9 pureXML 技术则是原生存储 XML 文档,也就是说,在内部以树型格式存储 XML
文档。它还允许同时使用 SQL 和 XML 扩展,即 Xquery 和 Xpath 来访问关系数据和 XML 数据。原生存储 XML
文档是一种更好的方法,IBM 的研究表明,使用该方法在 XML 文档的搜索和检索方面可以取得更好的性能,并且能减少某些程序中代码的行数。

要在数据库中使用 pureXML 特性,在创建数据库时要使用 UNICODE(例如使用编码集 UTF-8)。在创建一个表之前,如果没能创建一个 UNICODE 数据库,则会产生如下所示的错误:

SQL1239N  XML features can only be used in a Unicode database with a single database partition.  SQLSTATE=42997

DB2 与之前版本一样存储关系数据。但是,XML 数据是以分层格式存储的(作为使用 Xquery 数据模型的一棵树)。XML 与关系服务之间是紧密集成的。为了存储 XML 文档,用户需要创建一个表,并指定一个列使用一种新的数据类型,即 XML,如下面的例子所示。

清单 2. 用 XML 数据类型创建表

     create table T (i int, doc xml)

下图展示了这两列的显示效果:

图 12. DB2 存储模型
oracle与DB2

由于 XML 文档是以解析的分层格式存储在 XQuery Data Model (XDM) 中的,因此不需要进行转换或映射。用于存储 XML 文档的格式就是用于处理 XML 文档的格式。这样可以提供更好的性能。

备份、恢复、导入等实用程序对含 XML 列的表的作用与其他表是一样的。可以使用 INSERT 语句或 IMPORT 实用程序(注意:DB2
LOAD 实用程序还不支持 XML)将 XML 数据插入 XML 列。在导入来自第三方的 XML 文档之前,最好根据一个预定义的 XML
模式验证这些文档。
为了注册一个 XML 模式,DBA 需要执行 REGISTER XML SCHEMA 命令,并以 COMPLETE XML SCHEMA 结束,以完成注册过程。

DB2 9 还支持在一个 XML 文档的子集或整个文档上创建索引。在创建索引时,需要指定 XPATH,它将指向被建索引的特定元素/属性。

在 DB2 9 中,有四种方法来访问关系数据和 XML 数据,如 图 13 所示:

  • 纯 SQL(不涉及 XQuery)
  • SQL/XML,也就是说嵌入在 SQL 中的 XQuery
  • XQuery 作为独立的语言(不涉及 SQL)
  • 带嵌入式 SQL 的 Xquery

图 13. 可能的 PureXML 查询
oracle与DB2

表 3 比较了 DB2 9 与 Oracle 10g 的 XML 功能。

表 3. XML 特性比较
XML 功能 Oracle 10g IBM DB2 9 for Linux, Unix and Windows
支持 XML 的存储 不适用
XML 原生存储 ×
大环境的易维护性 ×
高度可伸缩性 ×
将 XML 文档存储为 CLOB √。但是从长远看,鼓励使用 XML 原生存储
分解 √。但是从长远看,鼓励使用 XML 原生存储

要看到更深入的讨论,可以在 developerWorks 上找到更多关于 IBM pureXML 功能的文章,例如
使用 XQuery 查询 DB2 XML 数据
使用 SQL 查询 DB2 XML 数据

oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

表分区

DB2 的表分区(即区域分区)类似于 Oracle 的分区。它基本上允许将一个逻辑表拆分成跨一个或多个表空间的多个物理存储对象。每个对象对应于一个 “分区”,允许每个表空间包含一定范围的、很容易访问的数据。

在 DB2 中,有多种方法对数据进行分区,您可以同时将这些方法应用于相同的数据。为了避免读者感到困惑,下面简单地解释一下提供这种分区的各种不同方法:

  • DATABASE PARTITIONING —— 按照键散列将数据分布在数据库的多个逻辑节点上(DPF)。
  • RANGE/TABLE PARTITIONING(DB2 9 提供) —— 根据键区域将数据划分到一个逻辑数据库分区中的多个物理对象上。
  • MULTI DIMENSIONAL CLUSTERING(MDC) —— 根据多个键值组织表(或一个表中的区域)中的数据。

利用 DB2 9 中新引入的表分区特性,可以根据一个或多个表列中的特定值将表数据划分到不同的表空间。
这些分区可以独立地进行备份和恢复,可以提高某些查询的性能,因为 DB2
优化器知道这些分区的存在,并且可以避免对查询中不需要的分区进行扫描。例如,如果按一年的四个季度对表进行分区,并且查询只需要第 4
季度的数据,那么 DB2 将不解析前三个季度,而是直接找到第 4 个季度并解析之。这被称作分区排除(partition
elimination)。

如前所述,在 DB2 9 中,数据组织的三种方法,即数据库分区(Database Partitioning)、表分区(Table Partitioning)和多维集群(Multi Dimensional Clustering)可同时使用。

下面的例子创建一个 customer 表,其中 l_shipdate >= '01/01/2006' 且
l_shipdate <= '03/31/2006' 的行存储在表空间 ts1 中,l_shipdate >=
'04/01/2006' 且 l_shipdate <= '06/30/2006' 的行存储在表空间 ts2
中,依此类推。更详尽的解释可以参阅 developerWorks 文章 Table partitioning in DB2 9

清单 3. 将一个表按区域分区

     CREATE TABLE customer (l_shipdate, l_name CHAR(30)) 
IN ts1, ts2, ts3, ts4, ts5
PARTITION BY RANGE(l_shipdate)
(STARTING FROM ('01/01/2006')
ENDING AT ('12/31/2006')
EVERY (3 MONTHS))
oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

行压缩特性

Oracle 提供了两种压缩特性:一种是索引级压缩,另一种是表级压缩。如果对这些特性没有适当的规划,就会对性能产生不良影响。

Oracle 从版本 8i 开始就引入了索引压缩。可以压缩的索引有 bitmap、btree 和索引组织的表。索引压缩使用起来很简单。例如,要用压缩特性创建一个索引,可以使用如下代码:

清单 4. 用压缩特性创建索引

     CREATE INDEX ord_customer_ix_demo 
ON orders (customer_id, sales_rep_id)
COMPRESS 1;

对于不是在内部用压缩特性创建的索引,可以通过修改它们将它们转换成压缩索引。下面显示了一个示例,这个示例展示了如何修改索引,以使其变成压缩索引。

清单 5. 用压缩特性修改索引

     alter index ord_customer_ix_demo rebuild compress 

目前,Oracle 没有提供任何自动化的建议者程序来指出哪些索引应该被压缩。大多数通过索引压缩获得的好处,都需要拥有娴熟的 Oracle CBO 知识的资深 DBA 经过适当规划才能获得。

另一方面,表压缩是在 Oracle 9i release 2 中引入的。它可以用于压缩整个表、表分区和具体视图。压缩可应用于所有分区或部分分区。
虽然表压缩也可以用于未分区的表,但是在 OLTP 工作负载中将表压缩应用于未分区的表并不可取,因为插入和更新性能会受到影响。在 Oracle 表压缩中,数据库块中重复的值将被去除,信息将被存储起来,以便在块中重新创建未压缩的数据。

下面的例子展示了如何用压缩特性创建分区表。

清单 6. 用压缩特性创建表

     CREATE TABLE costs_demo (
prod_id NUMBER(6), time_id DATE,
unit_cost NUMBER(10,2), unit_price NUMBER(10,2))
PARTITION BY RANGE (time_id)
(PARTITION costs_old
VALUES LESS THAN (TO_DATE('01-JAN-2003', 'DD-MON-YYYY')) COMPRESS,
PARTITION costs_q1_2003
VALUES LESS THAN (TO_DATE('01-APR-2003', 'DD-MON-YYYY')),
PARTITION costs_q2_2003
VALUES LESS THAN (TO_DATE('01-JUN-2003', 'DD-MON-YYYY')),
PARTITION costs_recent VALUES LESS THAN (MAXVALUE));

为了将一个表转换成压缩表,可以使用 alter table move compress。但是,压缩表不允许添加或删除列。

至于 DB2,在 DB2 9 之前就有一些压缩方法,但是,行压缩是在 DB2 9 中才引入的。行压缩要求创建一个目录,用于存储重复模式或条目以及数字键。压缩算法足够智能,不会压缩那些对节省磁盘空间帮助不大的行。

DB2 的行压缩不像 Oracle 的键压缩,它不需要指定键。

可以通过 CREATE TABLE 或 ALTER TABLE 命令在表级进行压缩。例如:

清单 7. 用 COMPRESSION YES 创建/修改表

     CREATE TABLE Sales COMPRESS YES 
ALTER TABLE Sales COMPRESS YES


为了在 DB2 Control Center 中取得相同的效果,在列定义过程中(表创建向导中的第二步),应确保选中面板底端的复选框 Store table data in a compressed format(如下图所示)。

图 14. DB2 Control Center —— 以压缩格式创建表
oracle与DB2

只有在执行 REORG 的时候才构建表字典,之后便可以压缩表中的数据。在随后的每次 REORG 操作中,表字典随之更新。被压缩的数据同时存放在磁盘上和内存中,DB2 还压缩存储在日志文件中的用户数据,以便减少日志文件大小。

注意,分区表的每个分区可以有不同的压缩字典,在 DPF 中的一个表的每个分区也可以有不同的压缩字典。

除了数据行压缩,DB2 9 提供的其他压缩机制还包括:

  • NULL 值和缺省值压缩(V8 GA):对变长列中的零长度空数据和系统缺省值进行压缩。
  • 多维集群(V8 GA):使用块索引,数千个记录共用一个索引条目,实现索引压缩。
  • 数据库备份压缩(V8 FP4):通过压缩产生较小的备份镜像。
  • XML 解析

oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

自治特性

从 Oracle 9i 到 10g,Oracle 在调优方面作了一些改进。Oracle 将以下方面的调优进行了自动化:

  • Redo Logfile Sizing Advisor —— 该特性就重做日志文件的最佳大小给出建议,以避免因频繁出现的检查点而导致过多的磁盘 I/O。
  • Automatic Checkpoint Tuning —— Oracle 数据库现在可以自调优检查点,以取得良好的恢复速度,同时减少对正常吞吐率的影响。
    这样便不再需要设置任何与检查点相关的参数。
  • Automatic
    Shared Memory Tuning —— Automatic Shared Memory Tuning 通过自调优算法将 System
    Global Area (SGA)
    内存相关参数(缓冲区缓存、共享池)的配置自动化。它简化了数据库的配置,确保可用内存得到最有效的利用,并提高了性能。
  • Transaction Rollback and Recovery Monitoring —— 该特性便于估计回滚一个事务要花多少时间。还可以监控被恢复的事务的进程,并估计事务恢复的平均速度。

Oracle 还提供了一些 advisor,例如 segment advisor 和 undo advisor。segment advisor
根据对象内的空间拆分程度给出是否可以对一个对象执行新的在线压缩操作的建议。而且,这个 advisor
还给出关于段的历史增长趋势的报告,特别是能为容量规划提供有效的信息。
另一方面,Undo Advisor 则帮助管理员在调整 flashback 和非 flashback
中的表空间的大小时作出正确的判断。它为管理员适当地设置 UNDO_RETENTION 提供建议,以避免快照过于陈旧的问题。

DB2 9 引入了一些新的自治增强。例如,DB2 9 引入一种新的自调优内存特性(使用
self_tuning_mem
数据库配置参数),该特性自动地设置一些内存配置参数的值,从而简化了内存配置任务。自动调优器充当调度器的角色,它算出可用的内存资源,动态地将它们分
发给数据库的一些内存消费者。

除了自调优内存,DB2 9 还引入了下面提到的其他一些增强。这份列表并不完整,但是其中列出的都是重要的增强。

自动配置

DB2
8 引入了 Configuration Advisor,它可以检测系统和数据库的特征 ——
CPU、内存、数据库大小、表的数量等,并为配置参数给出建议的值。DB2 9 则更进一步 —— 它在数据库创建之后自动运行
configuration advisor,并缺省地做出一些基本的调优决定。例如,它配置缺省缓冲池的大小、I/O 清理程序和 I/O
服务器等。 这种初始的自动调优意味着,同使用之前缺省的数据库配置参数值创建的数据库相比,现在的数据库将拥有更好的性能,并且有更好的即开即用性。

自动数据统计信息收集

缺省情况下,DB2 9 还允许对某些进行中的任务进行自动化。通过该特性,DB2 确定需要哪些统计信息,以及哪些统计信息需要更新,然后自动在后台执行 RUNSTATS 实用程序。

自动存储管理

DB2 9 扩展了在 DB2 V8.2.2 中首次引入的自动存储特性。自动存储自动增长跨磁盘和文件系统的数据库的大小,由于它是自动增长数据库大小的,因此 DBA 不需要管理存储容器。当在 DB2 9 中创建数据库时,自动存储管理特性是缺省地启用的。

自动表和索引重组增强

自动重组是从 8.2 版开始引入的。但是,DB9 对其加以增强,从而允许做以下事情:

  • 指定具有适当页宽的系统临时表空间,用于离线表重组。
  • 可限制被重组的表的大小。
  • 指定自动索引重组应该在线运行,并且在在线维护窗口中运行。
  • 指定在重组期间是保留还是重新构建压缩目录。

oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

工具

我们来看看不同领域的一些工具,例如数据库创建和维护、网络、管理 GUI、性能调优、数据移动和备份恢复工具。图 15 显示了这些 DB2 9 GUI 工具。


图 15. DB2 9 GUI 工具
oracle与DB2

让我们看看类似的任务在 Oracle 和 DB2 9 中分别是怎样执行的。

数据库创建和维护

Oracle
提供了 Database Configuration Assistant(dbca)作为创建数据库的 GUI
工具。对于数据库维护,Oracle 提供了 Oracle Enterprise Manager。DB2 数据库则可以通过 DB2
Control Center 创建和维护。

网络

Oracle
提供了 Network Configuration Assistant(netca)来进行网络配置。或者,也可以使用 Oracle
Network Manager 来配置服务名、侦听器、配置文件和 Oracle 名称服务器。DB2 则使用 CATALOG
命令来编目节点和数据库。此外还可以使用 DB2 命令行或 DB2 Configuration Assistant GUI 进行编目。

管理

Oracle
Enterprise Manager 提供了针对管理员日常任务的广泛管理功能。DB2 Control Center 也提供了和 Oracle
Enterprise Manager 类似的功能。除了 DB2 Control Center 外,还可以使用 DB2 命令行处理器来发出
DDL 和 DML 语句。该实用程序类似于 Oracle 的 SQLPLUS 实用程序。图 16 显示了 DB2 命令行处理器。


图 16. DB2 命令行处理器
oracle与DB2

还可以在 Command Center 中发出命令,如 图 17 所示。


图 17. Command Center GUI(DB2 命令行处理器的 GUI 版本)
oracle与DB2

性能调优

Oracle
Enterprise Manager 附带有 Change Management Pack、Tuning Pack 和 Diagnostic
Pack。DB2 则提供了 Event Analyzer、Health Center、Indoubt Transaction Manager
和 Memory Visualizer 作为性能调优任务的 GUI 工具。

数据移动

Oracle
提供了 SQL Loader(sqlldr)用于以定界文本格式装载数据。Import(imp)和
export(exp)可用于执行逻辑导入和导出。DB2 提供了类似的导入、导出和装载实用程序。对于跨平台的数据移动,DB2 提供了
db2move 实用程序。

备份和恢复

Oracle 提供了 Recovery Manager 作为热备份的选项。在 DB2 中,可以使用 backup 命令或 DB2 Control Center 备份数据库。

Oracle 10g Enteprise Manager 附带了新的性能概要表。增强的 Oracle Enterprise Manager HTML 界面为所有与数据库性能相关的统计信息提供了一个集中的访问点,为全面的监控和诊断提供了方便。

除了随 DB2 UDB version 8 发布的界面外,DB2 9 还引入了一种全新的免费应用程序开发工具,这个工具叫做 DB2
Developer Workbench(DWB),它是基于 Eclipse 框架的。这个工具可以单独下载,也可通过光盘获得,它替代了 DB2
8 的 Development Center。
DWB 是用于创建、编辑、调试、部署和测试 DB2 存储过程和用户定义函数的一站式中心。此外,还可以使用 DWB 来开发 SQLJ
应用程序,以及创建、编辑和运行 SQL 语句和 XML 查询。

DWB 有一些用于开发 DB2 业务对象的视图,例如:

  • Database Explorer 视图 —— 显示数据库中有什么对象(表、存储过程、用户定义函数、依赖关系、远程服务器等),并允许在这些对象上执行动作。
  • Data Project Explorer 视图 —— 在该视图中,可以通过简单的操作,例如拖放、复制粘贴、向导、上下文敏感的完成选项等,进行过程、用户定义函数和 SQL 语句的开发。
  • Data Output 视图 —— 在该视图中可以看到对数据库的数据开发的报告。

除了 DB2 8 的 Development Center 的功能外,新的 Developer Workbench 还包括对迁移报告、比较例程、XML 函数和使用 XQuery Builder 构建 XQuery 查询等等的支持。
现在可以从网站下载DB2 Developer Workbench

要了解关于 DB2 Developer Workbench 的更详细的信息,请阅读 developerWorks 中的这篇 教程
要得到更详尽的示例和特性,请参考 developerWorks 中的文章 DB2 9 入门: 应用程序开发方面的增强

图 18 展示了如何使用 DWB 创建存储过程:

图 18. DB2 Developer WorkBench
oracle与DB2

oracle与DB2
oracle与DB2
oracle与DB2
oracle与DB2 回页首

结束语


本文中,我们借助您当前已有的关于 Oracle 10g Release 2 的知识,对 DB2 9 for Linux, UNIX and
Windows 进行了介绍。我们简要地描述了 DB2 9 架构、后台进程、内存模型、安全性、工具等方面。Oracle 与 DB2 9
之间有很多类似之处,我们也指出了它们之间的一些不同之处,以便您能借助已有的知识,在 DB2 9 中获得成功。

表 3 总结了我们讨论过的 Oracle 与 DB2 9 之间的相同点与不同点。



表 3 —— Oracle 与 DB2 9 概念总结

Oracle DB2 9 注解
实例 实例 一个 DB2 实例可以包含多个数据库
数据库 数据库  
initSID.ora 或 SPFILE DBM CFG 和 DB CFG DB2 使用两个级别的配置:Database Manager Configuration(DBM CFG)(实例级)和 Database Configuration(DB CFG)(数据库级)。与 Oracle 一样,很多配置参数可以动态更改
表空间 表空间 DB2 支持 SMS 和 DMS 这两类表空间。DMS 表空间与 Oracle 的表空间类似
数据块 DB2 支持以下几种页大小:4k、8k、16k 和 32k。一个行必须能够装入其中一种数据页内。它不能像在 Oracle 中那样跨多个页
盘区 盘区  
数据文件 DMS 表空间容器 用于 DMS 表空间的容器可以是原始设备,也可以是文件
重做日志文件 事务日志文件  
数据缓冲区 缓冲池 DB2 没有一组预定义的缓冲池,但是可以根据需要创建足够多的缓冲池。在创建具有给定页大小的表空间时,必须预先存在一个具有给定页宽的缓冲池
SGA 数据库管理器共享内存和数据库共享内存  
数据字典 编目  
库缓存 包缓存  
大型池 实用程序堆  
数据字典缓存 编目缓存  
SYSTEM 表空间 SYSCATSPACE 表空间  
 
上一篇:java enum类


下一篇:【splunk】启动停止