引言
IBM® DB2® Universal Database™ Linux、UNIX® 和 Windows® 版(下稱 DB2 UDB)提供了兩種從命令行界面輸入命令的方式。當以交互(Interactive)模式使用 DB2 UDB 命令行處理器(DB2 UDB Command Line Processor,DB2 UDB CLP)時,您不必在 DB2 UDB 命令或 SQL 查詢前加上關鍵字 db2 。如果您不熟悉 DB2 UDB CLP 不同的運行模式,那麼請查看 DB2 規劃 - DB2 V8.1 Family Fundamentals 認證准備教程,第 1 部分(共 6 部分)。
請看一下 圖 1,圖中在運行於交互模式下的 DB2 UDB CLP 中輸入了 SELECT *... 語句。您知道這個特定表(STAFF)位於哪個數據庫或實例嗎?您大概不知道吧(雖然對於這個特例,您可以猜測);可是,DB2 UDB 知道!
圖 1. 缺省的 CLP 視圖不會告訴您連接到了哪個實例
現在看一眼下面 圖 2中一模一樣的查詢。您現在能回答我的問題了嗎?注意到有什麼不同了嗎?
圖 2. 對 CLP 進行了定制,以向您顯示您所連接的實例和數據庫
帶修訂包 1(Fix Pack 1,FP1)的 DB2 UDB V8.1 提供了很棒的新功能,這項功能可以讓您在運行於交互模式時,定制 DB2 UDB CLP 提示符(後文所指的 DB2 UDB CLP 就是運行於交互模式的 DB2 UDB CLP)。
您可以使用這項新的定制功能,把您自己的文本和反映當前實例連接(instance attachment)和/或數據庫連接(database connection)的上下文(context)的變量添加到輸出顯示。本文將向您介紹這項新的定制功能。
定制交互模式下的 DB2 UDB CLP
帶 FP1 的 DB2 V8.1 新增了可定制的 DB2 UDB CLP 交互提示符功能。現在 DB2 UDB CLP 提示符可以反映當前實例連接和數據庫連接的上下文,還可以顯示特定的字符消息。如果沒有該項功能,使用交互模式下的 DB2 CLP 會顯示硬編碼的提示符,如 圖 3所示。
圖 3. CLP 中的硬編碼提示符
在繼續下去之前:關於 DB2 UDB 注冊表變量的 20 秒課程
您可以使用 DB2 UDB 注冊表變量更改環境。這些變量之所以可以被這樣設置,是因為它們本質上是動態的,並且可適用於當前運行時環境,而無需包含在系統啟動概要文件中。有一些 DB2 UDB 注冊表變量只能設置為系統啟動的一部分。
DB2 UDB V8.1 提供了 DB2 概要注冊表(DB2 Profile Registry)用以控制環境。在以前的發行版中,如果更改了環境級別,就需要重新引導 DB2 UDB。現在有了一些例外,可以通過存儲在 DB2 概要注冊表中的注冊表變量對 DB2 UDB V8.1 環境進行專門控制。
可使用 db2set命令更新 DB2 UDB 注冊表變量;這些信息被立即存儲到概要注冊表中。DB2 概要注冊表將這些更新過的信息應用到在進行更改之後啟動的 DB2 UDB 服務器實例和應用程序。
也可以使用 set命令給環境級變量賦值,以用於臨時會話(以此方式設置的大部分變量會出現在 DB2 UDB 注冊表中;但是,有一些不會,如 DB2INSTANCE)。
如果需要永久性設置某個環境變量,那麼您應該使用 db2set命令在工作站的啟動概要文件內設置它。 set命令設置的環境變量只在命令行會話期間有效,而 db2set命令行則將環境變量永久性地設置在 DB2 概要注冊表中。
要查看全部受支持的注冊表變量列表,請輸入以下命令:
db2set -lr
要更改 DB2 UDB 注冊表變量的值,請輸入以下命令:
db2set registry_variable_name=new_value
要查看被設置的全部 DB2 UDB 注冊表變量列表,請輸入以下命令:
db2set -all
此命令的輸出類似圖 4。
圖 4. db2 set -all 命令的輸出
請注意環境級變量前面有個 [e] ,而實例變量和全局變量前面分別為 [i] 和 [g] 。
設置 DB2_CLPPROMPT 注冊表變量
要定制 DB2 UDB CLP 命令提示符,請使用新的 DB2 UDB 注冊表變量:DB2_CLPPROMPT。
您可以將 DB2_CLPPROMPT 設置為長度不超過 100 個字符的任何文本字符串。這個定制的字符串可包含在運行時可替換的可選標記。如果這個注冊表變量在 DB2 UDB CLP 會話期間發生更改,那麼新的值在用戶退出再重新進入該處理器後方可生效。
可以將 DB2 UDB CLP 定制為只顯示一行字符串,這是最基本的形式。 圖 5和 圖 6演示了 DB2_CLPPROMPT 注冊表變量的設置以及 DB2 UDB CLP 的後續調用。
圖 5. 設置命令行提示符注冊表變量
圖 6. 結果
現在,盡管這個示例挺有意思,但沒什麼大用。DB2_CLPPROMPT 注冊表變量可以附帶一些關聯變量,可以用這些變量向 DB2 UDB CLP 返回一些關於當前的或缺省的實例連接以及當前所連接的(或缺省的)數據庫的信息。
受支持的變量如 表 1所示。
表 1.受 CLP 支持的運行時變量
變量 運行時值 %ia 如果存在實例連接,則為當前實例連接的授權標識(authid);否則為空字符串。 %i 如果實例連接存在,則為當前所連接的實例的本地別名;如果不存在本地實例連接,則為 DB2INSTANCE 或 DB2INSTDEF 注冊表變量的值;否則,為空字符串。 %da 如果存在數據庫連接,則為當前數據庫連接的授權標識;否則為空字符串。 %d 如果數據庫連接存在,則為當前連接的數據庫的本地別名;否則為 DB2DBDFT 注冊表變量值;再不然則為空值。 %n 換行符。例如,要設置 DB2 UDB CLP 提示符,使其解析為:
(Instance , Database ):
輸入以下命令:
db2set db2_clpprompt=" (Instance:%I, Database: %d):"
您可以輸入 db2set all 命令來驗證 DB2 UDB 概要注冊表中的該項設置。
圖 7向您顯示了這一命令序列,包括在以交互模式啟動 CLP 會話之後的顯示結果。
圖 7. 設置 DB2_CLPPROMPT 並驗證其使用
請注意此例中,我用了 未處於交互模式的 DB2 UDB CLP,這就是為什麼交互模式在同一個窗口中被啟動的原因(我這樣做是讓您體會一下調用 DB2 UDB CLP 的不同方式)。
圖 7 中,您會看到 變量沒有值。該變量之所以為空是因為在我的環境中沒有數據庫連接或者定義的缺省數據庫。
如果您連接到數據庫,這個變量就會更新,如 圖 8所示。
圖 8. 出現在提示符上的實例名和數據庫名
如果我從這個數據庫斷開,這個定制的字符串會反映出這一操作。如果我接著再連接到不同的實例,在 DB2 UDB CLP 中也會得到動態的反映,如 圖 9所示。
圖 9. 連接到新的 DB2 UDB 實例時,CLP 動態進行更新
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。單擊此處,獲得 答案。
關於作者
Paul C. Zikopoulos,文學士,MBA,是一位與 IBM Global Sales Support 小組合作的 IDUG 的專題和獲獎發言人。他有七年多的 DB2 使用經驗,還寫了許多關於 DB2 的雜志文章和書籍。Paul 為很多雜志撰寫有關 DB2 的文章,並且是多本書的合作者,包括: DB2 - The Complete Reference、DB2 Fundamentals Certification for Dummies、DB2 For Dummies以及 A DBA's Guide to Databases on Linux。Paul 是一位 DB2 認證高級技術專家(DB2 Certified Advanced Technical Expert)(DRDA 和 Cluster/EEE)、DB2 認證解決方案專家(DB2 CertifIEd Solutions Expert)(商業智能(Business Intelligence)和數據庫管理(Database Administration))。您可以通過 [email protected] 與他聯系。