1、简介
当今IT的环境正经历着剧烈的变化,依靠单一的关系型数据库治理系统(RDBMS)治理数据的公司开始逐渐减少。分析家的报告指出 ,今天超过90%的公司都拥有不只一种RDBMS。
在现在紧张的经济情况下,实际的需求正在挑战IT机构人员的工作极限。一个公司为治理每种RDBMS而配备不同DBA的情况,越来越少见了。今天的DBA必须跨平台治理不同的RDBMS,这是非常普通的事。
“58%的DBA被要求治理一种以上的数据库平台。”―――来自:SearchDatabase.com的调查
通常,一个DBA不但把握基本的关系理论知识,同时具备一种专门的RDBMS经验。数据库设计和治理的基本原理在所有RDBMS之间是相通的。成为一名成功的跨平台的DBA,要害是把握对术语的真正理解和不同RDBMS的细微差别。本文将讨论多平台的Oracle和DB2 UDB之间的基本架构和治理的差异。
2、基本组件
在不同平台之间,大部分的对象类型和功能是非常相似的,一些很重要差异是存储过程的使用方式和日志生成方式。本文将具体讨论这些主题。
表1:基本数据库组件中的常用术语的差异
3、产品选项
当在安装任何一种数据库时,需要选择版本。为了满足你的 IT需求并做出正确的决定,了解各个数据库版本之间的差异是很重要的。
Oracle 10g:
EnterPRise Edition;
Standard Edition;
EXPress Edition。
企业版是使用最多的版本,假如你想使用OEM附加包,这个版本可以满足需要。
DB2 UDB for linux/Unix/Windows(LUW) V 9.1:
数据仓库版;
企业服务器版(ESE);
工作组版;
简化版;
个人版;
通用开发版;
个人开发版。
在DB2 UDB V 8.1之前,在公司环境方面你有两种选择:企业版(Enterprise Edition-EE)和扩展企业版(Extended Enterprise Edition-EEE)。他们一般被分别称为Double E和 Triple E。EEE是并发式服务器类型环境,与Oracle中的RAC很相似,它通常是被应用于巨型数据仓库的安装,IBM把这些底层代码和V8.1融合到一起,就是现在大家知道的企业服务器版(ESE)。数据分区部件(DPF)是一个可供数据库分区使用的附加部件,这使得系统从EE类型的环境到EEE环境的迁移工作变得很轻易。 4、数据类型
甚至每个品牌的数据库存储的数据格式都是不一样的,这对那些被分配在一个不熟悉的数据库上工作的DBA和开发人员来说是十分头疼的。
下面的表说明了数据库之间不同的数据类型:
5、数据字典/编目
这两个RDBMS将与数据库相关的元数据存放在一组相关的表中。这些表在ORACLE中被称为数据字典,在DB2中被称为系统编目(System Catalog for DB2)。
ORACLE在SYS模式中有一组数据字典的基本表,在这些基本表上面定义了一组存储系统信息和对象信息的视图。一组视图,即V$视图,可以访问动态性能信息。属于对象的静态信息可以从以ALL_ 、DBA_ 、和 USER_开头的视图中获得。
在DB2中,每个数据库包含的SYSIBM模式中,有一组基本表称为系统编目。在SYSCAT模式中,对象信息通常能在这些表之上定义的一组视图中获得。此外,DB2在SYSTAT模式中提供了可更新的和主要用于操作访问路径的一组视图。
6、访问数据库
每一个数据库供给商都自己提供一套唯一工具,来访问和治理他们自己的数据库。
6.1、Oracle 企业治理器(OEM)
OEM提供了一些基本的数据库治理功能,想使用更多高级的功能,必须购买附加的包:
- 变更治理包。
- 诊断包。
- 调整包。
- 恢复治理包。
- SQLPLUS,基本命令行接口。
6.2、IBM控制中心(CC)
控制中心规定了基本的数据库治理的特征,比如创建/删除对象、工具/命令生成、以及一些接口:Command Center、 Script Center 、Visual Explain。
6.3、IBM健康中心(HC)
从DB2 LUW V8.1 开始,IBM就引入了自主计算思想,这是一个“自我修复”数据库中的概念。自主计算的概念还处于早期发展阶段,而健康中心答应你在数据库中为各种不同性能度量值定义阈值,假如超过阈值会自动报警。 7、相同的术语,不同的含义
治理不同类型的数据库的第一步就是要了解各个供给商使用的不同的术语。在很多情形下,相同的术语的含义或者稍有不同或者完全不同。
举例:
存储过程
Oracle:它是用基于SQL的一种专门语言PL/SQL编写的,存储在数据库中的一个程序。
DB2:存储过程是一种最普通的程序,存储在数据库外部,并在数据库中注册,以标准编程语言编写,比如C,java,COBOL等,DB2同样支持内部的存储过程,并提供了一种基于SQL的专门的过程式语言。
包
Oracle:一组PL/SQL语句块。
DB2:一种预编译的访问计划。
段(Segment)
Oracle:是一个物理对象,比如表或索引。
DB2:表空间中的一组页面。
8、不同的术语,相似的含义
对于大部分而言,每种类型数据库都包含很多相似的组件,但它们命名不同,实现也不同。
9、实例(Instance)&数据库
大家知道每个DBMS的物理安装就是一个实例。然而,各自处理数据库的方式是明显的不同。
两个DBMS都把实例定义为一组进程,然而,DB2 LUW 答应一个或多个活动的数据库,Oracle每个实例仅仅只有一个数据库,在Oracle中,通常实例和数据库是可以互换的概念。
下表是实例定义的差异
图1 10、存储治理
从逻辑观点上来看,Oracle有一个包含多个表空间的数据库,表空间包含多个段(表,索引,回滚等),还包括由多个数据库块组成的扩展(Extent)。
从物理意义上看,数据文件被分配给表空间,这些数据文件是由O/S块组成。
DB2有两种不同的分配方法来定义表空间。它们一种是数据库治理的空间(DMS),另一种是系统治理的空间(SMS)。根据应用程序,它们各有优势:
SMS(System Manages Space)---系统治理空间答应操作系统根据需要为表分配空间。不指定空间参数,这种方法对于存储治理来说非常轻易。对于较小的表或短时间增长和收缩的表都是有利的。
DMS(Database Managed Space)---当表空间被创建时,数据库治理空间需要具体的空间说明。通过表空间,存储空间可以马上被分配和保留。
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、工具
每一个数据库都有它们各自的命令和工具集,用来操作数据库中的数据。
(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而言,可以使工作过程实现效率的最大化提高,并且可以帮助减少导致应用程序出现停机的问题。