您的位置:首页 > 数据库 > Oracle

利用 Oracle 11g 技能学习 DB2 9.7 for Linux, UNIX and Windows

2011-12-25 01:15 603 查看
系统结构概述

首先,我们需要理解 Oracle 使用的架构以及它与 DB2 的不同之处。图 1 展示了 Oracle 的系统结构。将该图与

图 2 进行比较,后者显示了 DB2 的系统结构。在阅读本文的时候,为便于理解,可以参照这两个图。

图 1. Oracle on Linux, UNIX, and Windows 的系统结构



图 2. DB2 on Linux, UNIX, and Windows 的系统结构



回页首
实例

在 Oracle 和 DB2 中实例 的概念是相似的。在这两者中,实例都是指后台进程与共享内存的组合。两者之间的主要差别在于,在 Oracle 中每个实例只能有一个数据库,而在 DB2 中多个数据库可以共享一个实例。

在 Oracle 中,由于数据库与实例是一一对应的,因此用 CREATE DATABASE 命令创建一个数据库就隐式地创建了一个实例。为了在计算机上创建一个 Oracle 实例,也可以使用 Database Configuration Assistant,或者使用 ORADIM 实用程序,后者是 Oracle 9i 通过 NEW 选项提供的。另外,还必须提供某些信息,包括系统标识符 (System Identifier,SID) 或服务名称、实例密码、最大用户数、启动模式等等。类似地,为了删除实例,可以使用
ORADIM 实用程序加 DELETE 选项。这需要提供 SID 或服务名称。除非在安装过程中创建新的数据库,否则在全新安装 Oracle 的时候,不会创建默认的实例。

在 DB2 中,当在 Windows 平台上安装该产品之后,就默认地创建一个实例 "DB2"。在 Linux 和 UNIX 中,默认实例的名称为 "db2inst1"。要想在同一台计算机上创建另一个实例,只需执行命令
db2icrt <instance name>


图 3 展示了从 DB2 Control Center GUI 用 db2icrt 命令创建的实例 DB2_01。

图 3. 显示 DB2 实例的 DB2 Control Center GUI



要想从命令行接口引用给定的 DB2 实例,应该使用环境变量 DB2INSTANCE。可以通过这个变量指定当前活动实例,所有命令将应用于此实例。例如,如果 DB2INSTANCE 设置为 PROD,然后执行命令
create database MYDB1
,就会创建一个与实例 PROD 相关联的数据库。如果要在实例 DB2 上创建此数据库,那么必须首先将 DB2INSTANCE 变量的值改为 DB2。这类似于 ORACLE_SID(系统标识符),当用户想要在不同实例之间进行切换时,也是使用 ORACLE_SID。

还有一种标识要使用的实例的简单方法,那就是使用 DB2 Control Center GUI,如
图 3 所示。要想在此工具中看到新实例的条目,必须通过右击 Instances 并选择 Add 来将此实例添加到 GUI 中。要想删除 DB2 中的实例,可以执行命令
db2idrop <instance name>


总之,在 Oracle 中可以使用 Database Configuration Assistant 来创建、修改、启动、停止和删除实例,而在 DB2 中则可以使用 Control Center GUI 做同样的事情。另外,Oracle 实例与数据库只能是一对一关系,而在 DB2 中却不是这样。在一个 DB2 实例中可以同时存在并并发地使用多个数据库。

回页首
数据库

在 Oracle 中,可以用 CREATE DATABASE 命令手工创建数据库,也可以用 Database Configuration Assistant 创建数据库。如果手工创建数据库,在执行 CREATE DATABASE 命令之前,需要执行一系列步骤,包括设置 OS 变量、准备参数文件以及创建密码文件。

在数据词典中存储和管理元数据信息,数据词典由基表和相应的视图组成。基表是在数据库创建过程中自动创建的,而视图是通过运行 catalog.sql 和 catproc.sql 脚本构造的。

因此,可以把 Oracle 数据库看作包含三种文件的集合:

数据文件:包含实际的数据,数据库的物理实现。(类似于 DB2 中的容器。)
重做文件:这相当于 DB2 中的事务日志。
控制文件:包含用于维护和检验数据库完整性的信息。

在 DB2 中,一个实例可以包含多个数据库,如
图 2 所示。每个数据库都是一个真正封闭的、独立的单元。每个数据库有自己的编目表空间、临时表空间和用户表空间,这些表空间是在成功创建数据库时默认创建的。DB2 包含一个称为系统数据库目录 的二进制文件,其中包含可从 DB2 计算机连接的所有数据库的条目。这个目录保存在实例级。

当创建实例时,默认情况下不会创建数据库,需要使用 create database 命令显式地创建数据库。还可以用 Control Center 创建数据库,如

图 4 和
图 5 所示。

图 4. 使用 Control Center GUI 创建 DB2 数据库



图 5. 使用 Control Center GUI 创建 DB2 数据库(续)




图 5 中,还可以看到在单击 Show Command 时会出现什么情况。所有的 DB2 Control Center GUI 屏幕都会显示实际上在后台执行的 SQL 语句或命令。可以把这些命令保存在脚本中,以便在以后执行,也可以将它们复制到命令行处理程序 (CLP) 或 Command Center GUI 工具中并执行。这些工具分别相当于 Oracle 的 SQL*Plus 和 iSQL *Plus。

可以使用 'DROP DATABASE' 命令或者通过 DB2 Control Center GUI 删除 DB2 数据库。而在 Oracle 中没有这样的命令。数据库的删除是通过删除所有相关数据文件来完成的。

同一个实例中的数据库通常不会相互交互。但是,如果应用程序需要与多个数据库交互,那么通过启用联邦 支持可以满足这一需求。在
参考资料 小节中有一篇关于联邦的文章。

回页首
容器、表空间、缓冲区池和页

在 Oracle 中,在物理上数据存储在被称为数据文件的文件中。这类似于 DB2 的容器,DB2 的容器也是物理存储数据的地方。每个 Oracle 数据库包含一个名为 SYSTEM 的表空间,这是在创建数据库时由 Oracle 自动创建的。用于用户数据、临时数据和索引数据的其他表空间则需要在创建数据库之后另行创建,而且在使用这些表空间之前,还需要为之指定一个用户。

