DB2 UDB 命令行处理器(CLP)是一个接口,通过这个接口可以方便地 DB2 UDB 函数。CLP 接受来自 DB2 命令行的命令或 SQL 语句。在基于 Linux 和 UNIX 的系统中,这个命令行是 DB2 实例的命令行。在 Windows 操作系统中,它是启用了 CLP 命令窗口的命令行;在这种情况下,必须先(从普通命令窗口)运行 db2cmd 命令来启动 DB2 命令行环境。
db2 命令可以启动命令行处理器。CLP 包括前端进程(表示用户界面)和后端进程,可以用它们来维护数据库连接。每次 db2 调用都启动新的前端进程;第一次 db2 调用要启动后端进程。拥有相同父进程的所有前端进程都是由一个后端进程提供服务的,因此它们共享一个数据库连接。QUIT 命令停止命令行处理器,但是不删除关联的后端进程;要删除关联的后端进程,需要发出 TERMINATE 命令。建议在停止实例(STOP DATABASE MANAGER 或 db2stop)之前执行 TERMINATE 命令;否则,后端进程会保持一个不再可用的实例连接(Attachment)。
db2 命令
可以用下列三种模式之一启动 CLP:
命令模式。在这种模式下,每个命令或 SQL 语句必须添加前缀 db2。在 Windows 操作系统中,DOSKEY 命令允许使用 Up Arrow(向上箭头)键在会话的命令历史记录上滚动,并重新发出命令,而无需再次输入该命令。还可以创建包含 DB2 命令或 SQL 语句的命令文件,并像运行其他任何命令文件那样运行该文件。例如,名为 myfile.cmd 的文件包含下列代码:
db2start
db2 connect to sample
db2 select * from org
db2 terminate
db2stop
可以通过从 Windows DB2 命令提示符发出 myfile 来运行该文件。
交互输入模式。可以通过发出 db2 命令同时不指定其他任何东西来启动该模式。交互输入模式的特点在于默认 db2 => 命令提示符。从该提示符下发出的命令和语句没有前缀 db2:
elk /home/melnyk>db2
...
db2 => connect to sample
Database Connection Information
Database server= DB2/6000 8.2.0
SQL authorization ID = MELNYK
Local database alias = SAMPLE
db2 => select * from org
DEPTNUMB DEPTNAME MANAGER DIVISION LOCATION
- -
10 Head Office160 CorporateNew York
15 New England 50 EasternBoston
20 Mid Atlantic10 EasternWashington
38 South Atlantic30 EasternAtlanta
42 Great Lakes100 MidwestChicago
51 Plains 140 MidwestDallas
66 Pacific270 WesternSan Francisco
84 Mountain 290 WesternDenver
8 record(s) selected.
db2 => terminate
DB20000IThe TERMINATE command completed successfully.
elk /home/melnyk>
现在可以定制该提示符,并当前会话的命令历史记录。要退出交互输入模式,可以返回操作系统提示符,然后发出 QUIT 命令或 TERMINATE 命令。
批处理模式。该模式允许运行命令脚本、文本文件中的 DB2 命令或 SQL 语句,这些脚本、文本文件按其执行顺序包含命令和语句。在该例中,可以在 db2 命令中使用 -f 选项标记(参见表 1)来指定命令脚本的名称。例如,名为 myscript.db2 的文件包含下列代码:
!db2start;
connect to sample;
select * from org;
terminate;
可以通过从 DB2 命令提示符发出 db2 -tf myscript.db2 来运行该文件。注意这个文件与上面显示的 myfile.cmd 在内容上的差别。在该例中,文件中的命令和语句没有前缀 db2。每个命令或语句以分号结尾;实际上,通过在 db2 命令中指定 -t 选项标记,我们指示 CLP 使用分号作为语句终止字符。您可能还注意到 db2start 命令前的感叹号,这说明该命令不是 CLP 命令,而是从操作系统提示符发出的系统命令。这个感叹号是换码符,允许您从交互输入模式或批处理模式发出操作系统命令。
图 1 显示了完整的 db2 命令语法。选项包括用来配置 CLP 会话的一个或多个选项标记的规范(表 1)、要执行的 DB2 命令或 SQL 语句、一般 CLP 帮助请求(?),或者与特定命令相关的帮助文本(? phrase)、SQLCODE(? message)、SQLSTATE(? sqlstate)或类代码(? class-code)。您还可以请求 CLP 选项的当前设置(? options),或者请求关于阅读在线帮助语法表的信息(? help)。下例说明了其中一些选项:
db2 -tvf myscript.db2 => option flags
db2 connect to sample => SQL statement
db2 list tables for user=> DB2 command
db2 ? => general CLP help
db2 ? options => current CLP options settings
db2 ? help=> help for syntax online help
db2 ? backup=> help for a specific DB2 command
db2 ? sql0117N=> help for a specific SQLCODE
db2 ? 42501 => help for a specific SQLSTATE
db2 ? 01=> help for a specific class code
下面是需要记住的与 db2 命令有关的其他一些要点:
问号(?)与后面的文本字符串之间至少要隔开一个空格。
CLP 将前缀为两个连字符的所有文本字符串都解释为注释。
在 CLP 命令模式或交互输入模式下,可以将反斜线字符(“)用作行连续字符。CLP 遇到行连续符时,它会读取下一行并将两行连接起来。在 Windows 操作系统中,行连续字符生成临时 db2 (cont.) => 提示符。
如果 db2 命令返回的消息文本过长,那么可以考虑使用“more”分屏显示(如果可以在操作系统中使用的话),或将输出重定向到一个文件中。例如:
db2 "? sql0510" more
db2 "? SQL0510" > sql0510n.out
也可以使用 -r 或 -z CLP 选项将输出重定向到文件中(参见表 1)。例如:
db2 -r mydata“orglist.txt "select * from org"
建议在基于 Linux 和 UNIX 的系统中使用双引号分隔符。如果在 CLP 命令模式下使用了特殊字符,那么这些特殊符号将由操作系统 shell 解释。这可能会生成意想不到的结果,除非使用双引号或换码符(如反斜线字符 “)。例如,在 AIX Korn shell 环境中执行下列命令时,如下所示:
db2 select * from employee where edlevel > 18
该命令被解释为“选择 employee 表中所有 edlevel 大于 18 的记录,并将输出重定向到名为‘18’的文件”。下列命令将返回正确的输出:
db2 "select * from employee where edlevel > 18"
db2 select “* from employee where edlevel “> 18
CLP 将“NULL”(以大写字符指定)识别为空字符串。例如:
db2 update database configuration using mirrorlogpath NULL
图 1. db2 命令的语法
表 1. CLP 选项标记
选项
描述(默认)
-a
显示 SQLCA 数据。(OFF)
-c
自动提交 SQL 语句。(ON)
-e{cs}
将 SQLCODE 或 SQLSTATE 数据写入标准输出。(OFF)
-f filename
接受指定文件(命令脚本)中的输入。如果其他选项与 -f 选项一起指定,必须最后指定 -f 选项。(OFF)
-l filename
将日志记录写入指定文件。该文件包含已执行命令和语句的历史记录。如果该文件已经存在,则新的信息会添加在该文件的后面。如果其他选项与 -l 选项一起指定,必须最后指定 -l 选项。(OFF)
-n
保留分隔符号内换行字符前的所有尾部空格字符。例如:
create table t1 (c1 varchar(30));
insert into t1 values (‘123
789‘);
three blanks spaces follow ‘123
update command options using n on;
insert into t1 values (‘123
789‘);
select * from t1;
C1
123 789
123 789
2 record(s) selected.
-n 选项必须与 -t 选项一起使用。(OFF)
-o
将数据和消息都写入标准输出。(ON)
-p
处于 CLP 交互模式下时显示提示符。(ON)
-r filename
将输出(消息和错误代码除外)重定向到指定的文件。如果该文件已经存在,则将新的消息添加到文件的后面。如果 -a 选项与 -r 选项一起指定,那么将 SQLCA 数据也写入文件中。-r 选项不影响 -e 选项。如果指定了 -e 选项,那么 SQLCODE 或 SQLSTATE 数据被写入标准输出,而不是被写入文件中。(OFF)
-s
如果执行命令脚本时或在处于 CLP 交互模式下时发生错误,那么可以使用这个选项停止处理;将错误消息写入标准输出。如果禁用该选项,则会显示错误消息,并继续执行剩余命令或语句;只有发生系统错误时才停止执行。(OFF)
-t
使用分号(;)作为语句终止符号。该选项禁用反斜线(“)行连续字符。(OFF)
-tdx
使用 x 作为语句终止字符。(OFF)
-v
将输入文本回送到标准输出。(OFF)
-w
显示 SQL 语句警告消息。(ON)
-x
返回没有任何标题(包括列名)的数据。(OFF)
-z filename
将所有输出(包括任何消息或错误代码)重定向到指定的文件。如果该文件已经存在,则将新的信息添加到文件的后面。如果 -a 选项与 -z 选项一起指定,那么还要将 SQLCA 数据也写入文件中。-z 选项不影响 -e 选项。如果指定了 -e 选项,那么要将 SQLCODE 或 SQLSTATE 数据写入标准输出,而不是写入文件中。(OFF)
CLP 选项通常可以以任何顺序和组合来指定。要开启选项,则需要在相应的选项字符前加上减号(例如,-f)。要关闭选项,则需要在选项字母前加上加号,或者在选项字母两边分别加上减号。
可以使用 LIST COMMAND OPTIONS 命令查看 CLP 选项的当前设置。通过发出 UPDATE COMMAND OPTIONS 命令,可以在 CLP 交互输入模式或批处理模式下更改这些设置。例如:
db2 => update command options using c off p off
在交互会话或批处理输入结束时,这些设置恢复为它们的原始值。
还可以使用 DB2OPTIONS 注册变量设置会话的 CLP 选项。例如:
export DB2OPTIONS=‘+c -p-‘=> Linux and UNIX-based systems
set DB2OPTIONS=+c -p- => Windows operating systems
该命令关闭 SQL 语句的自动提交,并删除在 CLP 交互输入模式下显示的提示符。
交互 CLP 中的新的可用功能
DB2 UDB Version 8.1 引入了针对 DB2 CLP 的一些易用性方面的重要改进。现在可以对在交互模式下使用 CLP 时出现的提示符进行定制。还可以使用新的命令缓存来运行以前执行的命令,或者使用操作系统的集成命令器或选择的器来那些命令。
定制的 CLP 提示符可以显示当前用户、实例连接或数据库连接。要定义命令提示符,则需要设置新的名为 DB2_CLPPROMPT 的 DB2 UDB 注册变量。DB2_CLPPROMPT 注册变量可以设置为任何文本字符串,最大长度为 100 个字符。定制的字符串可以包含任意符号,在运行的时候,实际值将替代这些符号。侧栏中描述了可以设置的符号。