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-树结构来做索引的。