【IT168 技术文章】
1. 简 介
当今IT的环境正经历着剧烈的变化,依靠单一的关系型数据库管理系统(RDBMS)管理数据的公司开始逐渐减少。分析家的报告指出 ,今天超过90%的公司都拥有不只一种RDBMS。在现在紧张的经济情况下,实际的需求正在挑战IT机构人员的工作极限。一个公司为管理每种RDBMS而配备不同DBA的情况,越来越少见了。今天的DBA必须跨平台管理不同的RDBMS,这是非常普通的事。
“58%的DBA被要求管理一种以上的数据库平台。”
―――来自:SearchDatabase.com的调查
通常,一个DBA不但掌握基本的关系理论知识,同时具备一种专门的RDBMS经验。数据库设计和管理的基本原理在所有RDBMS之间是相通的。成为一名成功的跨平台的DBA,关键是掌握对术语的真正理解和不同RDBMS的细微差别。本文将讨论多平台的Oracle和DB2 UDB之间的基本架构和管理的差异。
2. 基本组件
在不同平台之间,大部分的对象类型和功能是非常相似的,一些很重要差异是存储过程的使用方式和日志生成方式。本文将详细讨论这些主题。
表1: 基本数据库组件中的常用术语的差异
ORACLE
----------------------
. Instance
. File
. Database
. Tablespace
. Schema
. Table
. Index
. View
. Trigger
. Redo Log
. Rollback Segment
. Stored Procs
. SQL Plus
. Roles
DB2 UDB
----------------------
. Instance
. Container
. Database
. Tablespace
. Schema
. Table
. Index
. View
. Trigger
. Log
. NA
. Stored Procs
. DB2 CLP
. Groups
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和开发人员来说是十分头疼的。
下面的表说明了数据库之间不同的数据类型:
DB2 UDB
----------------------
CHAR(n)
VARCHAR(n)
LONG VARCHAR
CLOB
GRAPHIC(n)
VARGRAPHIC(n)
LONG VARGRAPHIC
DBLOB
BLOB (n)
SMALLINT, INTEGER, BIGINT
DECIMAL(p,s), NUMERIC(p,s)
ORACLE
----------------------
CHAR(N)
NCHAR(N)
VARCHAR2(N)
NVARCHAR2(N)
NUMBER(P,S)
DATE
RAW(N)
BLOB, CLOB,
NCLOB, BFILE
LONG, LONG RAW
ROWID
REAL
DOUBLE, FLOAT
DATE
TIME
TIMESTAMP
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. 不同的术语,相似的含义
对于大部分而言,每种类型数据库都包含很多相似的组件,但它们命名不同,实现也不同。
ORACLE
----------------------
Data Block
Dictionary
Alert Log
Redo Log
Archive log
Segments
Statement Cache
DB2 UDB
----------------------
Data Page
Catalog
Diag log
Log Files
Log Retain
Tables, IX
Package Cache
9. 实例(Instance)&数据库
大家知道每个DBMS的物理安装就是一个实例。然而,各自处理数据库的方式是明显的不同。
两个DBMS都把实例定义为一组进程,然而,DB2 LUW 允许一个或多个活动的数据库,Oracle每个实例仅仅只有一个数据库,在Oracle中,通常实例和数据库是可以互换的概念。
实例定义的差异:
ORACLE
-----------------------
一个数据字典
一个活动数据库
Init.ora 参数文件
DB2
----------------------------------------
编目定义在数据库层次上,而不是实例层上
每个实例可能有多个数据库
数据库配置文件
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-树结构来做索引的。