在 DB2 中,表空间 是逻辑对象,作为逻辑表和物理容器之间的一层。当创建表空间时,可以将它与特定的缓冲区池(数据库缓存)关联起来,并关联到特定的容器。这为性能管理带来了灵活性。例如,如果有一个使用非常频繁的表,那么可以在一个单独的表空间中定义它,并与一个单独的缓冲区池相关联。这有助于确保此表中的数据连续地缓存在内存中。

在 DB2 中,当使用 CREATE DATABASE 命令及其默认值创建数据库时,会自动地创建三个默认的表空间。表 1 描述默认的 DB2 表空间:

表 1. 当用默认值创建数据库时默认创建的 DB2 表空间

表空间名称说明
SYSCATSPACE包含元数据的编目表空间。
TEMPSPACE1用于执行联结和排序等操作的系统临时表空间。这个表空间的名称可以更改。
USERSPACE1这个表空间是可选的,如果在创建表的时候没有显式地指定表空间,那么用这个表空间来存储用户表。
在 DB2 中,数据库是独立的单元,因此不能跨数据库共享表空间。由于表空间只在一个数据库中是可知的,因此两个不同的数据库可以有同名的表空间。在
图 2 中可以看到这一点,其中数据库 MYDB1 有一个名为 MYTBLS 的表空间,而数据库 MYDB2 也有一个同名的表空间。

DB2 表空间可以分为 SMS(系统管理的表空间)与 DMS(数据库管理的表空间)两类。SMS 表空间由操作系统管理,它们只能是目录。SMS 表空间可以根据需要自动增长,因此 SMS 可以提供很好的性能,需要的管理也很少。DMS 表空间由 DB2 管理,既可以是文件,也可以是原始设备。这种类型的表空间可以提供最佳性能,但是需要进行一些管理。例如,需要预先指定想要为这个表空间分配多大的空间,因为这种表空间不能自动增长。

Oracle 的存储模型中没有 SMS 的概念,但是它的数据文件类似于 DB2 DMS 表空间。也就是说,可以通过在表空间中添加数据文件、增加数据文件的大小或者添加新的表空间,增加数据库的大小。

表 2 显示 Oracle 数据库或表空间与 DB2 数据库或表空间的对应关系。

表 2. Oracle 数据库与 DB2 数据库和表空间的对应关系

Oracle 数据库或表空间DB2 数据库或表空间
SYSTEM 是存放编目(数据词典)信息的表空间。SYSCATSPACE(编目表空间);与 Oracle 中一样,仅在数据库级保存该信息。
数据词典(包含表和视图形式的元数据),驻留在 SYSTEM 表空间中。系统编目表(由 SYSIBM 模式标识)和系统视图(由 SYSCAT 或 SYSSTAT 模式标识),驻留在 SYSCATSPACE 表空间中。
SCOTT 数据库SAMPLE 数据库
TEMP 表空间系统临时表空间(默认情况下名为 tempspace1)
UNDO 表空间
USER 表空间用户表空间。在默认情况下,一般在数据库创建之后创建 USERSPACE1。
正如前面指出的,Oracle 的数据缓冲区概念相当于 DB2 的缓冲区池。但是,DB2 允许多个缓冲区池存在。没有预先定义可创建的缓冲区池的数量,缓冲区池的名称可以是任意的。

Oracle 中 的概念与 DB2 中的页最为相似。一个 DB2 页的大小可以为 4k、8k、16k 或 32k。一个表行只能放在一个页中,而不能像 Oracle 中那样跨多个页。

回页首
对象名称

Oracle 中的对象名称采用以下形式:

[Schema_name.]object_name[@database]


在 DB2 中,对象名称也是由两部分组成的结构:

Schema_name.object_name


与 Oracle 中一样,DB2 模式名称用于在逻辑上对对象进行分组。但是一个重要的差异是,在 DB2 中,模式名称不必与一个用户 id 相匹配。任何拥有 IMPLICIT_SCHEMA 特权的用户都可以用不存在的模式创建对象。例如,假设 "Peter" 具有 IMPLICIT_SCHEMA 特权,他执行以下命令:

CREATE TABLE WORLD.TABLEA (lastname char(10))


在这种情况下,会创建表 WORLD.TABLEA,其中 WORLD 是新创建的模式。如果 Peter 没有显式地指定模式,那么就会创建表 PETER.TABLEA,因为在默认情况下使用连接 ID。

在 DB2 中,在发出与数据库相关的命令之前,总是要先连接数据库。因此,在这种架构中,对象名称不需要包括数据库名称。

回页首
表、视图和索引

在 Oracle 和 DB2 中,表、视图和索引基本上是一样的。

DB2 提供一个名为 Design Advisor 的实用程序,可以用它为特定的查询或工作负载推荐索引。可以从 DB2 Control Center 中调用 Design Advisor,也可以从 DB2 CLP 使用 db2advis 命令调用它。在 DB2 中,索引是直接与表定义关联的。例如,当使用 DMS 表空间时,可以用下面的语句指定把索引放在哪个表空间中:

CREATE TABLE mytable (col1 integer, col2 char(10)) in tbls1 index in tbls2


上面的例子表明,表中的数据将存储在表空间 'tbls1' 中,而索引页将存储在表空间 'tbls2' 中。但在 Oracle 语法中,CREATE INDEX 语句提供一个选项来指定把索引放在哪个表空间中。

此外,在 DB2 中,一旦创建了索引,就不能修改索引定义中的任何子句。要想进行更改,必须删除索引,然后重新创建它。

与 Oracle 中一样,不同数据库中的 DB2 表、视图和索引可以有相同的名称。相同数据库中的表和视图必须使用不同的名称,但是允许创建与现有的表或视图同名的索引。

回页首
存储过程、触发器和用户定义函数 (UDF)

可以用 DB2 预编译器支持的任何语言编写 DB2 存储过程,包括 Java、C、C++、REXX、Fortran 和 COBOL。但是,建议使用 SQL Procedural Language (SQL PL),这种语言非常类似于 Oracle 的 PL/SQL。SQL PL 存储过程很容易创建,它们的性能很好。DB2 存储过程开发还使用 Type 2 和 Type 4 JDBC 驱动程序来支持 SQLJ 和 Java。Type 3 已经废弃。

