概述 10g(Oracle Database 10g)是第一个专门为企业网格计算设计的数据库。Oracle Database 10g降低了数据管理成本,同时可以提供最优质的服务,能够使IT迅速满足业务需求的变化并最大限度降低风险。系统易于部署和管理,这一点同样具有十分重 要的意义。
通过不断推出先进的创新技术,Oracle在竞争中始终保持领先地位。Oracle Database 10g的推出,进一步拉大了用于, 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. 建立唯一索引,而不需要使用关键字。
?和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或API访问。数据挖掘选项可通过Java API访问。
分区 分区可以将大型数据库结构(表、索引等)分解为比较小的,更加易于管理的结构单位,同时,可以提高查询的性能和资源利用率。
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 (Oracle Data Provider),这一工具符合ADO标准。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 的不同之处。 展示了 Oracle 的系统结构。将该图与 进行比较,后者显示了 DB2 的系统结构。在阅读本文的时候,为便于理解,可以参照这两个图。
图 1. Oracle on Linux, UNIX, and Windows Version 10.2 的系统结构 图 2. DB2 on Linux, UNIX, and Windows 系统结构 |
实例
在 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>。
展示了缺省的 DB2 实例 “DB2”(在 Windows 中)和从 DB2 Control Center GUI 中用 db2icrt 命令创建的另外两个实例。
图 3. 显示 DB2 实例的 DB2 Control Center GUI若要在命令行接口中引用给定的 DB2 实例,可以使用环境变量 DB2INSTANCE。通过这个变量,可以指定当前活动实例,所有命令将应用到此实例。例如,如果 DB2INSTANCE 被设置为 PROD,然后您执行了命令 de>create database MYDB1de>, 将创建一个与实例 PROD 关联的数据库。如果要在实例 DB2 上创建该数据库,那么必须首先将 DB2INSTANCE 变量的值改为 DB2。这类似于 ORACLE_SID (System Identifier),当用户想要在不同实例之间进行切换时,也是使用 ORACLE_SID。
还有一种标识要使用的实例的简单方法,那就是使用 DB2 Control Center GUI,如 所示。要在该工具中看到对应于新实例的条目,需要通过右击 Instances 并选择 Add 来将该实例添加到此工具中。要删除 DB2 中的一个实例,可以执行命令 de>db2idrop de>。
总 之,在 Oracle 中,可以使用 Database Configuration Assistant 来创建、修改、启动、停止和删除实例,而在 DB2 中则可以使用 Control Center GUI 做同样的事情。而且,Oracle 实例与数据库只能是一对一的关系,而在 DB2 中却不是这样。一个 DB2 实例中可以同时存在多个数据库,并且可以并发地使用这些数据库。
|
数据库
在 Oracle 中,可以用 CREATE DATABASE 命令手动创建数据库,也可以用 Database Configuration Assistant 创建数据库。手动创建数据库时,在执行 CREATE DATABASE 命令之前,需要执行一系列的步骤,包括设置 OS 变量,准备参数文件,以及创建密码文件。
元数据信息在 Data Dictionary 中存储和管理,由基本表和相应的视图组成。基本表是在数据库创建过程中自动创建的,而视图则是通过运行 catalog.sql 和 catproc.sql 脚本构造的。
因此,Oracle 数据库可看作包含 3 种类型的文件的一个集合:
- 数据文件(Data File):包含实际的数据,数据库的物理实现。(类似于 DB2 中的容器。)
- 重做文件(Redo File):相当于 DB2 中的事务日志(Transaction Log)。
- 控制文件(Control File):包含用于维护和验证数据库完整性的信息。
在 DB2 中,一个实例可以包含多个数据库,如 所示。每个数据库都是一个封闭的、真正独立的单元。每个数据库有其自己的编目表空间、临时表空间和用户表空间,这些表空间是在创建数据库时缺省创建的。DB2 包含一个称为系统数据库目录(system database directory) 的二进制文件,其中包含可从 DB2 机器上连接的所有数据库的条目。这个目录保存在实例级。
当创建一个实例时,缺省情况下不会创建数据库,您需要使用 create database 命令显式地创建一个数据库。此外还可以用 Control Center 创建数据库,如 和 所示。
图 4. 使用 Control Center GUI 创建 DB2 数据库 图 5. 使用 Control Center GUI 创建 DB2 数据库(续)在 中,您也可以看看单击 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 中,在物理上数据是存储在被称作数据文件(Data File)的文件中的。这类似于 DB2 的容器(container),DB2 的容器也是数据实际存储的地方。每个 Oracle 数据库包含一个名为 SYSTEM 的表空间,这是在创建数据库时由 Oracle 自动创建的。其他用于用户数据、临时数据和索引数据的表空间则需要在创建数据库之后另行创建,并且在使用这些表空间之前,还需要为之指定一个用户。
在 DB2 中,表空间 是逻辑对象,作为逻辑表和物理容器之间的一层。当创建一个表空间时,可以将它与一个特定的缓冲池(数据库缓存)关联起来,并关联到特定的容器。这为性能管 理带来了灵活性。例如,如果有一个 "hot" 表,那么可以在一个单独的表空间中定义它,而这个表空间又与一个独立的缓冲池相关联。这有助于确保此表中的数据连续地缓存在内存中。
在 DB2 中,使用 CREATE DATABASE 命令及其缺省值创建数据库时,同时也会自动创建三个缺省的表空间。 描述了缺省的 DB2 表空间:
表 1. 用缺省值创建数据库时,缺省创建的 DB2 表空间表空间名称 | 描述 |
SYSCATSPACE | 包含元数据的编目表空间 |
TEMPSPACE1 | 用于执行连接和排序等操作的系统临时表空间。这个表空间的名称可以更改 |
USERSPACE1 | 这个表空间是可选的,如果在创建表的时候没有显式地指定表空间,那么可以用这个表空间来存储用户表 |
在 DB2 中,由于数据库是独立的单元,因此表空间不能跨数据库共享。由于表空间只在一个数据库中是可知的,因此两个不同的数据库可以有具有相同名称的表空间。在 中可以看到这一点,其中数据库 MYDB1 有一个名为 MYTBLS 的表空间,而数据库 MYDB2 也有一个同名的表空间。
DB2 表空间可以分为 SMS(系统管理的表空间)与 DMS(数据库管理的表空间)两类。SMS 表空间由操作系统管理,它们只能是目录。SMS 表空间可根据需要自动增长,因此 SMS 可以提供很好的性能,并且需要的管理也很少。DMS 表空间由 DB2 管理,既可以是文件,也可以是原始设备。这种类型的表空间可以提供最佳性能,但是需要进行一些管理。例如,需要预先指定想要为这个表空间分配多大的空间, 因为这种表空间不能自动增长。
Oracle 的存储模型中没有 SMS 的概念,但是它的数据文件类似于 DB2 DMS 表空间。也就是说,可以通过增加数据文件的大小,或为表空间添加数据文件,或者通过添加一个新的表空间,来增加数据库的大小。
显示了 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 中的对象名称形式如下:
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 中,表、视图和索引基本上是一样的。
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 表、视图和索引可以有相同的名称。相同数据库中的表和视图则必须使用不同的名称,但是允许使用与已有的表或视图相同的名称创建索引。
|
存储过程、触发器和用户定义函数(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 将所有与会话和系统相关的参数存储在一个文本文件中,这种文件通常被称做 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. DB2 Database Manager 配置参数(实例级)在数据库级,右击一个给定的数据库,并选择 Configure Parameters,则可以看到 中显示的窗口。
图 7. 数据库配置参数(数据库级)DB2 提供了很多用于配置系统的参数。但是,如果想通过一种容易的方法自动配置系统,那么可以使用 de>autoconfigurede> 命令(或者 Configuration Advisor GUI),它会根据您提供的一些信息将数据库管理器配置参数和数据库配置参数设置成最佳值。 显示了 Configuration Advisor。
图 8. DB2 Configuration Advisor除了配置文件外,DB2 通常还为与平台相关的配置使用 DB2 注册表变量。注意,DB2 注册表变量与 Windows 注册表没有任何关系。可以使用命令 db2set 查看和更改这些变量。
连接(网络访问)信息存储在 System 数据库目录、本地数据库目录和节点目录中。这些都是二进制文件,只能用 CATALOG 和 UNCATALOG 命令修改。
|
内存架构和后台进程
接下来,我们来看看内存架构和后台进程,并且比较一下 Oracle 和 DB2 中内存架构和后台进程的不同之处。
图 9. Oracle 内存架构和后台进程Oracle 中的 System Global Area(SGA)是一组共享内存块,用于存储与实例有关的信息。其中包括语句缓存、重做日志缓冲区和数据缓冲区缓存。Program Global Area(PGA)和 User Global Area(UGA)共享内存块,包含用于服务器进程和用户会话的数据和控制信息。
Oracle 支持在同一台计算机上存在多个实例,但不允许共享后台进程。例如,同一台计算机上的三个实例就需要三组后台进程。因此建议在一台计算机上包含一个数据库、一个实例和多个模式。
图 10. 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 有以下几种级别的进程:
- 实例级:这些进程是在实例启动时初始化的:
- DB2 Daemon Spawner(db2gds):全局守护处理程序,每个实例都对应一个这样的进程(仅在 UNIX 中)
- DB2 System Controller(db2sysc):DB2 主进程。
- DB2 Watchdog(db2wdog):所有其他进程的父进程。
- DB2 Format Log(db2fmtlg):类似于 Oracle 中的 ARCn 进程,为日志路径中的日志文件预先分配空间。
- 数据库级:这些进程是在建立到数据库的连接时初始化的:
- DB2 Log Reader(db2loggr):类似于 Oracle 的 PMON 进程的一个子集。该进程在回滚、重启恢复和前滚期间读取日志文件。
- DB2 Log Writer(db2logw):将日志从日志缓冲区刷新到磁盘上的事务日志文件中。相当于 Oracle 中的 LGWR 进程。
- DB2 Page Cleaner(db2pclnr):相当于 Oracle 中的 DBWR 进程,该进程在将页从磁盘上转移到 BP 中之前,清理缓冲池。
- DB2 Prefetcher(db2pfchr):将需要用到的页预先从磁盘取出到缓冲池中。
- DB2 Deadlock Detector(db2dlock):死锁检测器进程。
- 应用程序级:每个连接到数据库的应用程序,都具有属于它自己的应用程序级后台进程与之相关联。这些进程有:
- DB2 Communication Manager(db2ipccm):进程间通信进程,用于每个本地连接的客户机。
- DB2 TCP Manager(db2tcpcm):TCP 通信管理器进程,用于使用 TCP/IP 连接数据库的远程客户机。
- DB2 Coordinating Agent(db2agent):代表应用程序处理所有请求的进程。
- DB2 Subagent(db2agnta):空闲子代理。
- Active Subagent(db2agntp):在启用了 SMP 并行的情况下使用的活动子代理,它使一个任务可以使用多个进程。
要获得对 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 中有 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 中有数据库特权(连接、创建表等)和数据库对象特权(模式、表、视图等)。 显示了从 Control Center GUI 获得的 DB2 安全性信息。Change User 窗口中显示的大部分选项卡对应了 DB2 所支持的特权。
图 11. 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 语句来完成的。
- 创建安全标签。 一共有三种类型的安全标签:
- 行安全标签。与数据库表中的一个数据行或记录相关联的安全标签。
- 列安全标签。与数据库表中一个列相关联的安全标签。
- 用户安全标签。为数据库用户授予的安全标签。
- 为用户授予安全标签,使他们可以访问数据。 安全管理员通过为用户授予安全标签来允许他们访问受保护的数据。 当一个用户试图访问受保护的数据时,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 实用程序进行审计跟踪。
|
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 仍然是一种 数据库。它提供的所有接口、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 存储模型由于 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 数据,如 所示:
- 纯 SQL(不涉及 XQuery)
- SQL/XML,也就是说嵌入在 SQL 中的 XQuery
- XQuery 作为独立的语言(不涉及 SQL)
- 带嵌入式 SQL 的 Xquery
表 3 比较了 DB2 9 与 Oracle 10g 的 XML 功能。
XML 功能 | Oracle 10g | IBM DB2 9 for Linux, Unix and Windows |
---|---|---|
支持 XML 的存储 | √ | 不适用 |
XML 原生存储 | × | √ |
大环境的易维护性 | × | √ |
高度可伸缩性 | × | √ |
将 XML 文档存储为 CLOB | √ | √。但是从长远看,鼓励使用 XML 原生存储 |
分解 | √ | √。但是从长远看,鼓励使用 XML 原生存储 |
要看到更深入的讨论,可以在 developerWorks 上找到更多关于 IBM pureXML 功能的文章,例如 和 。
|
表分区
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 文章 。
清单 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 提供了两种压缩特性:一种是索引级压缩,另一种是表级压缩。如果对这些特性没有适当的规划,就会对性能产生不良影响。
Oracle 从版本 8i 开始就引入了索引压缩。可以压缩的索引有 bitmap、btree 和索引组织的表。索引压缩使用起来很简单。例如,要用压缩特性创建一个索引,可以使用如下代码:
清单 4. 用压缩特性创建索引 CREATE INDEX ord_customer_ix_demo ON orders (customer_id, sales_rep_id) COMPRESS 1; |
alter index ord_customer_ix_demo rebuild compress |
另一方面,表压缩是在 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)); |
至于 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 —— 以压缩格式创建表只有在执行 REORG 的时候才构建表字典,之后便可以压缩表中的数据。在随后的每次 REORG 操作中,表字典随之更新。被压缩的数据同时存放在磁盘上和内存中,DB2 还压缩存储在日志文件中的用户数据,以便减少日志文件大小。
注意,分区表的每个分区可以有不同的压缩字典,在 DPF 中的一个表的每个分区也可以有不同的压缩字典。
除了数据行压缩,DB2 9 提供的其他压缩机制还包括:
- NULL 值和缺省值压缩(V8 GA):对变长列中的零长度空数据和系统缺省值进行压缩。
- 多维集群(V8 GA):使用块索引,数千个记录共用一个索引条目,实现索引压缩。
- 数据库备份压缩(V8 FP4):通过压缩产生较小的备份镜像。
- XML 解析
|
自治特性
从 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 对其加以增强,从而允许做以下事情:
- 指定具有适当页宽的系统临时表空间,用于离线表重组。
- 可限制被重组的表的大小。
- 指定自动索引重组应该在线运行,并且在在线维护窗口中运行。
- 指定在重组期间是保留还是重新构建压缩目录。
|
工具
我们来看看不同领域的一些工具,例如数据库创建和维护、网络、管理 GUI、性能调优、数据移动和备份恢复工具。 显示了这些 DB2 9 GUI 工具。
图 15. DB2 9 GUI 工具让我们看看类似的任务在 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 实用程序。 显示了 DB2 命令行处理器。
图 16. DB2 命令行处理器还可以在 Command Center 中发出命令,如 所示。
图 17. Command Center GUI(DB2 命令行处理器的 GUI 版本)性能调优
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 的更详细的信息,请阅读 developerWorks 中的这篇 。 要得到更详尽的示例和特性,请参考 developerWorks 中的文章 。
图 18 展示了如何使用 DWB 创建存储过程:
图 18. DB2 Developer WorkBench |
结束语
在 本文中,我们借助您当前已有的关于 Oracle 10g Release 2 的知识,对 DB2 9 for Linux, UNIX and Windows 进行了介绍。我们简要地描述了 DB2 9 架构、后台进程、内存模型、安全性、工具等方面。Oracle 与 DB2 9 之间有很多类似之处,我们也指出了它们之间的一些不同之处,以便您能借助已有的知识,在 DB2 9 中获得成功。
总结了我们讨论过的 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 表空间 |