Chinaunix首页 | 论坛 | 博客
  • 博客访问: 650386
  • 博文数量: 789
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 4985
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-28 09:29
文章分类

全部博文(789)

文章存档

2011年(1)

2008年(788)

我的朋友

分类:

2008-10-28 09:45:47


  您熟悉的是 而非 SQL Server 吗?如果是的,就请阅读下去。这一篇文章中,我将展示如何利用您现有的 9i 的知识快速获得 DB2 UDB for Linux、UNIX 和 Version 8 方面的技能。
  
  本文中,术语“Oracle”指的是 Oracle 9i Release 2,“DB2 UDB”指的是 DB2 UDB for Linux、UNIX 和 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
  
  图 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 来删除 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 表空间
   

  因为 DB2 UDB 中的数据库是独立的单元,因此不能跨数据库共享表空间。又因为表空间只在一个数据库中是已知的,所以两个不同的数据库可以有同名的表空间。您可以在 图 2 中看到,数据库 MYDB1 有一个名为 MYTBLS 的表空间,而数据库 MYDB2 也有一个同名的表空间。
  
  DB2 UDB 表空间可以被分为 SMS(系统管理空间)或 DMS(数据库管理空间)。SMS 表空间由操作系统管理并仅可以是目录。它们会随着需要自动地增长,因此 SMS 提供了较好的性能且不需要太多管理。DMS 表空间由 DB2 UDB 管理,可以是文件或裸设备。该类型的表空间能获得最佳性能,但需要一定的管理。例如,您需要提前指定希望分配给表空间的空间量,因为增长不是自动进行的。
  
  Oracle 没有给其存储模型提供 SMS 概念,但是它的数据文件与 DB2 UDB DMS 表空间相类似。也就是说,您可以通过给表空间添加数据文件,或者通过增大数据文件,或者通过添加新的表空间来增加数据库的大小。
  
  下面的 表 2 显示了 Oracle 数据库或表空间如何与 DB2 UDB 数据库或表空间一一对应。
  
  