触发器和函数的开发可以使用内联 SQL/PL,这是 SQL PL 的子集。可以使用 Data Studio 工具轻松地创建、构建、调试和部署 DB2 存储过程和用户定义函数。

回页首
配置文件

在过去,Oracle 将所有与会话和系统相关的参数存储在一个文本文件中,这个文件通常名为 initSID.ora。但是,由于这个文本文件不具有持久性,从 Oracle 9i 开始,Oracle 引入了 Server Parameter File (SPFILE),这是一种存储在服务器上的二进制参数文件。它在实例停止之后到启动之前是持久存在的。但是,当 SPFILE 不可用时,仍然使用 initSID.ora 文件。在引入 SPFILE 之前,任何对参数有影响的 ALTER SYSTEM 和 ALTER
SESSION 命令都只在实例或会话活动期间有效。每当意图重新绑定一个数据库实例时,DBA 都必须手工修改 initSID.ora 文本文件。对于监听器,网络访问配置通常存储在 listener.ora 中;对于客户机访问,网络访问配置通常存储在 tnsnames.ora 中。

在 DB2 中,配置参数存储在实例级(称为数据库管理器配置文件)和数据库级(称为数据库配置文件)。这些参数大多数都可以动态地更改,也就是说,不需要为了让对参数值的更改生效而停止并重启实例或者重连所有数据库连接。不能直接编辑 DB2 存储配置信息的文件。

如果想在 CLP 中手工更改特定的数据库管理器配置参数,可以使用命令
UPDATE DBM CFG USING <parameter name> <new value>


如果想在 CLP 中手工更改特定的数据库参数,可以使用命令
UPDATE DB CFG FOR <database name> USING <parameter name> <new value>


这两个命令分别相当于 Oracle 的 ALTER SYSTEM 和 ALTER SESSION。也可以使用 Control Center 查看和修改这些参数的值;如果右键单击一个给定的实例并选择
Configure Parameters,那么会看到
图 6 所示的窗口。

图 6. DB2 数据库管理器配置参数(实例级)



在数据库级,右键单击一个给定的数据库并选择 Configure Parameters,可以看到
图 7 所示的窗口。

图 7. 数据库配置参数(数据库级)



DB2 提供了很多用于配置系统的参数。但是,如果想通过一种容易的方法自动地配置系统,那么可以使用
autoconfigure
命令(或者 Configuration Advisor GUI),它会根据您提供的一些信息把数据库管理器和数据库配置参数设置成最佳值。图 8 显示 Configuration
Advisor。

图 8. DB2 Configuration Advisor



除了配置文件外,DB2 通常还为与平台相关的配置使用 DB2 注册表变量。注意,DB2 注册表变量与 Windows 注册表没有任何关系。可以使用命令 db2set 查看和更改这些变量。

连接(网络访问)信息存储在系统数据库目录、本地数据库目录和节点目录中。这些都是二进制文件,只能用 CATALOG 和 UNCATALOG 命令修改。

回页首
内存架构、后台进程和线程

接下来,我们来看看内存架构、后台进程和线程,比较一下在 Oracle 和 DB2 中使用它们的方式。

图 9. Oracle 内存架构和后台进程



Oracle 中的 System Global Area (SGA) 是一组共享内存块,用于存储与实例有关的信息。其中包括语句缓存、重做日志缓冲区和数据缓冲区缓存。Program Global Area (PGA)和
User Global Area (UGA) 共享内存区域包含用于服务器进程和用户会话的数据和控制信息。

Oracle 支持在同一台计算机上存在多个实例,但不共享后台进程。例如,同一台计算机上的三个实例需要三套后台进程。因此总的来说建议在一台计算机上包含一个数据库、一个实例和多个模式。

图 10. DB2 内存架构、后台进程和线程



DB2 和 Oracle 都使用共享内存区域,但是 DB2 与 Oracle 内存架构的实现方式略有不同。由于 DB2 实例可以包含多个数据库,因此存在两个级别的配置。在前一节中已经提到,实例级的配置可以在 DBM CFG 文件中完成,而数据库级的配置在 DB CFG 文件中完成。这两个级别上的配置参数都可以进行调整,以调优内存使用情况。后文将更详细地阐述 DB2 的内存结构和不同的后台进程。

Oracle 是在实例和数据库启动时把内存分配给它们的,而 DB2 则是在不同级别上分配内存。这主要是因为 DB2 实例可以包含多个数据库。DB2 中主要有三种内存结构:

实例共享内存:这是数据库管理器全局共享内存,是在使用
db2start
命令启动实例时分配给实例的,并且在发出
db2stop
命令停止实例之前一直处于已分配状态。
数据库共享内存:这是数据库全局内存,是在激活数据库或者第一次连接到数据库时分配的。分配的内存包括缓冲区池、锁列表、数据库堆、实用程序堆、包缓存和编目缓存。
应用程序共享内存:这是在应用程序连接到数据库时分配的内存,由处理连接到数据库的客户机所请求的工作的代理使用。每个连接到数据库的应用程序都会被分配内存;因此,正确地配置会影响应用程序共享内存的参数非常重要。

DB2 数据库服务器必须执行许多不同的任务,比如处理数据库应用程序请求或确保把日志记录写到磁盘上。每个任务通常由单独的引擎可分派单元 (EDU) 执行。在 DB2 for Windows, Linux and UNIX 中,服务器活动是以线程的形式进行的。DB2 进程和线程在以下级别上操作。注意,这不是完整的列表,我们主要讲解重要的线程和进程:

实例级:这些进程和线程是在实例启动时初始化的:

DB2 Daemon Spawner (db2gds):全局守护进程处理程序,每个实例都对应一个这样的进程(仅在 UNIX 中)。
DB2 System Controller (db2sysc):DB2 主进程。
DB2 Watchdog (db2wdog):所有其他进程的父进程。
DB2 Format Log (db2fmtlg):类似于 Oracle 中的 ARCn 进程,它为日志路径中的日志文件预先分配空间。
Autonomic computing daemon (db2acd):驻留健康状态监视程序、自动维护实用程序和管理任务调度程序。这个进程以前名为 db2hmon。

数据库级:这些进程是在建立到数据库的连接时初始化的:

