从 Oracle DBA到DB2 DBA(下)

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而言,可以使工作过程实现效率的最大化提高,并且可以帮助减少导致应用程序出现停机的问题。