(转帖)对 DB2 UDB V8 for UNIX、Linux 和 Windows 的生动简介

本文转自IBM DeveloperWorks

出自 Raul F. Chong IBM 多伦多实验室

简介

如果对于 IBM® DB2® Universal Database™(UDB)for Linux、UNIX® 和 Windows®,您还是位新手,或者您正准备参加认证考试,那么本文可能会使您在设法掌握有关 DB2 环境的主要概念方面节省一些时间。

常言道:一图抵千言。尽管 DB2 认证指南(Certification Guide)为您备考作了大量工作,但是它没有为您提供图解形式的 DB2 概述。请在阅读认证指南之前先阅读本文,我相信这会大大地缩短您的准备时间。

在本文中,我使用 DB2 来指代 DB2 通用数据库 V8.1 for UNIX、Linux 和 Windows。我建议您打印本文(使用彩色打印机!)而不要联机阅读,因为我将一直引用下面这张图。首先会简略地说明一下概念,然后在最后一节中我们会使用 案例研究 把这些概念都串起来。

中,我们使用蓝色来表示用于查询配置文件内容的命令,用黑色来表示更改这些内容的语法,并用紫色来显示有关如何使用命令的示例。


图 1 - DB2 V8 环境
DB2 V8 环境

实例

在 DB2 中, 实例 提供了独立的环境,可在其中创建数据库对象并针对这些对象运行应用程序。由于这些环境是独立的,所以两个或更多的单独实例的对象可以有相同的名称。在 图 1 中,有一个名为“MYDB2”的数据库,它与实例“DB2”相关;还有一个同名的数据库,但它与实例“MyInst”相关。实例允许用户具有用于生产、测试和开发目的的不同环境。

以下是一些与实例相关的命令:

  • 通过从命令行处理器(CLP)发出下列命令来显式地创建实例:
    		db2icrt <instance name>

    在 Windows 平台上首次安装 DB2 时,缺省情况下会创建一个称为“DB2”的实例。在 UNIX 环境中,如果您选择创建实例,那么缺省的实例名称为“db2inst1”。

  • 要删除实例,请使用这条命令:
    		db2idrop <instance name>

  • 要启动实例,请使用这条命令:
    		db2start

  • 要停止实例,请使用这条命令:
    		db2stop

创建了实例后,就会生成到 DB2 代码的链接。对于 图 1 中的示例而言,已创建了实例“DB2”和实例“MyInst”,两者都链接至同一段 DB2 代码。

V8 之前,曾有两种实例类型:“DB2”类型和“DAS”类型。V8 中已经除去了 DAS 类型的实例;它的功能已经被作为服务器进程集成到产品中了。

配置标签

和许多其它关系数据库管理系统(RDBMS)一样,DB2 使用不同的机制来管理、监视和控制 DB2 系统的行为。这些机制包括:

环境变量

环境变量是在操作系统级别上定义的变量。例如,在 Windows 2000® 平台中,您可以为一个变量创建新的项,或者通过选择 Control Panel --> System --> Advanced Tab --> Environment Variables 来编辑现有变量的值。在 UNIX 中,您通常可以将安装了 DB2 之后所提供的脚本 db2profile (Bourne 或 Korn shell)或 db2cshrc (C shell)添加到 .login.profile UNIX 初始化文件中。 db2profile/db2cshrc 文件包含了“export”UNIX 命令,这些命令能确保每次调用 shell 时就传递一个 UNIX 环境变量。

最常使用的 DB2 环境变量是“DB2INSTANCE”变量。该环境变量允许您指定当前活动实例,所有命令都将应用于该实例。对于本例而言,如果将 DB2INSTANCE 设置成“MyInst”,那么发出命令“ create database mydb ”会创建出与实例“MyInst”相关的数据库。但是如果您想创建与实例“DB2”相关的该数据库,那么首先您必须将 DB2INSTANCE 变量的值更改成“DB2”。

使用控制面板(在 Windows 中)/db2profile(在 UNIX 中)来设置环境变量的值,将保证您下次打开窗口/会话时该值不变;但是,如果您想在给定的窗口/会话中临时更改该值,那么在 Windows 中您可以使用操作系统的“ set ”命令,或者在 UNIX 中使用“export”命令。例如,在 Windows 平台中,下面这个命令:

set DB2INSTANCE=DB2

 

会将环境变量 DB2INSTANCE 的值设置成“DB2”。使用 set 命令时常犯的错误是在等号(=)前后留有空格。绝对不能有空格!