DB2 Log Reader (db2loggr):类似于 Oracle 的 PMON 进程的子集。此进程在回滚、重启恢复和前滚期间读取日志文件。
DB2 Log Writer (db2loggw):将日志从日志缓冲区刷新到磁盘上的事务日志文件中。相当于 Oracle 中的 LGWR 进程。
DB2 Page Cleaner (db2pclnr):相当于 Oracle 中的 DBWR 进程,此进程在将页从磁盘转移到 BP 中之前清理缓冲区池。
DB2 Prefetcher (db2pfchr):将需要的页预先从磁盘取出到缓冲区池中。
DB2 Deadlock Detector (db2dlock):死锁检测程序进程。
DB2 Self-Tuning Memory Manager (db2stmm):用于自治自调优内存管理特性。

应用程序级:连接到数据库的每个应用程序都有相关联的的应用程序级后台进程。这些进程如下:

DB2 Communication Manager (db2ipccm):进程间通信进程,用于每个本地连接的客户机。
DB2 TCP Manager (db2tcpcm):TCP 通信管理程序进程,用于使用 TCP/IP 连接数据库的远程客户机。

DB2 Coordinating Agent (db2agent):代表应用程序处理所有请求的线程。
DB2 Pooled Gateway Agent (db2agntgp 和 db2agntgp):分别在远程数据库和本地数据库上实现池的代理。

要想获得对 DB2 进程的完整解释,请参考文章 “DB2 通用数据库进程全接触”。

回页首
锁机制

Oracle 中的锁可以是手工的,也可以是自动的。Oracle Lock Manager 可以在行级隐式地锁定表数据,也可以使用以下 SQL 语句在事务或会话级覆盖默认的锁:

1. SET TRANSACTION ISOLATION LEVEL


2. LOCK TABLE


3. SELECT FOR UPDATE


Oracle 支持一种称为 Multi-Version Read Consistency 的机制,这是用撤消段中的撤消数据实现的。

DB2 实现 ANSI 标准隔离级别,例如未提交读 (Uncommitted Read)、游标稳定性 (Cursor stability)、读稳定性 (Read stability) 和可重复读 (Repeatable Read)。除非使用未提交读隔离级别,否则用户只能看到已提交的数据。行锁是根据隔离级别隐式地获得的。可锁定的数据库对象有表空间、表和行,但是只有表和表空间可以显式地锁定。可以使用
LOCK TABLE
命令锁定一个表,而不是使用默认的行锁定。

与 Oracle 不同,在 DB2 中锁是存储在内存中的,而不是存储在数据页中。可以使用 LOCKLIST 数据库配置参数配置锁可用的内存,使用 MAXLOCKS 配置参数定义用于一个特定应用程序的锁的最大内存。

在 DB2 9.7 中,改进了锁事件报告。新的锁事件监视程序收集关于锁超时、死锁和超过指定时间段的锁等待的信息。可以从 XML 文档、从数据库表或者使用读取 XML 或文本文档的 Java 工具 (db2evmonfmt) 访问这些数据。

引入了新的数据库配置参数
cur_commit
,它基本上只允许返回已提交的数据,但是现在读者不必等待写者释放行锁。相反,读者返回基于当前提交的版本的数据;即写操作开始之前的数据。

回页首
安全性

Oracle 和 DB2 都是具有基本和高级安全特性的安全数据库。在 Oracle 中,有四种不同的用户身份验证方法:

数据库:数据库执行对用户的识别和身份验证。
外部:操作系统或网络服务执行身份验证。
全局身份验证和授权:由 SSL 对用户进行全局身份验证。
代理身份验证和授权:中间层服务器执行身份验证。

身份验证方法是在使用
CREATE USER
命令创建用户时指定的。Oracle 中有几个数据词典视图,其中包含关于这些用户的信息。

在 DB2 中,用户不是存在于数据库中,而是由操作系统来管理。数据库登录信息并不存放在任何数据库表中。任何操作系统用户都有可能访问 DB2;但是,除非他们被授予给定的 DB2 权限或特权,否则他们能做的事情不多。很容易通过 Control Center GUI 授予和撤销权限和特权。首先需要将可用操作系统用户或组中的一个用户或组添加到 Control Center 中。

另外,在 DB2 中没有 “角色 (role)” 这个术语;相反,DB2 使用术语 “权力 (authority)”,它类似于 Oracle 的数据库角色,DB2 通过权力将特权授予某些组或用户。DB2 支持的权力有:SYSADM、SYSCTRL、SYSMAINT、SYSMON、SECADM、DBADM 和 LOAD。

不能使用 GRANT SQL 语句授予 SYSADM、SYSCTRL 和 SYSMAINT 权力。只能通过修改数据库管理器配置参数设置这些特殊的权力。

DB2 还使用术语 “特权 (privilege)”,它类似于 Oracle 的系统和模式对象特权。DB2 中有数据库特权 (连接、创建表等)和数据库对象特权 (模式、表、视图等)。图 11 显示从 Control Center GUI 获得的
DB2 安全性信息。Change User 窗口中显示的大部分选项卡对应于 DB2 所支持的特权。

图 11. DB2 安全性



DB2 中的身份验证不仅涉及对用户名和密码进行加密,还允许对客户机与服务器之间通过网络传输的数据进行加密。身份验证的位置由数据库管理器配置参数 AUTHENTICATION 的值决定。

下面是用于为 DB2 启用身份验证的有效选项:

SERVER_ENCRYPT —— 这个值指定身份验证发生在服务器上。首先加密在连接期间指定的用户 id 和密码,然后将它们发送到服务器,在服务器上将它们与服务器端的用户 id 和密码进行比较。如果匹配成功,那么就允许此用户访问数据库。

KRB_SERVER_ENCRYPT —— 这指定服务器接受 KERBEROS 身份验证或加密的 SERVER 身份验证模式。

DATA_ENCRYPT —— 这指定服务器允许 SERVER 身份验证,并对客户机与服务器之间通过网络传输的数据进行加密。

DATA_ENCRYPT_CMP —— 这指定服务器接受加密的 SERVER 身份验证模式和用户数据的加密。这种身份验证类型能与不支持 DATA_ENCRYPT 身份验证类型的低级产品兼容。

GSS_SERVER_ENCRYPT —— 这指定服务器接受基于 GSS API 的插件身份验证或加密的服务器身份验证模式。

要想更新 AUTHENTICATION 实例参数,例如将它的值设置为 DATA_ENCRYPT,可以使用以下命令:

