DB2 UDB 命令行處理器(CLP)是一個(gè)接口,通過(guò)這個(gè)接口可以方便地訪問(wèn) DB2 UDB 函數(shù)。CLP 接受來(lái)自 DB2 命令行的命令或 SQL 語(yǔ)句。在基于 Linux 和 UNIX® 的系統(tǒng)中,這個(gè)命令行是 DB2 實(shí)例的命令行。在 Windows® 操作系統(tǒng)中,它是啟用了 CLP 命令窗口的命令行;在這種情況下,必須先(從普通命令窗口)運(yùn)行 db2cmd 命令來(lái)啟動(dòng) DB2 命令行環(huán)境。
db2 命令可以啟動(dòng)命令行處理器。CLP 包括前端進(jìn)程(表示用戶界面)和后端進(jìn)程,可以用它們來(lái)維護(hù)數(shù)據(jù)庫(kù)連接。每次 db2 調(diào)用都啟動(dòng)新的前端進(jìn)程;第一次 db2 調(diào)用要啟動(dòng)后端進(jìn)程。擁有相同父進(jìn)程的所有前端進(jìn)程都是由一個(gè)后端進(jìn)程提供服務(wù)的,因此它們共享一個(gè)數(shù)據(jù)庫(kù)連接。QUIT 命令停止命令行處理器,但是不刪除關(guān)聯(lián)的后端進(jìn)程;要?jiǎng)h除關(guān)聯(lián)的后端進(jìn)程,需要發(fā)出 TERMINATE 命令。建議在停止實(shí)例(STOP DATABASE MANAGER 或 db2stop)之前執(zhí)行 TERMINATE 命令;否則,后端進(jìn)程會(huì)保持一個(gè)不再可用的實(shí)例連接(Attachment)。
db2 命令
可以用下列三種模式之一啟動(dòng) CLP:
- 命令模式。在這種模式下,每個(gè)命令或 SQL 語(yǔ)句必須添加前綴
db2
。在 Windows 操作系統(tǒng)中,DOSKEY 命令允許使用 Up Arrow(向上箭頭)鍵在會(huì)話的命令歷史記錄上滾動(dòng),并重新發(fā)出命令,而無(wú)需再次輸入該命令。還可以創(chuàng)建包含 DB2 命令或 SQL 語(yǔ)句的命令文件,并像運(yùn)行其他任何命令文件那樣運(yùn)行該文件。例如,名為 myfile.cmd 的文件包含下列代碼: db2start db2 connect to sample db2 select * from org db2 terminate db2stop |
可以通過(guò)從 Windows DB2 命令提示符發(fā)出 myfile
來(lái)運(yùn)行該文件。 - 交互輸入模式。可以通過(guò)發(fā)出 db2 命令同時(shí)不指定其他任何東西來(lái)啟動(dòng)該模式。交互輸入模式的特點(diǎn)在于默認(rèn)
db2 =>
命令提示符。從該提示符下發(fā)出的命令和語(yǔ)句沒(méi)有前綴 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 Office 160 Corporate New York 15 New England 50 Eastern Boston 20 Mid Atlantic 10 Eastern Washington 38 South Atlantic 30 Eastern Atlanta 42 Great Lakes 100 Midwest Chicago 51 Plains 140 Midwest Dallas 66 Pacific 270 Western San Francisco 84 Mountain 290 Western Denver 8 record(s) selected. db2 => terminate DB20000I The TERMINATE command completed successfully. elk /home/melnyk> |
現(xiàn)在可以定制該提示符,并訪問(wèn)當(dāng)前會(huì)話的命令歷史記錄。要退出交互輸入模式,可以返回操作系統(tǒng)提示符,然后發(fā)出 QUIT 命令或 TERMINATE 命令。 - 批處理模式。該模式允許運(yùn)行命令腳本、文本文件中的 DB2 命令或 SQL 語(yǔ)句,這些腳本、文本文件按其執(zhí)行順序包含命令和語(yǔ)句。在該例中,可以在 db2 命令中使用 -f 選項(xiàng)標(biāo)記(參見表 1)來(lái)指定命令腳本的名稱。例如,名為 myscript.db2 的文件包含下列代碼:
!db2start; connect to sample; select * from org; terminate; |
可以通過(guò)從 DB2 命令提示符發(fā)出 db2 -tf myscript.db2
來(lái)運(yùn)行該文件。注意這個(gè)文件與上面顯示的 myfile.cmd 在內(nèi)容上的差別。在該例中,文件中的命令和語(yǔ)句沒(méi)有前綴 db2
。每個(gè)命令或語(yǔ)句以分號(hào)結(jié)尾;實(shí)際上,通過(guò)在 db2 命令中指定 -t 選項(xiàng)標(biāo)記,我們指示 CLP 使用分號(hào)作為語(yǔ)句終止字符。您可能還注意到 db2start 命令前的感嘆號(hào),這說(shuō)明該命令不是 CLP 命令,而是從操作系統(tǒng)提示符發(fā)出的系統(tǒng)命令。這個(gè)感嘆號(hào)是換碼符,允許您從交互輸入模式或批處理模式發(fā)出操作系統(tǒng)命令。
圖 1 顯示了完整的 db2 命令語(yǔ)法。選項(xiàng)包括用來(lái)配置 CLP 會(huì)話的一個(gè)或多個(gè)選項(xiàng)標(biāo)記的規(guī)范(表 1)、要執(zhí)行的 DB2 命令或 SQL 語(yǔ)句、一般 CLP 幫助請(qǐng)求(?),或者與特定命令相關(guān)的幫助文本(? phrase)、SQLCODE(? message)、SQLSTATE(? sqlstate)或類代碼(? class-code)。您還可以請(qǐng)求 CLP 選項(xiàng)的當(dāng)前設(shè)置(? options),或者請(qǐng)求關(guān)于閱讀在線幫助語(yǔ)法表的信息(? help)。下例說(shuō)明了其中一些選項(xiàng):
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 命令有關(guān)的其他一些要點(diǎn):
- 問(wèn)號(hào)(?)與后面的文本字符串之間至少要隔開一個(gè)空格。
- CLP 將前綴為兩個(gè)連字符的所有文本字符串都解釋為注釋。
- 在 CLP 命令模式或交互輸入模式下,可以將反斜線字符(\)用作行連續(xù)字符。CLP 遇到行連續(xù)符時(shí),它會(huì)讀取下一行并將兩行連接起來(lái)。在 Windows 操作系統(tǒng)中,行連續(xù)字符生成臨時(shí)
db2 (cont.) =>
提示符。 - 如果 db2 命令返回的消息文本過(guò)長(zhǎng),那么可以考慮使用“more”分屏顯示(如果可以在操作系統(tǒng)中使用的話),或?qū)⑤敵鲋囟ㄏ虻揭粋€(gè)文件中。例如:
db2 "? sql0510" | more db2 "? SQL0510" > sql0510n.out |
也可以使用 -r 或 -z CLP 選項(xiàng)將輸出重定向到文件中(參見表 1)。例如: db2 -r mydata\orglist.txt "select * from org" |
- 建議在基于 Linux 和 UNIX 的系統(tǒng)中使用雙引號(hào)分隔符。如果在 CLP 命令模式下使用了特殊字符,那么這些特殊符號(hào)將由操作系統(tǒng) shell 解釋。這可能會(huì)生成意想不到的結(jié)果,除非使用雙引號(hào)或換碼符(如反斜線字符 \)。例如,在 AIX® Korn shell 環(huán)境中執(zhí)行下列命令時(shí),如下所示:
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”(以大寫字符指定)識(shí)別為空字符串。例如:
db2 update database configuration using mirrorlogpath NULL |
圖 1. db2 命令的語(yǔ)法
表 1. CLP 選項(xiàng)標(biāo)記
選項(xiàng) | 描述(默認(rèn)) |
-a | 顯示 SQLCA 數(shù)據(jù)。(OFF) |
-c | 自動(dòng)提交 SQL 語(yǔ)句。(ON) |
-e{c|s} | 將 SQLCODE 或 SQLSTATE 數(shù)據(jù)寫入標(biāo)準(zhǔn)輸出。(OFF) |
-f filename | 接受指定文件(命令腳本)中的輸入。如果其他選項(xiàng)與 -f 選項(xiàng)一起指定,必須最后指定 -f 選項(xiàng)。(OFF) |
-l filename | 將日志記錄寫入指定文件。該文件包含已執(zhí)行命令和語(yǔ)句的歷史記錄。如果該文件已經(jīng)存在,則新的信息會(huì)添加在該文件的后面。如果其他選項(xiàng)與 -l 選項(xiàng)一起指定,必須最后指定 -l 選項(xiàng)。(OFF) |
-n | 保留分隔符號(hào)內(nèi)換行字符前的所有尾部空格字符。例如: 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 選項(xiàng)必須與 -t 選項(xiàng)一起使用。(OFF) |
-o | 將數(shù)據(jù)和消息都寫入標(biāo)準(zhǔn)輸出。(ON) |
-p | 處于 CLP 交互模式下時(shí)顯示提示符。(ON) |
-r filename | 將輸出(消息和錯(cuò)誤代碼除外)重定向到指定的文件。如果該文件已經(jīng)存在,則將新的消息添加到文件的后面。如果 -a 選項(xiàng)與 -r 選項(xiàng)一起指定,那么將 SQLCA 數(shù)據(jù)也寫入文件中。-r 選項(xiàng)不影響 -e 選項(xiàng)。如果指定了 -e 選項(xiàng),那么 SQLCODE 或 SQLSTATE 數(shù)據(jù)被寫入標(biāo)準(zhǔn)輸出,而不是被寫入文件中。(OFF) |
-s | 如果執(zhí)行命令腳本時(shí)或在處于 CLP 交互模式下時(shí)發(fā)生錯(cuò)誤,那么可以使用這個(gè)選項(xiàng)停止處理;將錯(cuò)誤消息寫入標(biāo)準(zhǔn)輸出。如果禁用該選項(xiàng),則會(huì)顯示錯(cuò)誤消息,并繼續(xù)執(zhí)行剩余命令或語(yǔ)句;只有發(fā)生系統(tǒng)錯(cuò)誤時(shí)才停止執(zhí)行。(OFF) |
-t | 使用分號(hào)(;)作為語(yǔ)句終止符號(hào)。該選項(xiàng)禁用反斜線(\)行連續(xù)字符。(OFF) |
-tdx | 使用 x 作為語(yǔ)句終止字符。(OFF) |
-v | 將輸入文本回送到標(biāo)準(zhǔn)輸出。(OFF) |
-w | 顯示 SQL 語(yǔ)句警告消息。(ON) |
-x | 返回沒(méi)有任何標(biāo)題(包括列名)的數(shù)據(jù)。(OFF) |
-z filename | 將所有輸出(包括任何消息或錯(cuò)誤代碼)重定向到指定的文件。如果該文件已經(jīng)存在,則將新的信息添加到文件的后面。如果 -a 選項(xiàng)與 -z 選項(xiàng)一起指定,那么還要將 SQLCA 數(shù)據(jù)也寫入文件中。-z 選項(xiàng)不影響 -e 選項(xiàng)。如果指定了 -e 選項(xiàng),那么要將 SQLCODE 或 SQLSTATE 數(shù)據(jù)寫入標(biāo)準(zhǔn)輸出,而不是寫入文件中。(OFF) |
CLP 選項(xiàng)通??梢砸匀魏雾樞蚝徒M合來(lái)指定。要開啟選項(xiàng),則需要在相應(yīng)的選項(xiàng)字符前加上減號(hào)(例如,-f)。要關(guān)閉選項(xiàng),則需要在選項(xiàng)字母前加上加號(hào),或者在選項(xiàng)字母兩邊分別加上減號(hào)。
可以使用 LIST COMMAND OPTIONS 命令查看 CLP 選項(xiàng)的當(dāng)前設(shè)置。通過(guò)發(fā)出 UPDATE COMMAND OPTIONS 命令,可以在 CLP 交互輸入模式或批處理模式下更改這些設(shè)置。例如:
db2 => update command options using c off p off |
在交互會(huì)話或批處理輸入結(jié)束時(shí),這些設(shè)置恢復(fù)為它們的原始值。 還可以使用 DB2OPTIONS 注冊(cè)變量設(shè)置會(huì)話的 CLP 選項(xiàng)。例如:
export DB2OPTIONS='+c -p-' => Linux and UNIX-based systems set DB2OPTIONS=+c -p- => Windows operating systems |
該命令關(guān)閉 SQL 語(yǔ)句的自動(dòng)提交,并刪除在 CLP 交互輸入模式下顯示的提示符。 交互 CLP 中的新的可用功能
DB2 UDB Version 8.1 引入了針對(duì) DB2 CLP 的一些易用性方面的重要改進(jìn)?,F(xiàn)在可以對(duì)在交互模式下使用 CLP 時(shí)出現(xiàn)的提示符進(jìn)行定制。還可以使用新的命令緩存來(lái)運(yùn)行以前執(zhí)行的命令,或者使用操作系統(tǒng)的集成命令編輯器或選擇的編輯器來(lái)編輯那些命令。
定制的 CLP 提示符可以顯示當(dāng)前用戶、實(shí)例連接或數(shù)據(jù)庫(kù)連接。要定義命令提示符,則需要設(shè)置新的名為 DB2_CLPPROMPT 的 DB2 UDB 注冊(cè)變量。DB2_CLPPROMPT 注冊(cè)變量可以設(shè)置為任何文本字符串,最大長(zhǎng)度為 100 個(gè)字符。定制的字符串可以包含任意符號(hào),在運(yùn)行的時(shí)候,實(shí)際值將替代這些符號(hào)。側(cè)欄中描述了可以設(shè)置的符號(hào)。