要查看该变量的当前设置,您可以使用下面三个方法中的任何一个:

echo %DB2INSTANCE%  (Windows only)
set DB2INSTANCE
db2 get instance

 

要获取系统中您可以执行的所有可用实例的列表,请发出下面这个命令:

db2ilist

 

DB2 概要注册表

在 Windows 平台上使用 DB2 时,单词“注册表(Registry)”的使用往往会造成混淆。DB2 概要注册表(Profile Registry)变量与 Windows 注册表变量没有任何关系。过去,对某些环境变量进行更改时,会要求用户重新引导机器。如果所有 DB2 变量都已被定义成环境变量,那么对变量值进行更改将会很麻烦。因此,当时决定将大多数 DB2 变量组成一个专门的 DB2 注册表,在其中进行更改无需重新引导机器。

DB2 概要注册表分成四类;但是下面这两个是最常用的:

  • DB2 全局级概要注册表(Global-Level Profile Registry)
  • DB2 实例级概要注册表(Instance-Level Profile Registry)

两者的主要区别(您从它们的名称就可以看出)是变量适用的级别。全局级概要注册表变量的值适用于所有实例。因此,可以从图中看到,该注册表画在了两个实例框的外面。实例级概要注册表变量的值适用于特定的实例。因此,您可以看到 中那两个实例每个内部都有单独的“Instance-Level Profile Registry”框。

要查看所设置的当前注册表变量,请从 CLP 发出下面这个命令:

db2set -all

 

您可能会得到类似下面这样的输出:

[i] DB2INSTPROF=C:\PROGRAM FILES\SQLLIB
[g] DB2SYSTEM=RAULCHONG

 

正如您可能已经猜测到的那样,[i] 表明该变量是在实例级上定义的,而 [g] 表明它是在全局级上定义的。以下是一些与变量相关的命令:

  • 要查看可以在 DB2 中进行定义的所有注册表变量,请使用这个命令:
    db2set -lr
    

  • 要在全局级上设置特定变量(在这个示例中为 DB2INSTPROF )的值,请使用:
    db2set DB2INSTPROF="C:\PROGRAM FILES\SQLLIB" -g
    

  • 要在实例级上为实例“MyInst”设置变量,请使用:
    db2set DB2INSTPROF="C:\MY FILES\SQLLIB"      -i MyInst 

请注意上面的示例,在两个级别(实例级和全局级)上设置了同一个变量。当注册表变量在不同级别上进行定义时,DB2 总是会选择最低级别的值;在本例中,它将选择实例级的值。

db2set 命令和前一节中的 set 命令一样,等号(=)前后不该留有空格。

某些注册表变量为了使更改生效,要求您停止和启动实例( db2stop/db2start )。另一些注册表变量则没有这个需求。为了安全起见,建议您在对注册表变量作了更改后总是停止和启动实例。

配置参数

配置参数是在两个不同的级别(实例级和数据库级)上定义的。每个级别上的变量都是不同的(不象注册表变量那样可以在不同级别上定义相同的变量)。

在实例级上,变量被存储在数据库管理器配置文件(dbm cfg)中;对这些变量所作的更改会影响与该实例相关的“所有”数据库,这就是图中显示了 dbm cfg 框(每个实例定义了一个),并且该框都显示在数据库框外面的原因。以下是一些与配置参数相关的命令:

  • 要从 CLP 查看 dbm cfg 的内容,请发出下面这个命令:
    db2 get dbm cfg

  • 要更新特定变量的值,请发出下面这个命令:
    db2 update dbm cfg using <parameter> <value>

    例如:

    db2 update dbm cfg using INTRA_PARALLEL YES

V8 之前,对“所有”dbm cfg 变量所作的更改都要求您停止和启动实例( db2stop/db2start )。现在,V8 中有大约 40% 的参数是“可联机配置的”参数;也就是说,不再需要停止和启动实例了。请参考“DB2 V8 管理指南(DB2 V8 Administration Guide)”以获取更多详细信息。

在数据库级别上,变量被存储在数据库配置文件(db cfg)中;对这些变量所作的更改会影响特定的数据库。从 图 1 中,您可以看到每个定义的数据库内部都有一个 db cfg 框。

  • 要查看 db cfg 的内容,请从 CLP 发出下面这个命令:
    db2 get db cfg for <dbname>
    

    例如:

    db2 get db cfg for mydb1

  • 要更新特定变量的值,请发出下面这个命令:
    db2 update db cfg for <dbname> using <parameter> <value>
    

    例如:

    db2 update db cfg for mydb1 using MINCOMMIT 3