清单 1. 更新 AUTHENTICATION 实例参数

UPDATE DBM CFG USING AUTHENTICATION DATA_ENCRYPT
db2stop
db2start

DB2 提供基于标签的访问控制 (Label Based Access Control,LBAC) 机制,从而进一步扩展安全性。LBAC 特性为控制对各行和各列的读写访问提供了更细的粒度。DB2 中提供了一种安全管理员角色 (SECADM),操纵 LBAC 对象需要这种角色。试图访问一个对象的用户必须被授予此对象的安全标签。如果安全标签匹配,则允许访问;如果不匹配,则拒绝访问。

除了特权和权限外,数据库安全性还包含其他方面。简单地说,Oracle 与 DB2 之间既有不同点,也有相同点:

用户身份验证和授权

在创建用户之后,Oracle 使用存储在词典中的加密的密码。DB2 支持用密码进行用户身份验证,并使用底层的操作系统用户进行身份验证。Oracle 和 DB2 都支持 LDAP(Oracle Internet Directory 和 IBM Directory Server)。Oracle 和 DB2 都支持单点登录 (SSO)。

数据加密

Oracle 支持数据加密,可以对敏感数据进行加密,例如信用卡号和一些高度敏感的业务数据。可以使用以下方法对存储中的 DB2 数据进行加密:

可以使用内置的加密和解密函数 ENCRYPT、DECRYPT_BIN、DECRYPT_CHAR 和 GETHINT 加密数据库表中的数据。
可以使用 IBM Database Encryption Expert 加密底层操作系统数据和备份文件。
如果在 AIX 操作系统上运行 DB2 Enterprise Server Edition 系统,希望只执行文件级加密,那么可以使用加密文件系统 (EFS) 加密操作系统数据和备份文件。

网络加密

Oracle 通过它的 Oracle Advanced Security 提供网络加密。Oracle 使用 DES、3DES 和 RC4 行业标准加密。要想加密客户机与 DB2 数据库之间的通信流,可以使用 DATA_ENCRYPT 身份验证类型或 DB2 数据库系统对 Secure Sockets Layer (SSL) 的支持。

审计跟踪

Oracle 允许审计跟踪用户和对象。还可以使用日志挖掘程序调查和分析有疑问的查询。DB2 也提供类似的审计设施。可以使用 db2audit 实用程序进行审计跟踪。

回页首
XML 支持

在本节中,我们比较 Oracle 和 DB2 对 XML 的支持。Oracle XML DB 特性随 Oracle 9i Release 2 一起发布,可以通过定义 XMLTYPE 表和列实现对 XML 存储、检索和模式的管理,XML 文档存储为 CLOB 或拆分(分解)到关系表中。Oracle 11g 为管理 XML 文档提供了一些改进;例如,通过映射已有的数据,可以动态地反映模式的更改,而不必重新导入。在 Oracle 11g 中引入了第三种 XML 支持 —— 二进制 XML。因此,Oracle
现在可以按以下方式存储 XML 数据:

使用 CLOB 的非结构化存储(也称为无模式存储)
把 XML 映射到对象关系的结构化存储
二进制 XML 存储

DB2 的 pureXML 技术则是原生地存储 XML 文档,也就是说,在内部以树格式存储 XML 文档。它还允许同时使用 SQL 和 XML 扩展(Xquery 和 Xpath)访问关系数据和 XML 数据。原生存储 XML 文档是一种更好的方法,IBM 的研究表明,使用此方法在 XML 文档的搜索和检索方面可以取得更好的性能,并能减少某些程序的代码行数。在 DB2 Control Center、命令行处理程序、IBM Data Studio 和 IBM Database Add-Ins for Microsoft
Visual Studio 中提供对 DB2 XML 数据类型的支持。

要想在数据库中使用 pureXML 特性,应该创建 UNICODE 数据库(例如使用编码集 UTF-8)。如果没有在创建表之前创建 UNICODE 数据库,则会产生如下所示的错误:

SQL1239N  XML features can only be used in a Unicode database with a single database
partition.  SQLSTATE=42997

DB2 与以前的版本一样存储关系数据。但是,XML 数据是以层次化格式存储的(作为使用 Xquery Data Model [XDM] 的树)。XML 与关系服务之间紧密集成。要想存储 XML 文档,用户需要创建一个表,并指定一个列使用一种新的数据类型 XML,如下面的例子所示。

清单 2. 创建包含 XML 数据类型的表

CREATE TABLE T
(ID INT PRIMARY KEY NOT NULL, COMMENT VARCHAR(1000) NOT NULL, DOCUMENT XML)
in ttspace compress yes@

由于 XML 文档以经过解析的层次化格式原生地存储在 XQuery Data Model (XDM) 中,因此不需要进行转换或映射;用于存储 XML 文档的格式就是用于处理它的格式。这可以提供更好的性能。

备份、恢复、导入等实用程序对包含 XML 列的表的作用与其他表是一样的。可以使用 INSERT 语句或 DB2 IMPORT 实用程序将 XML 数据插入 XML 列。在导入来自第三方的 XML 文档之前,最好根据预定义的 XML 模式检验这些文档。为了注册 XML 模式,DBA 需要执行 REGISTER XML SCHEMA 命令,并以 COMPLETE XML SCHEMA 结束以完成注册过程。DB2 还支持在一个 XML 文档的子集或整个文档上创建索引。在创建索引时,需要指定 XPATH,它指向索引针对的元素/属性。

在 DB2 中,现在有四种访问关系数据和 XML 数据的方法:

纯 SQL(不涉及 XQuery)
SQL/XML,也就是说嵌入在 SQL 中的 XQuery
XQuery 作为独立的语言(不涉及 SQL)
带嵌入式 SQL 的 XQuery

在 DB2 9.7 中,增加了更多 XML 特性,比如支持在用户定义函数中使用 XML 类型。DB2 9.7 中的重要改进是现在可以使用 LOAD 实用程序装载 XML 数据。另外,在分区的表上,用 DB2 9.7 或更早版本创建的 XML 数据索引是不分区的。从 DB2 Version 9.7 Fix Pack 1 开始,在分区的表上创建的 XML 数据索引可以是分区的,也可以是不分区的。

