Suita Gupta, IBM Malaysia Allan Tham, IBM Malaysia Raul Chong, IBM Toronto
2004 年 2 月 如果您是一位有兴趣培养 DB2 Universal Database 技能的数据库专家,那么您很可能具备了其他关系数据库产品的数据库技能。本文展示了如何利用您现有的 Oracle 9i 的知识快速获得 DB2 UDB for Linux、UNIX 和 Windows Version 8 方面的技能。 简介 如果您是一位有兴趣培养 DB2 Universal Database TM技能的数据库专家,那么您很可能已经具备了其他关系数据库产品的数据库技能。在 developerWorks 里的上一篇文章中,我谈到了如何利用您的 MS SQL Server 2000 技能来学习 DB2 UDB for Linux、UNIX 和 Windows。您熟悉的是 Oracle 而非 SQL Server 吗?如果是的,就请阅读下去。这一篇文章中,我将展示如何利用您现有的 Oracle 9i 的知识快速获得 DB2 UDB for Linux、UNIX 和 Windows Version 8 方面的技能。 本文中,术语“Oracle”指的是 Oracle 9i Release 2,“DB2 UDB”指的是 DB2 UDB for Linux、UNIX 和 Windows Version 8。 系统结构概述 首先,我们需要理解 Oracle 所使用的体系结构以及如何将之与 DB2 UDB 相比较。 图 1展示了 Oracle 的系统结构。 图 2展示了 DB2 UDB 的系统结构,请将两者做一下比较。请参照这些图来阅读本文以便理解。 图 1. Linux、UNIX 和 Windows Version 9.2 上的 Oracle 系统结构
图 2. Linux、UNIX 和 Windows Version 8 上的 DB2 UDB 系统结构
实例 实例(instance)的概念在 Oracle 和 DB2 UDB 中是相似的。在这两种情况下,实例都是指后台进程与共享存储器的组合。两者之间最大的差别就是,Oracle 中每个实例只包含一个数据库,而 DB2 UDB 中多个数据库可以共享一个实例。 因为数据库和实例之间存在一对一的对应关系,所以在 Oracle 中要通过用 CREATE DATABASE 命令创建数据库来显式地创建实例。另外,您也可以使用 Database Configuration Assistant(数据库配置助手)或 ORADIM 工具(Oracle 9i 中提供的新选项)在机器上创建 Oracle 实例。您还必须提供某些信息,包括系统标识符(System Identifier,SID)或服务名、实例口令、最大用户数、启动模式,等等。同样,可以使用带有 DELETE 选项的 ORADIM 工具来删除该实例。您也需要传递 SID 或服务名。除非您在安装过程中创建新的数据库,否则新安装 Oracle 时是不会创建默认实例的。 在 DB2 UDB 中,当将产品安装在 Windows 平台之后,将默认地创建“DB2”实例。Linux 和 UNIX 中,其默认实例名为“db2inst1”。若要在同一台机器上创建另一个实例,您只需执行命令 db2icrt <instance name> 。 图 3显示了 DB2 UDB Control Center GUI 中默认的 DB2 UDB 实例“DB2”(Windows 中)和用 db2icrt 命令创建的其他两个实例。 图 3. 显示有 DB2 UDB 实例的 DB2 UDB Control Center GUI
要从命令行接口引用一个给定的 DB2 UDB 实例,请使用 DB2INSTANCE 环境变量。该变量让您指定所有命令将应用到的当前的活动实例。例如,如果将 DB2INSTANCE 设置成 PROD,然后您发出 create database MYDB1 命令,那么您将创建和实例 PROD 关联的数据库。如果您想在实例 DB2 上创建该数据库,则必须首先将变量 DB2INSTANCE 的值更改为 DB2。这与 ORACLE_SID(System Identifier)类似,它也是用于在实例之间进行切换。 标识您想使用的实例的另一个简单方法是使用如 图 3所示的 DB2 UDB Control Center GUI。您可能必须通过右击 Instances并选择 Add 来将实例添加至 GUI 中,才能在该工具中看到这个新实例的条目。您可以执行命令 db2idrop <instance name> 来删除 DB2 UDB 中的实例。 总而言之,在 Oracle 中,Database Configuration Assistant 可用于创建、修改、启动、停止和删除实例,而在 DB2 UDB 中,则可使用 Control Center GUI 来达到类似的目的。另外,Oracle 实例与数据库只能有一对一的关系,而在 DB2 UDB 中就不是这样的。多个数据库可以存在于一个 DB2 UDB 实例中并且可被其同时使用。 数据库 在 Oracle 中,既可以使用 CREATE DATABASE 命令手工创建数据库,也可以使用 Database Configuration Assistant 来创建。手工创建数据库在执行 CREATE DATABASE 命令之前,还必须执行一系列步骤,包括设置 OS 变量、准备参数文件以及创建口令文件。 元数据信息由数据字典(Data Dictionary)存储并管理,而数据字典是由基本表以及相应的视图组成的。基本表是在数据库的创建过程中自动创建的,而视图则是通过运行 catalog.sql 和 catproc.sql 脚本构造的。 因而,将 Oracle 数据库看作 3 种文件类型的集合: - 数据文件(Data File):包含真正的数据,即数据库的物理实现(类似于 DB2 UDB 中的容器)。
- 重做文件(Redo File):相当于 DB2 UDB 中的事务日志。
- 控制文件(Control File):包含用以维护和验证数据库完整性的信息。
正如图 2 所示,在 DB2 UDB 中,一个实例可以容纳多个数据库。每个数据库是真正封闭、独立的单元。每个数据库都有自己的目录表空间、临时表空间和用户表空间,它们是随数据库的成功创建而被默认创建的。DB2 UDB 包含了一个称作 系统数据库目录(system database directory)的二进制文件,里面有您可以从 DB2 UDB 机器连接的所有数据库的条目。这个目录在实例级别保存。 当创建一个实例时,默认情况下不创建数据库。您需要使用 create database 命令显式地创建数据库。您也可以使用如 图 4和 图 5所示的 Control Center 来创建数据库。 图 4. 使用 Control Center GUI 创建 DB2 UDB 数据库
图 5. 使用 Control Center GUI 创建 DB2 UDB 数据库(续)
在 图 5中,您也可以看到单击 Show Command时会发生什么情况。所有的 DB2 UDB Control Center GUI 屏幕都会显示实际上在后台执行的 SQL 语句或命令。这些命令能够保存在脚本中以供今后执行,或者被复制并从命令行处理器(Command Line Processor,CLP)工具或 Command Center GUI 工具中执行。这两个工具分别等同于 Oracle 的 SQL*Plus 和 iSQL *Plus。 可以通过使用“DROP DATABASE”命令或者从 DB2 UDB Control Center GUI 删除 DB2 UDB 数据库。Oracle 中没有这样的命令,所以是通过删除所有关联的数据文件来删除数据库的。 一个实例内的数据库通常不会相互交互。然而,如果应用程序需要与不止一个数据库交互,那么可以通过启用 联邦(federation)支持来满足此要求。请参阅 参考资料小节来获取有关联邦的一篇文章。 容器、表空间、缓冲池和页 在 Oracle 中,数据实际存储于称作数据文件的文件中。这类似于 DB2 UDB 的 容器,它也是数据实际存储的地方。每个 Oracle 数据库包含一个名为 SYSTEM 的表空间,是在创建数据库时由 Oracle 自动创建的。而用户、临时和索引数据的其他表空间需要在创建了数据库之后创建,并且在使用这些表空间之前要给它们指派用户。 在 DB2 UDB 中, 表空间(table space)是逻辑对象,用作逻辑表和物理容器之间的层。当创建一个表空间时,您可以将之和一个特定的缓冲池(数据库高速缓存)关联起来,并关联到特定的容器。这就给了您管理性能上的灵活性。例如,如果存在一个“热门”表,您就可以在一个单独的表空间中定义它,而这个表空间又关联到独立的缓冲池。这样有助于确保该表的数据连续高速缓存在内存中。 当使用 CREATE DATABASE 命令的默认值创建数据库时,DB2 UDB 中将自动创建三个默认的表空间。 表 1描述了默认的 DB2 UDB 表空间: 表 1. 当用默认值创建数据库时,默认创建的 DB2 UDB 表空间
|