V8 之前,对“所有”db cfg 变量进行更改都要求您断开与该数据库的所有连接;然后,在进行第一个新连接时,这些更改将生效。V8 中有大约 50% 的参数可以进行联机配置;也就是说,无需为了使更改生效而断开到数据库的所有连接。请参考“DB2 V8 管理指南(DB2 V8 Administration Guide)”以获取更多详细信息。

连接

在 DB2 中,目录是存储有关数据库及其连接信息的二进制文件。DB2 中有四个如下所描述的主目录。还包括了相应的建立连接的命令;但是,许多用户发现客户机配置助手 GUI 工具(Client Configuration Assistant GUI Tool)非常便于建立连通性。

系统数据库目录(或系统 db 目录)

系统数据库目录是主要的“目录(table of contents)”,它包含了有关可以从您的 DB2 系统进行连接的所有数据库的信息。正如您可以从 图 1 看到的那样,系统 db 目录是在实例级上进行存储的;因此,如果您打算删除一个实例,那么您应当考虑备份其内容。

要列出系统 db 目录的内容,请从 CLP 发出下面这个命令:

db2 list db directory

 

该 命令输出中的任何项都包含单词“indirect”,这意味着:该项适用于本地数据库(即,驻留在您当前正在使用的机器上的数据库)。该项还会指向由 “Database drive”项(在 Windows 中)或“Local database directory”项(在 UNIX 中)所指示的本地数据库目录。

任何包含单词“Remote”的项都意味着:该项适用于远程数据库(即,驻留在其它机器上而非您当前正在使用的机器上的数据库)。该项还会指向由“Node name”项所指示的节点目录项。

要将信息输入系统 db 目录,您需要使用 catalog 命令:

	db2 catalog db <db_name> 	as <alias> at node  <nodename>
例如:	db2 catalog db    mydb  	as yourdb  at node  mynode

 

节点名是指向节点目录中某一项的指针。在发出这条命令之前该项必须已经存在。

通常只有在将信息添加到远程数据库的系统 db 目录时才使用 catalog 命令。对于本地数据库来说,在用 create database 命令创建数据库之后就自动创建 Catalog 项。

本地数据库目录(或本地 db 目录)

本地数据库目录包含了有关本地数据库(即,驻留在您目前正在使用的机器上的数据库)的信息。正如您可以从 图 1 中看到的那样,本地数据库目录驻留在数据库结构内部。注意从该图还可以看到没有专门的命令用于将信息输入到该目录中。当您用 create database 命令创建数据库时,在该目录中会添加一项。

要列出本地数据库目录的内容,请发出以下命令:

db2 list db directory on <path>

 

其中,可以从系统 db 目录相应项中的“Database drive”项(Windows 中)或“Local database directory”项(UNIX 中)获取 <path>。

节点目录

节点目录用于存储远程数据库的所有连通性信息。V8 仅支持 TCPIP 协议;因此,该目录中的大多数项将显示 TCPIP 信息,比如机器(其中包含了您想连接的数据库)的主机名或 IP 地址,还有相关的 DB2 实例的端口号。下面是一些与节点目录相关的命令:

  • 要列出节点目录的内容,请从 CLP 发出下面这个命令:
    db2 list node directory

  • 要将信息输入节点目录,请从 CLP 发出 catalog 命令:
    db2      catalog tcpip node <node_name>
             remote <hostname or IP_address>
             server <port_name or port_number>
    

    例如:

    db2      catalog tcpip node mynode
             remote 9.26.138.35
             server 60000

要想得到您想要连接的远程实例的端口号,可以查看该实例的 dbm cfg 中的 svcename 参数来实现。该值通常对应于 TCP/IP services 文件中的某一项。

DCS 目录

DCS 目录包含了通常驻留在 zSeries™(S/390®)或 iSeries™(AS/400®)机器上的主机数据库的连通性信息。您需要安装 DB2 Connect 软件。下面是一些命令:

  • 要列出 DCS 目录的内容,请从 CLP 发出下面这个命令:
    db2 list dcs directory

  • 要将信息输入 DCS 目录,请从 CLP 发出 catalog 命令:
    db2 catalog dcs db as <location name>

    例如:

    db2 catalog dcs db as db1g

请参考 DB2 V8 连通性快捷表 以获取本节中所描述的那些命令的摘要。