要想看到更深入的讨论,可以在 developerWorks 上找到更多关于 IBM pureXML 功能的文章,例如
使用 XQuery 查询 DB2 XML 数据 和
使用 SQL 查询 DB2 XML 数据。

回页首
分区

Oracle 的分区提供几种分区战略,它们控制数据库如何把数据放在分区中。基本战略是范围、列表和散列分区。

DB2 的表分区(又称范围分区)类似于 Oracle 的分区。它基本上允许将一个逻辑表拆分成跨一个或多个表空间的多个物理存储对象。每个对象对应于一个 “分区”,允许每个表空间包含一定范围的数据,这样非常容易访问。

在 DB2 中,有多种方法对数据进行分区,可以同时将这些方法应用于相同的数据。为了避免读者感到困惑,下面简单地解释一下提供分区的不同方法:

DATABASE PARTITIONING —— 按照键散列将数据分布在数据库的多个逻辑节点上 (DPF)。
RANGE/TABLE PARTITIONING(DB2 9 提供) —— 根据键范围将数据划分到一个逻辑数据库分区中的多个物理对象上。
MULTI DIMENSIONAL CLUSTERING (MDC) —— 根据多个键值组织表(或一个表中的范围)中的数据。

在 DB2 9.7 中,索引可以引用跨分区表中所有分区的数据行(这称为不分区的索引),或者对索引本身进行分区,让每个数据分区有相关联的索引分区。可以为分区的表创建不分区的和分区的索引。

下面的例子创建一个 customer 表,其中 l_shipdate >= '01/01/2006' 且 l_shipdate <= '03/31/2006' 的行存储在表空间 ts1 中,l_shipdate >= '04/01/2006' 且 l_shipdate <= '06/30/2006' 的行存储在表空间 ts2 中,依此类推。更详尽的解释可以参阅 developerWorks 文章

Table partitioning in DB2 9。

清单 3. 将一个表按范围分区

CREATE TABLE customer (l_shipdate, l_name CHAR(30))
IN ts1, ts2, ts3, ts4, ts5
PARTITION BY RANGE(l_shipdate)
(STARTING FROM ('01/01/2006')
ENDING AT ('12/31/2006')
EVERY (3 MONTHS))

在文章
在数周内从 Oracle 或 Sybase 迁移到 DB2 的表 1 中可以找到 Oracle 和 DB2 分区术语的对比。

回页首
压缩

Oracle 提供三种压缩特性:索引、表和行级压缩。如果对这些特性没有适当的规划,可能会对性能产生不良影响。

Oracle 从版本 8i 开始引入了索引压缩。可以压缩的索引有 bitmap、btree 和索引组织的表。索引压缩使用起来很简单;例如,要想创建一个使用压缩特性的索引,可以使用如下代码:

清单 4. 创建采用压缩的索引

CREATE INDEX ord_customer_ix_demo
ON orders (customer_id, sales_rep_id)
COMPRESS 1;

对于最初不使用压缩特性的索引,可以通过修改它们将它们转换成压缩的索引。清单 5 中的示例展示了如何修改索引以使其变成压缩索引。

清单 5. 改为采用压缩的索引

alter index ord_customer_ix_demo rebuild compress

目前,Oracle 没有提供任何自动的 Advisor 来指出哪些索引应该被压缩。大多数通过索引压缩获得的好处都需要拥有娴熟的 Oracle CBO 技能的资深 DBA 进行适当规划才能获得。

另一方面,表压缩是在 Oracle 9i release 2 中引入的。它可以用于压缩整个表、表分区和物化视图。压缩可应用于所有分区或部分分区。虽然表压缩也可以用于不分区的表,但是在 OLTP 工作负载中将表压缩应用于不分区的表并不可取,因为插入和更新性能会受到损害。在 Oracle 表压缩中,数据库块中重复的值将被去除,信息被存储起来,以便重新创建块中未压缩的数据。

下面的例子展示如何创建采用压缩的分区表。

清单 6. 创建采用压缩的表

CREATE TABLE costs_demo (
prod_id NUMBER(6), time_id DATE,
unit_cost NUMBER(10,2), unit_price NUMBER(10,2))
PARTITION BY RANGE (time_id)
(PARTITION costs_old
VALUES LESS THAN (TO_DATE('01-JAN-2003', 'DD-MON-YYYY')) COMPRESS,
PARTITION costs_q1_2003
VALUES LESS THAN (TO_DATE('01-APR-2003', 'DD-MON-YYYY')),
PARTITION costs_q2_2003
VALUES LESS THAN (TO_DATE('01-JUN-2003', 'DD-MON-YYYY')),
PARTITION costs_recent VALUES LESS THAN (MAXVALUE));

要想将一个表转换成压缩的表,应该使用 alter table <table name> move compress。但是,压缩的表不允许添加或删除列。

在 DB2 9.7 中,行压缩(也称为深度压缩)通过把跨行重复出现的值模式替换为更短的符号字符串来压缩数据行。在 DB2 9.7 提供的数据压缩技术中,行压缩在节省存储空间方面最为极端。行压缩要求创建一个词典,它存储重复的模式或条目与数字键之间的映射。压缩算法足够智能,不会压缩那些对节省磁盘空间帮助不大的行。

DB2 的行压缩不像 Oracle 的键压缩,它不需要指定键。

可以通过 CREATE TABLE 或 ALTER TABLE 命令在表级启用压缩。例如:

清单 7. 用 COMPRESSION YES 创建/修改表

CREATE TABLE Sales COMPRESS YES
ALTER TABLE Sales COMPRESS YES

要想使用 DB2 Control Center 取得相同的效果,在列定义过程中(表创建向导中的第二步),要确保选中面板底部的复选框 Store table data in a compressed format(如下图所示)。

图 12. DB2 Control Center - 创建采用压缩的表



只有在执行 REORG 的时候才构建表词典,之后就可以压缩表中的数据。对于以后的每次 REORG 操作,更新表词典。被压缩的数据同时存放在磁盘上和内存中,DB2 还压缩存储在日志文件中的用户数据,以便减少日志文件大小。

注意,分区表的每个分区可以有不同的压缩词典,在 DPF 中一个表的每个分区也可以有不同的压缩词典。

除了数据行压缩,DB2 9.7 提供的其他压缩机制包括:

NULL 值和默认值压缩 (V8 GA ):对可变长列中的零长度空数据和系统默认值进行压缩。
多维聚簇 (V8 GA):通过使用块索引,数千个记录共用一个索引条目,实现索引压缩。
数据库备份压缩 (V8 FP4):通过压缩产生较小的备份映像。
XML 解析

回页首
自治特性

Oracle 11i 在调优方面做了一些改进。Oracle 将以下方面的调优自动化了:

Redo Logfile Sizing Advisor —— 此特性推荐重做日志文件的最佳大小,从而避免因频繁出现的检查点而导致过多的磁盘 I/O。
Automatic Checkpoint Tuning —— Oracle 数据库现在可以自调优检查点,从而取得良好的恢复速度,同时降低对正常吞吐量的影响。不再需要设置任何与检查点相关的参数。

Automatic Shared Memory Tuning —— Automatic Shared Memory Tuning 通过自调优算法自动地配置与 System Global Area (SGA) 内存相关的参数(缓冲区缓存、共享池)。它简化了数据库的配置,确保最高效地利用可用内存并提高性能。

Transaction Rollback and Recovery Monitoring —— 此特性让您能够估计回滚一个事务要花多少时间。还可以监视被恢复的事务的进度,并估计事务恢复的平均速度。

SQL Tuning —— SQL Tuning Advisor 自动地调优高成本的 SQL 语句。
Automatic Storage Manager —— Automatic Storage Manager (ASM) 简化对与 Oracle 相关的文件的管理。

Oracle 还提供一些 Advisor,比如 Segment Advisor 和 Undo Advisor。Segment Advisor 根据对象内的空间碎片化程度,给出是否应该对对象执行新的在线收缩操作的建议。另外,这个 Advisor 还提供关于段的历史增长趋势的报告,特别是能为容量规划提供有效的信息。

另一方面,Undo Advisor 帮助管理员在 flashback 和非 flashback 特性中调整撤消表空间大小时做出正确的判断。它为管理员适当地设置 UNDO_RETENTION 提供建议,以避免快照过于陈旧的问题。

DB2 9.7 有几个自治特性,它们帮助管理自配置、自治愈、自优化和自保护的 DB2 环境。自治计算能够感知并响应发生的情况,从而让数据库管理员不必承担管理计算环境的负担。

自动内存调优

DB2 9.7 提供一个称为 Self Tuning Memory Manager 的自调优内存特性,它会自动地为几个内存配置参数设置值,从而简化内存配置任务。自动调优器充当分派器的角色,它算出可用的内存资源,动态地将它们分派给数据库的一些内存消费者。自调优内存只适用于单一分区数据库。

自动配置

可以使用 AUTOCONFIGURE 命令计算并显示缓冲区池大小、数据库配置和数据库管理器配置参数的初始值,还可以应用推荐的值。

自动存储管理

自动存储会跨磁盘和文件系统自动地增加数据库的大小,由于它自动增加数据库大小,因此 DBA 不需要管理存储容器。当在 DB2 9.7 中创建数据库时,自动存储管理特性是默认启用的。

自动维护

DB2 9.7 的自动维护功能用于自动地执行以下维护操作:

自动数据库备份。能够在需要时执行完整数据库备份。
自动统计信息收集。DB2 判断需要哪些统计信息以及哪些需要更新,然后在后台自动地运行 RUNSTATS 实用程序。
自动表和索引重组。DB2 定期检查已经更新其统计信息的表和索引,判断它们是否需要重组,当需要时安排执行这些操作。

回页首
工具

我们来看看不同领域的一些工具,比如数据库创建和维护、网络、管理 GUI、性能调优、数据移动和备份恢复工具。图 13 显示 DB2 9.7 GUI 工具。

图 13. DB2 9.7 GUI 工具



让我们看看类似的任务在 Oracle 和 DB2 9.7 中是怎样执行的。

数据库创建和维护

Oracle 提供 Database Configuration Assistant (dbca) 作为创建数据库的 GUI 工具。对于数据库维护,Oracle 提供 Oracle Enterprise Manager。DB2 数据库则可以通过 DB2 Control Center 创建和维护。

网络

Oracle 提供 Network Configuration Assistant (netca) 来进行网络配置。也可以使用 Oracle Network Manager 来配置服务名、监听器、配置文件和 Oracle 名称服务器。DB2 使用 CATALOG 命令为节点和数据库建立编目。还可以使用 DB2 命令行或 DB2 Configuration Assistant GUI 执行编目。

管理

Oracle Enterprise Manager 提供针对管理员日常任务的许多管理功能。DB2 Control Center 也提供与 Oracle Enterprise Manager 类似的功能。除了 DB2 Control Center 外,还可以使用 DB2 命令行处理程序发出 DDL 和 DML 语句。此实用程序类似于 Oracle 的 SQLPLUS 实用程序。图
14 显示 DB2 命令行处理程序。

图 14. DB2 命令行处理程序



还可以在 Command Center 中发出命令,如
图 15 所示。

图 15. Command Center GUI(DB2 命令行处理程序的 GUI 版本)



性能调优

Oracle Enterprise Manager 附带 Change Management Pack、Tuning Pack 和 Diagnostic Pack。DB2 则提供 Activity Monitor、Event Analyzer、Health Center、Indoubt Transaction Manager 和 Memory Visualizer 作为用于性能调优任务的 GUI 工具。

数据移动

Oracle 提供 SQL Loader (sqlldr) 用于装载分界文本格式的数据。Import (imp) 和 export (exp) 可用于执行逻辑导入和导出。DB2 提供类似的导入、导出和装载实用程序。对于跨平台的数据移动,DB2 提供 db2move 实用程序。

备份和恢复

Oracle 提供 Recovery Manager 作为热备份工具。在 DB2 中,可以使用 backup 命令或 DB2 Control Center 备份数据库。

Oracle 11g Enteprise Manager 附带新的性能概况图表。增强的 Oracle Enterprise Manager HTML 界面为所有与数据库性能相关的统计信息提供一个集中的访问点,为全面的监控和诊断提供了方便。

除了随 DB2 9.7 发布的界面外,还有一个免费的应用程序开发工具 IBM Data Studio (Data Stuidio),它是基于 Eclipse 框架的。Data Stuidio 是用于创建、编辑、调试、部署和测试 DB2 存储过程和用户定义函数的一站式中心。还可以使用 Data Stuidio 开发 SQLJ 应用程序,以及创建、编辑和运行 SQL 语句和 XML 查询。

