大家知道每个DBMS的物理安装就是一个实例。然而,各自处理数据库的方式是明显的不同。
两个DBMS都把实例定义为一组进程,然而,DB2 LUW 允许一个或多个活动的数据库,Oracle每个实例仅仅只有一个数据库,在Oracle中,通常实例和数据库是可以互换的概念。
实例定义的差异:
ORACLE ----------------------- 一个数据字典 一个活动数据库 Init.ora 参数文件 | DB2 ---------------------------------------- 编目定义在数据库层次上,而不是实例层上 每个实例可能有多个数据库 数据库配置文件 |
![](http://www.innovatedigital.com/publicimg/instance.jpg)
10. 存储管理
从逻辑观点上来看,Oracle有一个包含多个表空间的数据库,表空间包含多个段(表,索引,回滚等),还包括由多个数据库块组成的扩展(Extent)。从物理意义上看,数据文件被分配给表空间,这些数据文件是由O/S块组成。
ORACLE DATA FILES ------------------------------ Cooked Raw Auto Extend | DB2 CONTAINERS --------------- Device Directory File |
DB2有两种不同的分配方法来定义表空间。它们一种是数据库管理的空间(DMS),另一种是系统管理的空间(SMS)。根据应用程序,它们各有优势:
SMS(System Manages Space)---系统管理空间允许操作系统根据需要为表分配空间。不指定空间参数,这种方法对于存储管理来说非常容易。对于较小的表或短时间增长和收缩的表都是有利的。
DMS(Database Managed Space)---当表空间被创建时,数据库管理空间需要详细的空间说明。通过表空间,存储空间可以马上被分配和保留。
---------------------------------------- Add Containers to TS Separate Indexes from Data Space allocated as Needed High performance in heavy OLTP High performance in decision support Ease of administration for small tables Flexibility of Administration File or Device containers | SMS ------- X X X | DMS ------ X X X X X X |
11. 对象比较
11.1 缓冲池
两种数据库都使用内存来做数据和对象定义的读写优化,这些被涉及到的内存区域被称为缓冲区或高速缓冲存储器。虽然使用方法是一样的,但在结构方式的定义和分配上是不一样的。
在Oracle中,缓冲池是在数据库启动文件init.ora中被定义的,这个文件可以动态地改变,它有下面的选项来定义不同的缓冲池:默认,循环,固定。
在DB2 LUW中,缓冲池是在数据库中定义的,并可创建为指定的页面大小:4K,8K,16K 或者32K,它们是通过DDL来定义的,不同的表空间被分配不同的缓冲池。
11.2 数据库
两个数据库管理系统处理数据库的方法是完全不同的,在Oracle中,你只有一个数据库,它包含所有的数据文件,重做日志文件,控制文件等。在DB2中,你可以一个实例有多个数据库,然而,每个数据库是独立拥有它的实体的。每次一个新的数据库的创建都会有相应的编目被创建,以及缓冲池和日志文件被定义,数据库之间没有任何共享。在DB2数据库中有三个表空间将被创建:
SYSCATSPACE, 系统编目
TEMPSPACE, 临时表空间,排序等
USERSPACE,应用数据的默认表空间
11.3 表空间
Oracle:在Oracle中,你要处理两类表空间:系统的和非系统的。系统表空间包含数据字典和系统回滚段。非系统表空间包含和应用程序相关的所有东西:回滚段,临时段,应用数据,以及应用索引。这些非系统的表空间也可以分两种类型:
永久的---用于所有对象,比如:在UDB中的USERSPACE
临时的---用于排序、临时工作区等,像在UDB中的TEMPSPACE
DB2:
在DB2中,存在三类表空间:
1. Regular ---主要是一般常用的应用数据
2. Temporary---排序
3. Large---LOBs,CLOBs,BLOBs
11.4 表
从用户或者程序本身的角度来看,表就是表,不管数据库类型的事。然而,从DBA的角度来看,对他们的操作有很大差异。
Oracle允许在一个表空间中定义一个或多个表,并且表和索引是相互独立的,除非是在IOT(Indexed Organized Table)这种特殊表的类型下,这种情况下,索引的叶子页面将包含表的行数据。在Oracle中在表上可以定义许多种不同类型的索引,包括唯一的,不唯一的,分区的,基于功能和位图。其中除位图索引外,在Oracle中所有的索引实际上都是由根结点、分枝和叶子页面组成的标准B-树。
DB2 UDB允许在同一个表空间定义一个到多个表,而且它的索引是直接关联在表定义上,实际上,表定义说明了该表上定义的所有索引所在的表空间。
DB2有三种类型的索引:唯一,不唯一,和簇集。
对DB2来说,簇集索引是会影响表中行的排列次序,这与Oracle中的簇集是完全不同的。DB2也是用标准的B-树结构来做索引的。
12.管理的差异
12.1 优化
为了保证数据库高速的运行,SQL优化是很重要的一部分工作。每个数据库都有它们各自不同的SQL优化器,其确定如何从数据库中检索数据满足查询的方式各有不同。
Oracle:你可以选择使用rules-based 或者cost-based来做优化。然而,你必须注意rules-based优化在10g版本中已经没有了。
DB2:IBM的优化比Oracle更高明,这已经历了很长时间的争论。DB2的优化是严格地使用cost-based来做的,对于复杂的查询,你也有为它指定优化级别的选择权。
此外,Oracle和DB2都可以通过EXPAIN命令在相关的表上增加包含访问路径信息的行数据。 Oracle利用Plan_Table,这和运行在z/OS上的DB2很类似。DB2的解释输出包含在七个表中,记录非常详细。
每一个供应商都会为这些访问路径信息提供格式化的工具。Oracle在OEM中有基本解释工具,或者你也可以使用OEM中调整包里的SQL分析功能。DB2则通过控制中心提供了易使用的Visual Explain.
12.2 并行
并行这个概念在这些平台上有很大不同。Oracle中的并行需要特殊的硬件配置,开始于其产品Oracle Parallel Server(OPS-8i)。后来9i版本中变成RAC,这里Oracle中并行的概念与在DB2 z/OS中的SYSPLEX并行的概念非常相似。DB2的并行要求要使用带DPF(数据分区部件)的ESE(企业服务器版),它们有两种不同的配置:
MPP(大规模平行处理)---多台机器组成集群,每一台机器都有各自单独的处理器。
SMP(对称多处理)---一台机器上有多个处理器。
12.3 监控
为了保证应用程序的请求能及时得到响应而不延迟,监控数据库性能的任务也是必要的。
Oracle:它提供一套性能动态视图工具,我们通常所说的V$ Views。标准SQL通常用于数据库性能信息的监测,比如内存、硬盘空间使用情况,用户和会话信息以及锁等。
DB2:它提供了两种不同的监控选项。第一,快照监控,顾名思义,它提供某一时刻性能的信息。大量被收集的数据被6个系列的监听器所控制。事件监听,通常是用于特殊事件的跟踪,比如死锁或完成的事务。事件监听是一种实际的数据库对象,它必须要通过DDL来创建,事件监听的输出会写到一个目录或者指定的通道。
12.4 工具
每一个数据库都有它们各自的命令和工具集,用来操作数据库中的数据。
ORACLE --------- RMAN Import Export SQL*LOADER Analyze | DB2 ----------- Backup/Restore Import Export Load Runstats Reorg Reorgchk |
(1). 重组数据
Oracle:它给你重组数据以很多灵活性,你可以使用Import/Export命令来实现,或在9i企业版里使用Online Redefinition Package(在线重定义包)进行联机重组。
DB2:你可以重组一个表或者一个索引。也可以使用一个很不错命令REORGCHK,这个命令将产生需要重组的表的报告。
(2). 装载数据
Oracle:
将数据导入表中可以使用SQL*LOADER。它有很多选项,比如:插入,追加,替换数据,多个输入文件等等。
DB2:
对于DB2来说,DBA有两个选择来导入数据:装载工具或者导入命令。装载工具一般用于装载大量的数据时使用,而导入命令则有益于快速地做插入少量的数据的操作。无论是导入命令还是装载工具,它们都提供添加或替换数据的选项。
12.5 备份和恢复
做备份和恢复的策略计划是DBA的关键职责。根据其运行的具体应用,每一个数据库都有很不同的需求。
第一个决定是使用日志文件的方法。你的应用程序需要时间点的恢复吗?如果是,对于Oracle来说,你可以选择Archive mode方式的日志,对于DB2 UDB而言,你可以选择Log Retain。如果你的应用程序没有问题,只是想恢复到最近的备份,在Oracle中你可以选择No Archive mode, 对于DB2 UDB,你可以选择Circular logging(default)。
(1). 备份类型
Oracle:
冷备份-是指数据库在离线的情况下做整个数据库的备份,包括、数据文件,控制文件,在线重做日志文件,Init.ora。
热备份-是指联机情况下做的备份。
RMAN-恢复管理器,
导出数据库
DB2:
数据库-在线/离线
表空间
(2). 恢复类型
Oracle:
实例恢复-从失败的实例中用重做日志来恢复
非归档模式(整个数据库的恢复)
归档模式(基于时间点的恢复)
导入-逻辑恢复
DB2:
崩溃—从异常终止或突然断电中用日志来恢复
前滚—映像拷贝+日志或本地时间(V8)
版本-使用映像拷贝
导入/装载-逻辑恢复
还要做很多其他决定,如备份的类型和频率,逻辑备份还是物理备份,备份文件保留多长时间,用户是否会中断备份等。每个数据库都应该就所有的这些问题有个明确的程序,这与应用和操作环境有关。
13.结束语
管理数据库是一件复杂而又很费时间的工作。DBA越来越多地被要求管理各种关系型数据库,可能来自不同的厂商,可能运行在不同的操作系统上。
DBA懂得关系数据库的原理是绝对必要的,但对于在一个有不同种类的数据库的环境下这是不够的。你也需要知道它们的细微差别以及每种数据库的不同的处理。没有什么可以替代这些经验和知识。但有了标准化的实用工具后,对于DBA而言,可以使工作过程实现效率的最大化提高,并且可以帮助减少导致应用程序出现停机的问题。