数据库

数据库是与实例相关的封闭且独立的单元。由于这个独立性,所以两个或更多的数据库的对象可以有相同的名称。例如, 图 1 显示了一个名为“MyTablespace1”的表空间,它位于与实例“DB2”相关的数据库“MYDB1”内部。还有一个同名的表空间,它位于也与实例“DB2”相关的数据库“MYDB2”内部。

由 于数据库是封闭单元,所以您不能执行涉及了两个不同数据库表的查询(除非您使用 Information Integrator(II)/ Relational Connect,这已经超出本文的讨论范畴)。例如,涉及数据库“MYDB1”中的“Table1”和数据库“MYDB2”中的“TableZ”的查询是 不允许的。

数据库是用命令 create database 创建的。请注意,这被认为是一个命令,而非 SQL 语句。

当您创建数据库、表空间、日志和缓冲池时,会自动地创建配置文件,这就是完成该命令需要花费几秒钟的原因。

表空间

表空间是用作逻辑表和物理容器之间中间层的逻辑对象。创建表空间时,您可以将它与特定的缓冲池(数据库高速缓存)以及特定的容器进行关联。容器是物理存储数据的地方,可以分成文件、目录和原始设备等几类。

Catalog(SYSCATSPACE)、系统临时空间 (TEMPSPACE1)和用户空间(USERSPACE1)都是表空间,并且都会在创建数据库时自动创建。Catalog 和系统临时空间都可以看作是系统结构,因为它们是数据库的正常操作所必需的。Catalog 包含了元数据(有关数据的数据)。一些其它 RDBMS 把这个结构称作“数据字典”。不要把这一节的术语“Catalog”和早先提到的 catalog 命令混淆起来;它们毫无关系。

系统临时表空间是数据库管理器执行操作(比如连接和排序)的工作区。至少必须有一个系统临时表空间。

缺省情况下会创建 USERSPACE1 表空间,但是可以删除它。它是用来存储用户表的缺省位置。

图 1 用与本节标题颜色一样的桃褐色显示了用 create tablespace 命令显式创建的其它表空间。请参考“DB2 V8 SQL 参考大全(DB2 V8 SQL Reference)”以获取更多详细信息。

表等等

表是由行和列组成的无序的数据记录集。索引是与表相关的有序指针集,用于性能目的并确保唯一性。视频、音频和扫描文档等可以作为大对象(LOB)存储在数据库中。表、索引和 LOB 驻留在表空间中。

日志

日志是用于恢复目的的文件。日志记录了对数据库进行的每个操作。万一发生故障,在将数据库恢复到某个一致的点方面,日志就显得至关重要了。

缓冲池

缓冲池是一块内存区域,所有索引和数据页(除了 LOB)都必须有序地经过该区域,从而进行处理。它是数据库管理器所使用的主要高速缓存。在数据库性能问题方面,缓冲池是进行调优的最重要的对象。





回页首



案例研究

既然您已经熟悉了 DB2 环境,那么让我们通过简单的案例研究来回顾一下本文中提到的所有概念:

DB2 数据库管理员(DBA)由于突发的个人原因离开了公司,经理要您负责所有 DB2 系统。这是您担任新 DB2 DBA 的第一天,因而您想熟悉系统。您登录到安装了 DB2 的开发机器(Windows 2000),并打开 CLP 窗口。下面是您要进行的步骤:

  1. 首先,您想要知道该机器中有多少实例:
    	db2ilist

  2. 然后,您想要知道当前哪个实例是活动的:
    	db2 get instance

    db2ilist 命令,您发现该机器上定义了两个实例 - 实例“DB2”和实例“MyInst”。用 db2 get instance 命令,您发现“DB2”实例是当前的活动实例。

  3. 现在您想要列出“MyInst”实例中的数据库。由于这个实例不是当前的活动实例,所以您首先得在当前 CLP 窗口中临时切换到该实例:
    	set DB2INSTANCE=MyInst

  4. 您再次发出 db2 get instance ,以查看 MyInst 现在是否是当前实例,然后为列出该实例中定义的数据库,请发出以下命令:
    	db2 list db directory

    该命令显示出该实例中只有一个数据库(MYDB2)。您想试着创建一个新的数据库(您随后将删除它),为此您执行:

    	db2 create database temporal

    数据库的创建需要花些时间,因为在缺省情况下会在数据库内部创建几个对象。发出另一个 db2 list db directory 命令将会显示两个数据库:“MYDB2”和“temporal”。

  5. 连接至“MYDB2”数据库(db2 connect to mydb2),并查看该数据库中有多少表( db2 list tables )。您还可以查看定义了多少表空间( db2 list tablespaces )。

