引言
IBM®DB2® Universal Database™ Linux、UNIX® 和 Windows® 版(下称DB2UDB)提供了两种从命令行界面输入命令的方式。当以交互(Interactive)模式使用DB2UDB 命令行处理器(DB2UDB Command Line Processor,DB2UDB CLP)时,您不必在DB2UDB 命令或 SQL 查询前加上关键字db2。如果您不熟悉DB2UDB CLP 不同的运行模式,那么请查看DB2规划 -DB2V8.1 Family Fundamentals 认证准备教程,第 1 部分(共 6 部分)。
请看一下图 1,图中在运行于交互模式下的DB2UDB CLP 中输入了SELECT *...语句。您知道这个特定表(STAFF)位于哪个数据库或实例吗?您大概不知道吧(虽然对于这个特例,您可以猜测);可是,DB2UDB 知道!
图 1. 缺省的 CLP 视图不会告诉您连接到了哪个实例
498)this.style.width=498;">
现在看一眼下面图 2中一模一样的查询。您现在能回答我的问题了吗?注意到有什么不同了吗?
图 2. 对 CLP 进行了定制,以向您显示您所连接的实例和数据库
498)this.style.width=498;">
带修订包 1(Fix Pack 1,FP1)的DB2UDB V8.1 提供了很棒的新功能,这项功能可以让您在运行于交互模式时,定制DB2UDB CLP 提示符(后文所指的DB2UDB CLP 就是运行于交互模式的DB2UDB CLP)。
您可以使用这项新的定制功能,把您自己的文本和反映当前实例连接(instance attachment)和/或数据库连接(database connection)的上下文(context)的变量添加到输出显示。本文将向您介绍这项新的定制功能。
定制交互模式下的DB2UDB CLP
带 FP1 的DB2V8.1 新增了可定制的DB2UDB CLP 交互提示符功能。现在DB2UDB CLP 提示符可以反映当前实例连接和数据库连接的上下文,还可以显示特定的字符消息。如果没有该项功能,使用交互模式下的DB2CLP 会显示硬编码的提示符,如图 3所示。
图 3. CLP 中的硬编码提示符
498)this.style.width=498;">
在继续下去之前:关于DB2UDB 注册表变量的 20 秒课程
您可以使用DB2UDB 注册表变量更改环境。这些变量之所以可以被这样设置,是因为它们本质上是动态的,并且可适用于当前运行时环境,而无需包含在系统启动概要文件中。有一些DB2UDB 注册表变量只能设置为系统启动的一部分。
DB2UDB V8.1 提供了DB2概要注册表(DB2Profile Registry)用以控制环境。在以前的发行版中,如果更改了环境级别,就需要重新引导DB2UDB。现在有了一些例外,可以通过存储在DB2概要注册表中的注册表变量对DB2UDB V8.1 环境进行专门控制。
可使用db2set命令更新DB2UDB 注册表变量;这些信息被立即存储到概要注册表中。DB2概要注册表将这些更新过的信息应用到在进行更改之后启动的DB2UDB 服务器实例和应用程序。
也可以使用set命令给环境级变量赋值,以用于临时会话(以此方式设置的大部分变量会出现在DB2UDB 注册表中;但是,有一些不会,如DB2INSTANCE)。
如果需要永久性设置某个环境变量,那么您应该使用db2set命令在工作站的启动概要文件内设置它。set命令设置的环境变量只在命令行会话期间有效,而db2set命令行则将环境变量永久性地设置在DB2概要注册表中。
要查看全部受支持的注册表变量列表,请输入以下命令:
要更改DB2UDB 注册表变量的值,请输入以下命令:
db2set registry_variable_name=new_value
|
要查看被设置的全部DB2UDB 注册表变量列表,请输入以下命令:
此命令的输出类似图 4。
图 4. db2 set -all 命令的输出
498)this.style.width=498;">
请注意环境级变量前面有个[e],而实例变量和全局变量前面分别为[i]和[g]。
设置DB2_CLPPROMPT 注册表变量
要定制DB2UDB CLP 命令提示符,请使用新的DB2UDB 注册表变量:DB2_CLPPROMPT。
您可以将DB2_CLPPROMPT 设置为长度不超过 100 个字符的任何文本字符串。这个定制的字符串可包含在运行时可替换的可选标记。如果这个注册表变量在DB2UDB CLP 会话期间发生更改,那么新的值在用户退出再重新进入该处理器后方可生效。
可以将DB2UDB CLP 定制为只显示一行字符串,这是最基本的形式。图 5和图 6演示了DB2_CLPPROMPT 注册表变量的设置以及DB2UDB CLP 的后续调用。
图 5. 设置命令行提示符注册表变量
498)this.style.width=498;">
图 6. 结果
498)this.style.width=498;">
现在,尽管这个示例挺有意思,但没什么大用。DB2_CLPPROMPT 注册表变量可以附带一些关联变量,可以用这些变量向DB2UDB CLP 返回一些关于当前的或缺省的实例连接以及当前所连接的(或缺省的)数据库的信息。
受支持的变量如表 1所示。
表 1.受 CLP 支持的运行时变量
| 变量 | 运行时值 |
%ia | 如果存在实例连接,则为当前实例连接的授权标识(authid);否则为空字符串。 |
%i | 如果实例连接存在,则为当前所连接的实例的本地别名;如果不存在本地实例连接,则为DB2INSTANCE 或DB2INSTDEF 注册表变量的值;否则,为空字符串。 |
%da | 如果存在数据库连接,则为当前数据库连接的授权标识;否则为空字符串。 |
%d | 如果数据库连接存在,则为当前连接的数据库的本地别名;否则为DB2DBDFT 注册表变量值;再不然则为空值。 |
%n | 换行符。 |
例如,要设置DB2UDB CLP 提示符,使其解析为:
(Instance <instance_name>, Database <database name>):
|
输入以下命令:
db2set db2_clpprompt=" (Instance:%I, Database: %d):"
|
您可以输入db2set all命令来验证DB2UDB 概要注册表中的该项设置。
图 7向您显示了这一命令序列,包括在以交互模式启动 CLP 会话之后的显示结果。
图 7. 设置DB2_CLPPROMPT 并验证其使用
498)this.style.width=498;">
请注意此例中,我用了未处于交互模式的DB2UDB CLP,这就是为什么交互模式在同一个窗口中被启动的原因(我这样做是让您体会一下调用DB2UDB CLP 的不同方式)。
图 7 中,您会看到<database_name>变量没有值。该变量之所以为空是因为在我的环境中没有数据库连接或者定义的缺省数据库。
如果您连接到数据库,这个变量就会更新,如图 8所示。
图 8. 出现在提示符上的实例名和数据库名
498)this.style.width=498;">
如果我从这个数据库断开,这个定制的字符串会反映出这一操作。如果我接着再连接到不同的实例,在DB2UDB CLP 中也会得到动态的反映,如图 9所示。
图 9. 连接到新的DB2UDB 实例时,CLP 动态进行更新
498)this.style.width=498;">
DB2_CLPPROMPT 脑力测试
对于DB2_CLPPROMPT 变量,有很多组合变量的方法。我把它留给您去试验,您不仅可以试验不同的可用变量,还可以看看它们对于不同环境设置的相应结果。
不过来一点“告别”测试怎么样?
根据以下设置:
db2set db2_clpprompt="db2 (%ia@%i, %da@%d):"
|
以下条件下,您会看到什么结果?
- DB2INSTANCE 设为 TESTING。DB2DBFT 未设置。不存在已连接的实例连接,也不存在数据库连接。单击此处,获得答案。
- DB2INSTANCE 设为DB2。DB2DBFT 设为 SAMPLE。DB2实例有一个实例连接,授权标识为 PAULZ。 单击此处,获得答案。
- DB2INSTANCE 设为DB2。DB2DBFT 设为 SAMPLE。只有一个数据库连接到 SAMPLE 数据库,授权标识为 PAULZ。单击此处,获得答案。
关于作者
498)this.style.width=498;">Paul C. Zikopoulos,文学士,MBA,是一位与 IBM Global Sales Support 小组合作的 IDUG 的专题和获奖发言人。他有七年多的DB2使用经验,还写了许多关于DB2的杂志文章和书籍。Paul 为很多杂志撰写有关DB2的文章,并且是多本书的合作者,包括:DB2- The Complete Reference、DB2Fundamentals Certification for Dummies、DB2For Dummies以及A DBA's Guide to Databases on Linux。Paul 是一位DB2认证高级技术专家(DB2Certified Advanced Technical Expert)(DRDA 和 Cluster/EEE)、DB2认证解决方案专家(DB2Certified Solutions Expert)(商业智能(Business Intelligence)和数据库管理(Database Administration))。您可以通过 paulz_ibm@msn.com 与他联系。 |