级别: 初级 Ian Shields, 高级程序员, IBM Kevin Czap (kczap@us.ibm.com), 电子商务体系架构设计师, IBM
2002 年 9 月 01 日 本文将指导您通过命令行处理器(Command Line Processor)设置和使用 DB2 7.2。您还将了解图形控制中心(Control Center,帮助您探究和控制数据库)和图形命令中心(Command Center,帮助您生成 SQL 查询)的使用。本文所讨论的其它主题包括 Java 运行时环境的设置、有用的 Linux 实用程序功能以及 bash 概要文件定制。
我们将讨论下列任务:
- 启动、停止和查找 DB2 进程
- 创建样本数据库
- 使用 DB2 命令行处理器(CLP)
- 用 Java 1.1.8 或 1.3.1 运行时环境启动 DB2 控制中心
- 使用 DB2 控制中心的图形界面探索数据库
- 使用 DB2 命令中心的图形界面创建 SQL 查询
开始之前
本文是“
Installing DB2 and the JRE”的续篇。在继续学习本文之前,您应该首先依照那些指令安装 DB2 和 JRE。
如果在 Linux 方面您是新手,而且在安装 CD 或打开终端窗口时需要帮助,那么请参阅“
Basic tasks for new Linux developers”,其中讨论了这些任务以及更多信息。
启动、停止和查找 DB2 进程
您可能时时需要启动或停止数据库或管理服务器。DB2 在 Linux 系统中可以运行多个进程,因此有时需要检查哪个进程在运行。
为完成这些任务,以
db2inst1 用户身份登录。
启动和停止 DB2 实例
要启动 DB2 实例,输入
db2start 。如果已启动了 DB2 实例,则会有一个消息告诉您这一点。要停止 DB2 实例,输入
db2stop 。
[db2inst1@echidna db2inst1]$ db2start
SQL1063N DB2START processing was successful.
[db2inst1@echidna db2inst1]$ db2stop
SQL1064N DB2STOP processing was successful.
|
启动和停止 DB2 管理服务器
要启动 DB2 管理服务器,输入
db2admin start 。要停止 DB2 管理服务器,输入
db2admin stop 。
[db2inst1@echidna db2inst1]$ db2admin start
SQL4406W The DB2 Administration Server was started successfully.
[db2inst1@echidna db2inst1]$ db2admin stop
SQL4407W The DB2 Administration Server was stopped successfully.
|
显示 DB2 进程信息
要查找正在 Linux 下运行的 DB2 进程,使用
ps -ef 命令可以报告所有活动的进程。这个命令的输出所包含的进程比您希望的要多。输出通过
more 过滤器以管道形式传送,从而可以按页查看。或者,使用
grep 命令对它进行过滤,这样可以很方便地在输出和文件中搜索正则表达式。
ps 命令的输出包含已格式化的信息,例如进程所有者及进程标识(pid),它们位于该进程中运行的命令名称之前。如果您在 db2inst1 身份下已经运行了许多进程(例如,因为您已打开了几个窗口),则您可能想查找某些 DB2 进程,不过不是那些 db2inst1 所拥有的其它进程。为此,通过对
grep 命令使用“
db2 ”参数来过滤
ps -ef 输出,这会除去字符“db2”仅作为“db2inst1”一部分出现的那些行。在
grep 的搜索项两端要使用引号,因为它包含一个前导空格。注:如果您用
grep 命令过滤输出,则不能看到列标题。清单 1 显示了在启动所有 DB2 进程之前,
ps -f 命令的输出,所以您可以看到各种列标题,以及通过
grep 对输出过滤后,
ps -ef 命令的输出。
清单 1. 显示 DB2 进程信息
[db2inst1@echidna db2inst1]$ ps -f
UID PID PPID C STIME TTY TIME CMD
db2inst1 1468 1465 0 16:00 pts/0 00:00:00 /bin/cat
db2inst1 1478 1477 0 16:00 pts/1 00:00:00 /bin/bash
db2inst1 1660 1 0 16:04 pts/1 00:00:00 /home/db2inst1/sqllib/bin/db2bp 1478 5
db2inst1 1768 1478 0 16:29 pts/1 00:00:00 ps -f
[db2inst1@echidna db2inst1]$ ps -ef | grep " db2"
root 22284 1 0 Jul19 ? 00:00:00 db2wdog
db2inst1 22285 22284 0 Jul19 ? 00:00:00 db2sysc
root 22286 22285 0 Jul19 ? 00:00:00 db2gds
db2inst1 22287 22285 0 Jul19 ? 00:00:00 db2ipccm
db2inst1 22288 22285 0 Jul19 ? 00:00:00 db2tcpcm
db2inst1 22289 22286 0 Jul19 ? 00:00:00 db2resyn
db2inst1 22290 22286 0 Jul19 ? 00:00:00 db2srvlst
root 22428 1 0 Jul19 ? 00:00:00 db2wdog
db2as 22429 22428 0 Jul19 ? 00:00:00 db2sysc
root 22430 22429 0 Jul19 ? 00:00:00 db2gds
db2as 22431 22429 0 Jul19 ? 00:00:00 db2ipccm
db2as 22433 22429 0 Jul19 ? 00:00:00 db2tcpcm
db2as 22434 22429 0 Jul19 ? 00:00:00 db2tcpdm
db2inst1 22927 22287 0 Jul19 ? 00:00:00 db2agent (idle)
db2inst1 393 1 0 14:25 pts/0 00:00:00 db2jd
db2inst1 479 313 0 14:34 pts/0 00:00:00 grep db2
|
注:有些 DB2 进程为 root 所拥有,有些为 db2inst1 所拥有,而有些为 db2as 所拥有。如果您想确切地看到一个特定命令启动了哪些进程,那么在使用每个
start 命令之前以及之后使用
ps -ef 命令。如果运行这些特定命令之间有时间间隔,那么也可以从时间戳记上获得提示。如果想知道有关
ps 命令输出的更多信息,可以使用
man ps 命令查阅手册(man)页。
启动和结束 JDBC 侦听器进程(JRE 1.3.1)
如果您正在使用 1.3.1 级别的 JRE,而且您想使用 DB2 控制中心,则可能需要启动 JDBC 侦听器进程。输入
db2jstrt 。侦听的缺省端口是端口 6789。(可以随意指定其它端口。例如,可以输入
db2jstrt 6990 来启动使用端口 6990 的侦听器。)
[db2inst1@echidna db2inst1]$ db2jstrt
Licensed Materials -- Property of IBM
(c) Copyright International Business Machines Corporation, 1996, 2000.
All Rights Reserved.
|
如果您正在使用 1.3.1 级别的 JRE,而忘记了是用哪个端口启动了 JDBC 侦听器进程,则可以使用
netstat -plt 命令进行查找。清单 2 显示了我们使用缺省端口 6789 启动了 db2jd 侦听器进程。db2jd 进程的进程标识(PID)是 393。在上面
清单 1 的进程标识列表中您能找到这个同样的 393 进程标识吗?
清单 2. 查找 JDBC 侦听端口
[db2inst1@echidna db2inst1]$ netstat -plt
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:32768 *:* LISTEN -
tcp 0 0 echidna:32769 *:* LISTEN -
tcp 0 0 *:printer *:* LISTEN -
tcp 0 0 *:6789 *:* LISTEN 393/db2jd
tcp 0 0 *:swat *:* LISTEN -
tcp 0 0 *:523 *:* LISTEN -
tcp 0 0 *:netbios-ssn *:* LISTEN -
tcp 0 0 *:sunrpc *:* LISTEN -
tcp 0 0 *:x11 *:* LISTEN -
tcp 0 0 *:db2cdb2inst10 *:* LISTEN -
[db2inst1@echidna db2inst1]$
|
如果有时要终止 db2jd 进程,则必须使用
kill 命令,它对进程发送信号。使用 SIGKILL(-9)信号以及该进程的 PID。假定使用的 PID 是上面的 393,则该命令如下所示:
[db2inst1@echidna db2inst1]$ kill -9 393
|
创建样本数据库
如果遵循“
Installing DB2 and the JRE”中的指令,那么您已安装了 DB2 样本数据库,可以跳至下一节
使用 DB2 命令行处理器(CLP)。如果您没有安装,那么我们现在进行安装。
以
db2inst1 用户身份登录,转至 /usr/IBMdb2/V7.1/bin 目录。然后运行
./db2sampl 命令以创建并植入样本数据库。
[db2inst1@echidna db2inst1]$ cd /usr/IBMdb2/V7.1/bin
[db2inst1@echidna db2inst1]$ ./db2sampl
|
在进一步处理之前等待返回的提示。
使用 DB2 命令行处理器(CLP)
通过探索我们刚才安装的样本数据库,让我们来验证 DB2 的安装。我们将使用 DB2 命令行处理器(CLP)工具从命令行输入数据库管理器命令和 SQL 语句。例如,如果您没有以实例所有者身份登录,也不想注销或设置 X Window System,则对于快速检查,CLP 很方便,因为您可以用不同于登录标识的其它标识使用它。
1. 首先以
db2inst1 身份登录,或在终端窗口中使用带
- 选项的
su 命令以切换至
db2inst1 用户,执行该用户的概要文件。如果您忘记了这一点,而且似乎操作都无效,则输入
ctrl-d 以回到前一个用户会话,再次尝试登录。(注:在 - 符号和用户标识之间有一个空格。)在以
db2inst1 身份运行时,输入
db2 命令以启动 DB2 命令行处理器(CLP)。
清单 3. 启动 DB2 命令行处理器
[root@echidna root]# su - db2inst1
[db2inst1@echidna db2inst1]$ db2
(c) Copyright IBM Corporation 1993,2001
Command Line Processor for DB2 SDK 7.2.3
You can issue database manager commands and SQL statements from the command
prompt. For example:
db2 => connect to sample
db2 => bind sample.bnd
For general help, type: ?.
For command help, type: ? command, where command can be
the first few keywords of a database manager command. For example:
? CATALOG DATABASE for help on the CATALOG DATABASE command
? CATALOG for help on all of the CATALOG commands.
To exit db2 interactive mode, type QUIT at the command prompt. Outside
interactive mode, all commands must be prefixed with 'db2'.
To list the current command option settings, type LIST COMMAND OPTIONS.
For more detailed help, refer to the Online Reference Manual.
db2 =>
|
2. 现在连接到样本数据库,列出可用的表。注:输入这些命令和语句时不区分大小写。
清单 4. 连接到样本数据库并列出可用的表
db2 => connect to sample
Database Connection Information
Database server = DB2/LINUX 7.2.3
SQL authorization ID = DB2INST1
Local database alias = SAMPLE
db2 => list tables
Table/View Schema Type Creation time
------------------------------- --------------- ----- --------------------------
CL_SCHED DB2INST1 T 2002-06-15-16.19.42.897650
DEPARTMENT DB2INST1 T 2002-06-15-16.19.41.460477
EMP_ACT DB2INST1 T 2002-06-15-16.19.41.641976
EMP_PHOTO DB2INST1 T 2002-06-15-16.19.41.972887
EMP_RESUME DB2INST1 T 2002-06-15-16.19.42.600172
EMPLOYEE DB2INST1 T 2002-06-15-16.19.41.504293
IN_TRAY DB2INST1 T 2002-06-15-16.19.42.906615
ORG DB2INST1 T 2002-06-15-16.19.41.185167
PROJECT DB2INST1 T 2002-06-15-16.19.41.890184
SALES DB2INST1 T 2002-06-15-16.19.42.768815
STAFF DB2INST1 T 2002-06-15-16.19.41.318363
11 record(s) selected.
db2 =>
|
提示:如果得到 SQL1032N 消息指出未发出启动数据库管理器命令,则输入
terminate 结束 CLP 并发出
启动、停止和查找 DB2 进程中讨论的
db2start 命令。然后回到前一步,重新启动 CLP。
3. 现在让我们使用所示的 SQL
select 语句选择部门 20 中的所有职员。
清单 5. 选择部门 20 中的雇员
db2 => select * from staff where dept = 20
ID NAME DEPT JOB YEARS SALARY COMM
------ --------- ------ ----- ------ --------- ---------
10 Sanders 20 Mgr 7 18357.50 -
20 Pernal 20 Sales 8 18171.25 612.45
80 James 20 Clerk - 13504.60 128.20
190 Sneider 20 Clerk 8 14252.75 126.50
4 record(s) selected.
db2 =>
|
4. 您可以使用
? 命令显示可用命令的列表。对于诸如
list 这样的命令,也可以通过输入
? list 获得更多信息。
5. 作为练习,现在让我们创建一个数据库,并修改其应用程序内存堆大小以演示如何定义和修改数据库。首先创建
samp2 数据库:
db2 => create database samp2
SQL1047N The application is already connected to another database.
db2 =>
|
6. 啊呀!我们还连接在样本数据库上。使用
connect reset 命令使现有的连接复位,随后创建新的数据库。
db2 => connect reset
DB20000I The SQL command completed successfully.
db2 => create database samp2
DB20000I The CREATE DATABASE command completed successfully.
db2 =>
|
7. 现在让我们使用
update database 命令,更新该数据库的应用程序内存堆大小。注:可以对许多 CLP 参数作简化。
IBM DB2 通用数据库命令参考中可以找到详细信息。
db2 => update db config for samp2 using applheapsz 256
DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully.
DB21026I For most configuration parameters, all applications must disconnect
from this database before the changes become effective.
db2 =>
|
8. 最后,尝试连接到 samp2 并列出其中的表。您是否会惊讶怎么没看到任何表?至此,我们只执行
connect reset 来使连接复位,随后使用
drop database 命令删除我们新的数据库。输出看起来应该类似如下:
db2 => connect reset
DB20000I The SQL command completed successfully.
db2 => drop database samp2
DB20000I The DROP DATABASE command completed successfully.
db2 =>
|
9. 在完成探索 DB2 命令行处理器后,可以使用
terminate 命令退出。
启动 DB2 控制中心
DB2 控制中心程序是 Java 程序,它需要使用 Java 运行时环境。本系列的上一篇文章“
Installing DB2 and the JRE”帮助您设置 Java 运行时环境。可以使用两个不同的 JRE 级别:1.1.8 和 1.3.1。由于这两个级别的设置和启动不同,所以我们将分别描述它们。以下将针对 JRE 1.3.1 进行描述,您也可以跳至
用 1.1.8 JRE 启动 db2cc。
用 1.3.1 JRE 启动 db2cc
1. 通过
JAVA_HOME 环境变量指定运行时的位置。尽管每次您想使用控制中心时都可以键入这个变量,但您会发现把它添加到 db2inst1 用户的概要文件中更简单。假定您在使用 bash shell,那么应该将下列行添加到 .bashrc 文件的尾部。如果您不能确定在使用哪个 shell,则
echo $SHELL 命令会为您显示它。请查阅“
Installing DB2 and the JRE”一文中的“Configuring kernel parameters”一节,以获得 vi 编辑器的一些基本帮助。将下列行添加到 .bashrc 文件的尾部(请注意文件名中的前导句点):
JAVA_HOME=/opt/IBMJava2-131/jre
export JAVA_HOME
|
与 Linux 中的大多数应用相类似,上述行对大小写敏感。
2. 接着您需要通过使用
db2jstrt 命令启动 JDBC 侦听器进程,如下所示:
[db2inst1@echidna db2inst1]$ db2jstrt
Licensed Materials -- Property of IBM
(c) Copyright International Business Machines Corporation, 1996, 2000.
All Rights Reserved.
|
该侦听器侦听缺省端口 6789。如果您想使用其它端口,请确保它不是已知的常用端口(诸如用于 telnet 的端口 23),并将该端口号传递给
db2jstrt 命令。例如,如果您选择了端口 40000,则使用
db2jstrt 40000 。
3. 如果需要知道该侦听器是否已运行了,可以使用带
-plt 选项的
netstat 命令进行检查。输出应该包含如下所示的行,以及用于其它侦听进程的额外行。
清单 6. 检查 JDBC 侦听器进程
[db2inst1@echidna db2inst1]$ netstat -plt
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:6789 *:* LISTEN 9484/db2jd
|
在本示例中您将看到
db2jstrt 从其脚本内使用
db2jd 命令启动了 JDBC 侦听器进程,还看到该进程的进程标识(PID)是 9484,它正在侦听端口 6789(
db2jstrt 的缺省端口)。如果有时需要终止该进程,您可以使用该 PID 和
kill 命令。在这里可以使用
kill -9 9484 。
4. 要启动 DB2 控制中心,在终端窗口中输入
db2cc 6789& 。最后的 & 将使控制中心在另一个进程中启动,而不是一直占用终端窗口,直到该控制中心结束为止。注:如果您正在使用 1.3.1 JRE,则必须用该侦听器端口号来调用 db2jstrt。如果用缺省的 6789 以外的其它端口号启动了该侦听器进程,则在启动
db2cc 时就使用同一个端口号。另注:如“
Installing DB2 and the JRE”一文中所描述的(请参阅“Downloading and installing the JRE”一节),已对这个版本的 db2cc 稍作了修改。
5. 在 DB2 控制中心启动时,需要使用 db2inst1 标识和密码进行认证。
继续至
使用控制中心。
用 1.1.8 JRE 启动 db2cc
在 1.1.8 JRE 中使用 DB2 控制中心时,出现了一个错误:显示十进制值的几个操作在 Java 控制台上产生出错信息,而且没有输出。要避免这个问题,我们建议使用 1.3.1 JRE,尽管其设置稍微有点复杂。
-
通过
JAVA_HOME 环境变量可以指定该运行时的位置。Red Hat Linux V7.1 支持浮点运行时堆栈特性,它使 Java 1.1.8 产生错误。如果在 SuSE 7.2 或更高级版本,或在 RH 7.1 或更高级版本中使用这个版本的 Java 运行时,则还需要设置
LD_ASSUME_KERNEL 环境变量。尽管每次您想使用控制中心时可以键入这些变量,但您会发现把它们添加到 db2inst1 用户的概要文件中更简单。假定您在使用 bash shell,您应该将下列行添加到 .bashrc 文件的尾部。如果您不能确定在使用哪个 shell,则
echo $SHELL 命令将为您显示它。请参阅“
Installing DB2 and the JRE”中的“Configuring kernel parameters”一节,以获取 vi 编辑器的一些基本帮助。将下列行添加到 .bashrc 文件的尾部(请注意文件名中的前导句点):
JAVA_HOME=/usr/jdk118
export JAVA_HOME
LD_ASSUME_KERNEL=2.2.5
export LD_ASSUME_KERNEL
|
与 Linux 中的大多数应用相类似,上述行对大小写敏感。
- 要启动 DB2 控制中心,在终端窗口中输入
db2cc& 。最后的 & 将使控制中心在另一个进程中启动,而不是一直占用终端窗口,直到该控制中心结束为止。
使用控制中心
打开控制中心时,您会看到有些类似
图 1的屏幕。如果您在使用 1.3.1 JRE,那么可能需要移动右侧面板以打开左侧面板上的树。使用鼠标左键获得移动块(用蓝色圈出)并拖动。您还可能想拖动窗口的一边以放宽整个窗口,从而可以看得更多。我们对这个示例进行了这些操作。
图 1. DB2 控制中心初始屏幕
通过单击加号(+)展开左侧的树。向下移动,直到您看到
Databases。如果您依照我们的指令安装了 DB2,则应该看到如
图 2所示的两个数据库。如果您没有安装样本数据库,那么现在可以根据上面的
创建样本数据库中的描述进行安装。
图 2. DB2 控制中心数据库
通过对这个
SAMPLE数据库单击来展开它。然后选择
Tables。您的屏幕应该类似于
图 3。
图 3. 样本数据库表
在右侧,右键单击(鼠标右键)一个表(例如
Department),然后从弹出菜单上选择
Sample Contents。
该表中的内容如
图 4中所示。
图 4. Department 表的内容
在左侧的树视图或右侧的列表视图中,您可以看到大部分项(请参阅
图 3)都有上下文菜单,可以使用鼠标右键进行访问。例如,在树视图中对
db2inst1项按下鼠标右键,会产生一个上下文菜单,如
图 5所示。
图 5. 数据库实例的上下文菜单
在命令中心输入 SQL
命令中心允许您使用图形界面输入 SQL 语句。现在我们将使用命令中心创建 SQL 语句对数据库进行查询。命令中心提供了一个交互式窗口,在其中您可以输入 SQL 语句或 DB2 命令、查看执行结果并获得更多信息。将它与我们上面使用的命令行处理器进行比较。在 GUI 可用时,图形命令实用程序是文本命令的首选方法,因为它提供了巨大的灵活性和功能。即使当系统不是在 GUI 下运行,CLP 仍允许您输入命令,如同服务器系统的控制台这样的情况。
要启动命令中心,可以从
Tools菜单上选择它,或者单击工具栏上的第三个图标。如果不能确定选择哪个图标,那么使鼠标在图标上停留片刻,就会显示其功能。命令中心将打开一个新窗口,如
图 6所示。
图 6. 命令中心
与 CLP 类似,我们必须首先连接到样本数据库。为此,我们单击
图 6
Database connection右侧用蓝色圈出的大按钮。在弹出式窗口中,展开树,直到您可以选择
SAMPLE,如
图 7所示,随后单击
OK。
图 7. 连接到样本数据库
您应该返回到命令中心屏幕,它现在看上去应该类似
图 8。注意
connect to SAMPLE命令现在显示在 Command 窗口中,而命令的输出显示在下面一个(输出)窗口中。
图 8. 连接到样本数据库
现在我们将使用 SQL Assist 向导创建 SQL 语句。选中
SQL Assist按钮,将打开显示可用表的窗口。单击可用表列表中的
EMPLOYEE表。会突出显示它,并启用右箭头(>)按钮。单击它以将雇员表移至选中表的列表。现在您的屏幕看上去应该象
图 9。
图 9. 选择雇员表
现在我们将从雇员表中选择将用于查询的列,所以单击
Columns选项卡,并如您在上面的表选择上所做的那样,选择如下各项:
- EMPNO
- FIRSTNME
- MIDINIT
- HIREDATE
提示:在单击每个项时,通过按住
ctrl键,可以同时作多个选择,或者您可以在选择一项后按住
shift,再选择另一项,从而可以选择这两项之间的所有项。
现在您的屏幕看起来应该象
图 10。注:如果您想以不同次序输出列,可以使用按钮上下移动项列表中的各个项。
图 10. 从雇员表中选择列
最后,我们将根据“雇员编号”对结果排序。转至
Order选项卡并选择
EMPNO。注:您可以使用
Order一栏内的箭头,为查询选择升序或降序。我们将保持缺省的升序。您的屏幕看上去应该象
图 11。
图 11. 根据雇员编号对输出排序
现在准备复查和运行查询。选择
Review选项卡,则 SQL 查询看上去应该如
图 12所示。
图 12. 复查 SQL 查询
现在单击右侧的
Run按钮,您应该看到如
图 13 中的结果。注:Hire Date 列的宽度不够,以致于不能显示所有数据。通过拖动列标题框,您可以使用鼠标调整列大小。
图 13. SQL 查询结果
选择 OK 以关闭 Results 窗口,再次单击 OK 以关闭 SQL Assist 窗口。返回到命令中心的 Interactive 选项卡时,您会看到 Command 窗口中的新命令,而
connect to SAMPLE现在出现在 Command history 中。
图 14. Command history
结束语
本文仅仅初步探索了 DB2 的功能和特性。请参阅下面的参考资料,以获取其它信息。
参考资料
作者简介  | |  |
Ian Shields目前正在为 developerWorks Linux 专区研究 Linux 技术,他是 IBM 北卡罗莱纳州 Research Triangle Park 的一名资深程序员。他于 1973 年作为一名系统工程师加入位于澳大利亚堪培拉的 IBM 公司,之后,在加拿大蒙特利尔和北卡罗莱纳州 RTP 从事通信系统和普及计算。他拥有多项专利。他毕业于澳大利亚国立大学(Australian National University),本科学位是纯数学和哲学。他已经从北卡罗莱纳州立大学(North Carolina State University)获得了计算机科学硕士学位,目前正在那里攻读博士学位。
|
 | |  |
Kevin Czap 是住在德克萨斯州奥斯汀的 IBM 认证的解决方案设计师和技术专家。他对 Linux、DB2 和 Harley-Davidsons(排名不分先后)很感兴趣。
您可以通过
kczap@us.ibm.com与 Kevin 联系。
|
对本文的评价
|