午 餐时间到了,因此您决定把某些东西复原。首先,您决定删除临时数据库。当三秒钟掉电引起机器自动重新引导时,您正处于输入命令的过程中。您并不担心 DB2 数据库状态,因为您知道 DB2 崩溃恢复会确保其前后一致;因此您在重新引导之后打开新的 CLP 窗口,接下来删除该数据库。

	db2idrop MyInst

 

啊呀!出错了,您使用了错误的命令并删除了整个 MyInst 实例而不只是删除了数据库“temporal”。您是否因此丢失了与实例“MyInst”相关的数据库“MYDB2”和“temporal”?

查看 图 1 , 您可能会觉得是丢失了;但是,情况并非如此。删除实例时,您并未删除与之相关的数据库。实例为您提供了链接 DB2 代码的环境,以便这些代码依据用户数据使用实例。数据库被“关联”到实例。但是安装 DB2 新版本时,您通常会将实例“升级”成新的代码版本;而数据库保持不变。

既然您已经镇定下来,知道并未丢失数据库,那么该开始思考 db2idrop 命令的工作原理。通常,如果您的实例是活动的,那么该命令会给您一个警告。然后您意识到重新引导机器后,实例“MyInst”并未自动启动,而“DB2”实例已经被配置成在引导机器后自动启动。还有,打开新的 CLP 窗口时, db2instance 环境变量的值被设置成“DB2”而不是“MyInst”,假设“DB2”是在机器的控制面板中为该环境变量指定的值。

既然您意识到了这一点,那么您该继续努力使一切恢复原样:

  1. 首先,您需要再次创建实例 MyInst:
    	db2icrt MyInst

  2. 现在,切换到该实例(set DB2INSTANCE=MyInst)。如果发出 list db directory 命令,您会得到一个指出系统 db 目录不存在的错误。如果看一下 图 1 , 您会明白:第一次删除实例时,所有实例范围内的配置文件和目录也都被删掉了。因此,实例级概要注册表、dbm cfg、系统 db 目录、节点目录和 dcs 目录都不见了。创建实例时,也创建了带有缺省值的 dbm cfg 和实例级注册表。庆幸的是,前任 DBA 存储了所有这些文件的内容备份。他发出类似于下面这样的命令:
    db2 get dbm cfg > dbmcfg.bk
    db2set -all > db2set.bk
    db2 list db directory > systemdbdir.bk
    db2 list node directory > nodedir.bk
    db2 list dcs directory > dcsdir.bk
    

  3. 您必须使用适当的命令来手工恢复基于这些文件内容的值。对于您创建的“temporal”数据库,它是需要再次编目的本地数据库。发出命令“ db2 catalog db temporal on <drive/path> ”将足以在系统 db 目录中创建一个项,它将指向现有的本地 db 目录,因为您用缺省值创建了该数据库。本地 db 目录属于数据库;因此,当您删除实例时,并未将其删掉。
  4. 既然一切都恢复了,那么现在您可以删除数据库 temporal 了:
    	db2 drop database temporal

  5. 将 DB2INSTANCE 的值设回“DB2”( set DB2INSTANCE=DB2 )。

好了,大功告成了!

 




回页首


结束语

本文以生动的图解方式说明了 DB2 V8 环境的全貌。我们讨论了实例、配置文件、注册表变量、目录、数据库等等概念。 便 于您理解所有这些对象的驻留位置。提供的案例研究用来复习本文所讨论的所有概念。它包括了使用命令行处理器(CLP)来执行的命令。在本文中不曾讨论 GUI 工具。虽然使用 GUI 工具更容易管理 DB2 环境,但出于学习的目的,最好使用 CLP。一旦您对使用 CLP 的 DB2 环境方面有了坚实的基础,那么学会使用 GUI 工具的技能应当是项很简单的任务。


关于作者

Raul F. Chong 是 IBM 多伦多实验室的数据库顾问,主要与 IBM 业务伙伴进行合作。Raul 已经在 IBM 任职了 5 年,其中有 3 年是在 DB2 技术支持部(Technical Support)工作,另两年担任顾问,专门从事数据库应用程序开发和从其它 RDBMS 迁移到 DB2 方面的工作。可以通过以下电子邮件地址: rfchong@ca.ibm.com 与他联系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值