表 2. Oracle 数据库如何与 DB2 UDB 数据库或表空间一一对应
   

  如前面所示,Oracle 的数据缓冲区概念相当于 DB2 UDB 的缓冲池;然而,DB2 UDB 允许存在多个缓冲池。没有预先定义可创建的缓冲池数目,而且这些缓冲池可以拥有任意名字。
  
  Oracle 块(block)的概念与 DB2 UDB 的页极其相似。DB2 UDB 页的大小可以为 4k、8k、16k 或 32k。一个表行必须仅放入一页;与 Oracle 一样,它不能垮越到其他页。
  
  对象名称
  
  Oracle 对象名称的形式如下:
  
  [Schema_name.]object_name[@database]
  
  在 DB2 UDB 中,对象的结构也由两部分组成:
  
  Schema_name.object_name
  
  与在 Oracle 中一样,DB2 UDB 用于从逻辑上对对象进行分组。然而,一个重要差别就是在 DB2 UDB 中,模式名不一定和用户 ID 相匹配。任何具有名为 IMPLICIT_SCHEMA 特权的用户都可以使用不存在的模式创建对象。例如,假设“Peter”具有 IMPLICIT_SCHEMA 特权,并执行了以下命令:
  
  CREATE TABLE WORLD.TABLEA (lastname char(10))
  
  在这种情况下,创建了表 WORLD.TABLEA,其中 WORLD 是新创建的模式。如果 Peter 没有显式地指明该模式,那么表 PETER.TABLEA 也会被创建,因为默认使用了连接 ID。
  
  在 DB2 UDB 中,在发出数据库特定的命令之前您总是连接到一个数据库;因此在这种体系结构下,对象名称不需要包含数据库名。
  
  表、视图和索引
  
  表、视图和索引在 Oracle 和 DB2 UDB 中基本上是相同的。
  
  DB2 UDB 提供了名为 Design Advisor 的工具,可用于为特定的查询或工作负载推荐索引。可以从 DB2 UDB Control Center 或使用 db2advis 命令从 DB2 UDB CLP 调用 Design Advisor。在 DB2 UDB 中,索引直接被绑定到表的定义中。例如,当使用 DMS 表空间时,您可以指定索引可以驻留在哪个表空间里,如下所示:
  
  CREATE TABLE mytable (col1 integer, col2 char(10)) in tbls1 index in tbls2
  
  上面的例子显示该表的数据将存储在表空间“tbls1”中,而索引页则将存储在表空间“tbls2”中。这与 Oracle 语法是不同的,Oracle 中的 CREATE INDEX 语句提供了一个选项,用以指定索引将驻留的表空间。
  
  另外,在 DB2 UDB 中一旦创建了索引,您就不能更改索引定义的任何子句。您需要通过删除索引然后再次创建它来实现更改。
  
  与在 Oracle 中一样,DB2 UDB 表、视图和索引可以在不同的数据库中拥有相同的名称。同一数据库中的表和视图必须拥有不同的名称,但是创建与现有的表或视图同名的索引是允许的。
  
  存储过程、触发器和用户定义函数(UDF)
  
  在 Oracle 环境中有许多方法创建并访问存储过程、触发器和函数。PL/SQL 是 SQL 的面向对象(OO)的过程化扩展,支持数据的操纵(DML)、流程控制、变量和常量的声明、过程和函数定义以及诸如嵌套表和变长数组(varray)的 OO 数据类型。Oracle 还在其引擎中包含了 JVM。在 Oracle 数据库中可使用 SQLJ 将存储过程、函数和触发器作为类来创建、存储和执行。Oracle 还支持 Type 1 至 4 的 JDBC 驱动程序。
  
  DB2 UDB 存储过程可以用其预编译器支持的所有语言来编写,包括 、C、、REXX、Fortran 和 COBOL。然而,我们推荐使用 SQL 过程化语言(SQL PL),它与 Oracle 的 PL/SQL 相当类似。因为 SQL PL 存储过程被首先转换为 C,所以需要一个 C 编译器来开发这些存储过程。存储过程的 C 语言实现可以提供性能优势,因为代码只编译一次(尤其当运行在无保护方式下);然而,它也在开发系统中增添了对 C 编译器的需求。在 DB2 UDB 的未来发行版中,希望能在无需 C 编译器的情况下支持 SQL PL 存储过程。DB2 UDB 存储过程开发还使用 Type 1 至 4 的 JDBC 驱动程序来支持 SQLJ 和 。
  
  触发器和函数的开发可以使用内联的 SQL/PL,这不需要 C 编译器。通过该方法可以支持 SQL PL 语句的一个子集。使用 DB2 Development Center 工具可易于创建、构建、调试和部署 DB2 UDB 存储过程和用户定义函数。
  
  配置文件
  
  传统上,Oracle 将所有会话和系统相关的参数存储在一个文本文件中,该文件通常称作 initSID.ora。然而,由于该文本文件具有非持久的本质,从 Oracle 9i 开始,Oracle 就引入了参数文件(SPFILE),这是一个存储在上的二进制参数文件。它在实例停止和启动的过程中是持久存在的。然而当 SPFILE 不可用时,仍然使用 initSID.ora 文件。引入 SPFILE 之前,任何影响参数的 ALTER SYSTEM 和 ALTER SESSION 命令只在那个实例或会话期间有效。每当希望回跳数据库实例时,DBA 都必须手工修改文本文件 initSID.ora。网络访问配置一般存储在用于侦听器的 listener.ora 中和用于客户机访问的 tnsnames.ora 中。
  
  在 DB2 UDB 中,配置参数同样存储在实例级别(称为 数据库管理器 配置文件)和数据库级别(称为 数据库 配置文件)。这些参数大多数都可以被动态更改,即在对于参数值的更改生效之前,不需要停止并重启该实例或者强制所有连接。
  
  如果您想要从 CLP 手工更改特定的数据库管理器参数,请使用命令 UPDATE DBM CFG USING
  
  如果您想要从 CLP 手工更改特定的数据库参数,请使用命令 UPDATE DB CFG FOR USING
  
  这些命令相当于 Oracle 的 ALTER SYSTEM 和 ALTER SESSION。或者,您可以使用 Control Center 来查看并更改这些参数的值;如果右击一个给定的实例并选择 Configure Parameters,您将会看到 图 6 所示的窗口。
  
  
图 6. DB2 UDB 数据库管理器配置参数(实例级别)
   

  在数据库级别,右击一个给定的数据库并选择 Configure Parameters,将显示 图 7 所示的窗口。
  
  
图 7. 数据库配置参数(数据库级别)
   

  DB2 UDB 提供了许多可以用来配置系统的参数;然而,如果您喜欢用一种简单的方法来自动配置系统,请使用 autoconfigure 命令(或 Configuration Advisor GUI),它根据您提供的一些信息,将数据库管理器和数据库配置参数设置成最佳值。图 8 显示了 Configuration Advisor。
  
  
图 8. DB2 UDB Configuration Advisor
   

  除了配置文件之外,DB2 UDB 通常还把 DB2 注册表变量用于特定于平台的配置。请注意,DB2 注册表变量与 Windows 注册表没有任何关系。用户可使用 db2set 命令来查看并更改这些变量。
  
  连通性(网络访问)信息存储在系统数据库目录、本地数据库目录和节点目录中。这些都是二进制文件并且只能用 CATALOG 和 UNCATALOG 命令进行修改。
【责编:admin】

--------------------next---------------------

阅读(244) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~