可以从 developerworks 网站下载
IBM 软件下载:IBM Data Studio V2.2。

要想了解关于 IBM Data Studio 的更详细的信息,请阅读 developerWorks 中的这篇
教程。要想了解示例和特性,请参考 developerWorks 中的
IBM Data Studio Features and Benefits 页面。

回页首
结束语

在本文中,我们借助您当前已有的关于 Oracle 11g 的知识,对 DB2 9.7 for Linux, UNIX and Windows 进行了介绍。我们简要地描述了 DB2 架构、后台进程、内存模型、安全性、工具等方面。Oracle 与 DB2 9 之间有很多类似之处,我们也指出了它们之间的一些差异,以便您能借助已有的知识成功地掌握 DB2 9.7。

表 3 总结了我们讨论过的 Oracle 与 DB2 之间的相同点与不同点。

表 3. Oracle 与 DB2 概念总结

OracleDB2注解
实例实例一个 DB2 实例可以包含多个数据库。
数据库数据库
initSID.ora 或 SPFILEDBM CFG 和 DB CFGDB2 使用两个级别的配置:数据库管理器配置 (DBM CFG)(实例级)和数据库配置 (DB CFG)(数据库级)。与 Oracle 一样,很多配置参数可以动态更改。
表空间表空间DB2 支持 SMS 和 DMS 表空间。DMS 表空间与 Oracle 的表空间类似。
数据块DB2 支持以下几种页大小:4k、8k、16k 和 32k。一个行必须能够装入其中一种数据页中。它不能像在 Oracle 中那样跨多个页。
盘区盘区
数据文件DMS 表空间容器用于 DMS 表空间的容器可以是原始设备,也可以是文件。
重做日志文件事务日志文件
数据缓冲区缓冲区池DB2 没有预定义的缓冲区池,但是可以根据需要创建任意数量的缓冲区池。在创建具有给定页大小的表空间时,必须预先存在一个具有给定页大小的缓冲区池。
SGA数据库管理器共享内存和数据库共享内存
数据词典编目
库缓存包缓存
大型池实用程序堆
数据词典缓存编目缓存
SYSTEM 表空间SYSCATSPACE 表空间
参考资料

学习

文章 "在数周内从 Oracle 或 Sybase 迁移到 DB2"(Data Management 杂志,2010 年 10 月)包含对 DB2 和 Oracle 术语和技术的有益对比。

文章 "DB2 9.7:在 DB2 9.7 for Linux, UNIX, and Windows 上运行 Oracle 应用程序"(developerWorks,2010 年 5 月)讨论 DB2 9.7 中对 Oracle 的 SQL 和 PL/SQL 方言的开箱即用支持。

"DB2 9.7:IBM Data Movement Tool"(developerWorks,2010 年 11 月):讨论如何轻松地把数据从源数据库转移到 DB2。

Redbooks® Oracle to DB2 Conversion Guide: Compatibility Made Easy 是一份 Oracle 到 DB2 迁移指南。它描述 DB2 新的 Oracle 数据库兼容特性、迁移到 DB2 方面的新技术和最佳实践以及如何处理一些常见的场景。

文章 "DB2 通用数据库进程全接触"(developerWorks,2003 年 4 月)描述 DB2 在 Linux、UNIX 和 Windows 上使用的进程,详细解释它们的作用。

IBM Redbooks
Oracle to DB2 Conversion Guide for Linux, UNIX, and Windows 详细讲解从 Oracle 迁移到 DB2 的步骤。

访问 developerWorks 中的 DB2 for Linux, UNIX, and Windows 产品专题,阅读文章和教程并参阅其他参考资料,进一步拓展您在 DB2 方面的技能。

了解 DB2 Express-C,这是为社区提供的免费版本的 DB2 Express Edition。

获得产品和技术

下载 试用版:IBM DB2 for Linux, UNIX, and Windows 的免费试用版。

现在可以免费使用 DB2。下载
IBM 软件下载:IBM DB2 Express-C 9.5,这是为社区提供的免费版本的 DB2 Express Edition,它具有与 DB2 Express Edtion 相同的核心数据特性,为构建和部署应用程序提供了坚实的基础。

下载 IBM 产品评估试用版软件,开始使用来自 DB2、Lotus®、Rational®、Tivoli® 和 WebSphere 的应用程序开发工具和中间件产品。

讨论

参与论坛讨论

参与 developerWorks 博客 并加入
developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。

作者简介

Suita Gupta 是位于英国 Farnborough 的 IBM GTS Information Management Support 团队的成员。她向客户提供 DB2 技术支持。Suita 曾经在马来西亚吉隆坡的 IBM Innovation Center 担任技术顾问,帮助 ISV 实现 DB2 迁移。

Allan Tham 为 IBM 业务伙伴提供 Content Manager 售前支持。他帮助业务伙伴解决大量的技术问题。他获得了 DB2 Content Management 管理方面的认证。在加入 IBM 前,Allan 在最终用户环境中工作,在那里,他是一位有 3 年经验的 Oracle DBA。

Raul F. Chong 是 IBM 多伦多实验室的 IBM Information Management Cloud Computing Center of Competence 部门的一名 DB2 项目经理。Raul 是 DB2 管理和应用程序开发方面的 DB2 认证解决方案专家。自 1997 年起,他曾在 IBM 担任多个职务,同时也是 Understanding DB2 - Learning Visually with Examples 2nd Edition
(ISBN-10: 0131580183) 一书的主要作者。



Alain Fisher 是位于 North Harbour 的 IBM GTS Information Management Support 团队的成员。他为英国和爱尔兰的客户提供 DB2 技术支持。他以前支持 Microsoft 桌面和服务器产品并从第一版开始支持 VMware ESX 服务器。

本文转载: https://www.ibm.com/developerworks/cn/training/kp/dm-kp-oracledb2introduction/?cmp=dwskl&cpb=dw&ct=dwcon&cr=cn_CSDN_test&ccy=cn
https://www.ibm.com/developerworks/cn/data/library/techarticle/dm-0401gupta/

https://www.ibm.com/developerworks/cn/data/library/techarticle/dm-0401gupta/#resources
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