系统结构概述

首先,我们需要理解 Oracle 使用的架构,并理解它与 DB2 的不同之处。图 1 展示了 Oracle 的系统结构。将该图与 图 2 进行比较,后者显示了 DB2 的系统结构。在阅读本文的时候,为便于理解,可以参照这两个图。
图 1. Oracle on Linux, UNIX, and Windows Version 10.2 的系统结构

图 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 或服务名称。除非在安装过程中创建一个新的数据库,否则在以 fresh 方式安装 Oracle 的时候,不会创建缺省的实例。

在 DB2 中,当在 Windows 平台上安装了该产品之后,便缺省地创建了一个实例 “DB2″。在 Linux 和 UNIX 中,缺省的实例名称为 “db2inst1″。若要在同一台计算机上创建另一个实例,只需执行命令 de>db2icrt <instance name>de>。

图 3 展示了缺省的 DB2 实例 “DB2”(在 Windows 中)和从 DB2 Control Center GUI 中用 db2icrt 命令创建的另外两个实例。

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

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

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

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


回页首

数据库

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

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

因此,Oracle 数据库可看作包含 3 种类型的文件的一个集合:

  1. 数据文件(Data File):包含实际的数据,数据库的物理实现。(类似于 DB2 中的容器。)
  2. 重做文件(Redo File):相当于 DB2 中的事务日志(Transaction Log)。
  3. 控制文件(Control File):包含用于维护和验证数据库完整性的信息。

在 DB2 中,一个实例可以包含多个数据库,如 图 2 所示。每个数据库都是一个封闭的、真正独立的单元。每个数据库有其自己的编目表空间、临时表空间和用户表空间,这些表空间是在创建数据库时缺省创建的。DB2 包含一个称为系统数据库目录(system database directory) 的二进制文件,其中包含可从 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 语句或命令。这些命令可以保存在一个脚本中,以便在以后执行,或者也可以将它们复制到 Command Line Processor(CLP)或 Command Center GUI 工具中,在这些工具中执行。这些工具分别相当于 Oracle 的 SQL*Plus 和 iSQL *Plus。

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

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


回页首

容器、表空间、缓冲池和页

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

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

在 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 中一样,仅在数据库级保存该信息
Data Dictionary(包含表和视图形式的元数据),驻留在 SYSTEM 表空间中 系统编目表(由 SYSIBM 模式标识),系统视图(由 SYSCAT 或 SYSSTAT 模式标识),驻留在 SYSCATSPACE 表空间中
SCOTT 数据库 SAMPLE 数据库
TEMP 表空间 System Temporary 表空间(缺省情况下名为 tempspace1)
UNDO 表空间 N/A
USER 表空间 用户表空间。缺省情况下,USERSPACE1 一般是在数据库创建之后才创建的

前面已指出,Oracle 的数据缓冲区概念相当于 DB2 的缓冲池。但是,DB2 允许多个缓冲池存在。在 DB2 中不需要预先定义可创建的缓冲池的数量,缓冲池的名称可以是任意的。

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

Oracle与DB2的区别的更多相关文章

  1. 你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗

    ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性:    Oracle.MYSQL与DB2可在所有主流平台上运行:    SQL Server只能在Windows下运行: --安 ...

  2. 实践Oracle与DB2区别及问题解决

    实践Oracle与DB2区别及问题解决 项目进入开发阶段的时候,为了方便,一直使用Oracle数据库进行开发, 所以很多sql语句都是在oracle能正常创建的,后期由于项目中嵌入了IBM的产品及其他 ...

  3. oracle与DB2

    1.体系结构,DB2的实例和数据库分开的做法,我个人还是比较喜欢的,因为实例可以创建多个,数据库的恢复直接恢复到实例下就可以了,相对ORACLE简单多了. 2.管理工具,DB2的管理工具做得太简陋了, ...

  4. oracle与sqlserver部分区别

    oracle和sqlserver的区别:1,执行修改操作要接commit,不然数据仅仅只是查看,并不是提交数据2,oracle不能使用select 字段 这种查看方式查看数据:3,oracle存储过程 ...

  5. Oracle nvchar2和varchar2区别分析

    Oracle nvchar2和varchar2区别分析: [注意]VARCHAR2是Oracle提供的特定数据类型,Oracle可以保证VARCHAR2在任何版本中该数据类型都可以向上和向下兼容.VA ...

  6. Oracle primary,unique,foreign 区别,Hibernate 关联映射

    Oracle primary,unique,foreign 区别 转:http://www.cnblogs.com/henw/archive/2012/08/15/2639510.html NOT N ...

  7. Oracle/Mysql/SqlServer函数区别

    mysql日期和时间格式转换 Linux scp 使用详解 Oracle/Mysql/SqlServer函数区别 2011-07-01 12:34:36|  分类: Mysql技术 |  标签:mys ...

  8. ORACLE/MYSQL/DB2等不同数据库取前几条记录

    选取数据库中记录的操作是最基础最频繁的,但往往实际应用中不会这么简单,会在选取记录的时候加上一些条件,比如取前几条记录,下面就总结了如何在ORACLE/MYSQL/DB2等一些热门数据库中执行取前几条 ...

  9. Oracle、DB2、MySql、SQLServer JDBC驱动

    四种数据库JDBC驱动,还列出了连接的Class驱动名和Url Pattern,DB2包括Type 2.Type 3和Type 4三种模式.注意驱动包名称的大小写. Oralce连接驱动包名和URL ...

随机推荐

  1. Java中普通代码块,构造代码块,静态代码块的代码演示样例及区分

    //运行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 当中静态代码块仅仅运行一次.构造代码块在每次创建对象是都会运行. 1 普通代码块 <span ...

  2. Windows7 32位机上,OpenCV中配置GPU操作步骤

    1.  查看本机配置,查看显卡类型是否支持NVIDIA GPU: 2.  从http://www.nvidia.cn/Download/index.aspx?lang=cn下载最新驱动并安装: 3.  ...

  3. WP系统推广难的原因之中的一个之我见

    个人也觉得如今的Android市场几家独大,竞争太激烈.利润空间挤压太严重,有实力的厂家不如尝试剑走偏锋,在其它大佬都还没跟进的时候,把市场投向WP.先入为主,不失为良策! 话说Microsoft不开 ...

  4. [RxJS] Stopping a Stream with TakeUntil

    Observables often need to be stopped before they are completed. This lesson shows how to use takeUnt ...

  5. 【转】Cocoa中的位与位运算

    转自:http://www.tuicool.com/articles/niEVjy 介绍 位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常 ...

  6. 查看linux版本和内核信息

    一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [root@localhost ~]# cat /proc/versionLinux version 2.6.32 ...

  7. c#利用VM_COPYDATA实现进程间通信

    c#进程间的通信方式很多种,只会这种,感觉比较简单.不懂原理,能用就行. 假设有两个程序:server(主进程),client(子进程) 1.server端: /*定义一个结构体,用来接收从子进程传过 ...

  8. rsync数据同步配置

    环境配置 操作系统:centos6.4_64bit A服务器IP:192.168.6.128 B服务器IP:192.168.6.129 以A服务器为基准,将A服务器文件同步到B服务器. 步骤如下: 开 ...

  9. UIView /  UIView的布局

    //! 一个视图可以有n个子视图,但是一个视图只能有一个父视图 struct CGRect {   CGPoint origin;   CGSize size; }; CGRectMake(CGFlo ...

  10. mongodb内嵌文档的查询

    本文转自:http://blog.163.com/wm_at163/blog/static/1321734902012526103825481/ 1 > db.blog.findOne() { ...