如可以降低命令的輸入量;如可以將調(diào)試測(cè)試通過(guò)的命令保存起來(lái)以便于下次需要的時(shí)候再次使用;如可以避免輸入上的錯(cuò)誤等等。雖然說(shuō),Oracle數(shù)據(jù)庫(kù)提供的SQL*Plus程序編輯工具提供了一定程度的現(xiàn)實(shí)、編輯、修改SQL緩沖區(qū)命令的功能,但是,其對(duì)命令的編輯能力是非常弱小的,操作起來(lái)也不如腳本文件那么方便。故很多數(shù)據(jù)庫(kù)管理專(zhuān)家喜歡把一些常用的命令制作成腳本文件。在以后需要用的時(shí)候,直接調(diào)用腳本文件即可。如筆者現(xiàn)在保存的有用腳本文件已有近百個(gè)。在需要用的時(shí)候,只要把腳本文件拿過(guò)來(lái),有的可以直接拿來(lái)執(zhí)行;有的只要稍微根據(jù)實(shí)際情況修改一下,也可以使用。
所以,筆者覺(jué)得腳本文件是Oracle數(shù)據(jù)庫(kù)管理中的一個(gè)不可缺的工具,其實(shí),利用腳本文件管理Oracle數(shù)據(jù)庫(kù)也不是大家想像的那么困難。通過(guò)這篇文章,或許大家就可以消除這方面的恐懼感。
第一步:創(chuàng)建腳本文件。
在Oracle數(shù)據(jù)庫(kù)重,創(chuàng)建腳本文件的方式很多。如可以直接在記事本中創(chuàng)建腳本文件,也可以通過(guò)SQL*Plus工具直接創(chuàng)建。不過(guò),筆者的意見(jiàn)是,在SQL*Plus中直接創(chuàng)建腳本文件的話(huà),比較麻煩。這主要是因?yàn)樵赟QL*Plus工具中,命令編輯能力非常有效。如不能夠使用鍵盤(pán)上的箭頭鍵定位輸入的位置,不能夠使用DEL鍵刪除輸入的內(nèi)容等等。而且閱讀起來(lái)也比較困難。
筆者喜歡的作法是,現(xiàn)在一些編輯器中,如文本文件中先把腳本語(yǔ)句寫(xiě)好,然后直接復(fù)制到SQL*Plus工具中進(jìn)行測(cè)試。若測(cè)試通過(guò)的話(huà),即就可以把它保存起來(lái),以待下次有需要的時(shí)候使用。所以,利用第三方的腳本語(yǔ)句編輯工具,有一個(gè)缺陷就是不能夠直接對(duì)語(yǔ)句進(jìn)行測(cè)試。而需要人工的把它復(fù)制粘貼到Oracle環(huán)境中進(jìn)行測(cè)試。不過(guò)這對(duì)于命令編輯來(lái)說(shuō),這點(diǎn)功夫還是值得的。畢竟在第三方工具中編輯腳本語(yǔ)句,要比在SQL*Plus中,編輯腳本要簡(jiǎn)單的不知道多少倍。筆者也搞不清楚,像Oracle這么大的數(shù)據(jù)庫(kù)管理軟件,為什么不開(kāi)發(fā)一個(gè)像樣的腳本語(yǔ)句編輯器呢。
另外需要說(shuō)明的一點(diǎn)就是,在SQL*Plus語(yǔ)句中,雖然可以對(duì)未測(cè)試或者有錯(cuò)誤的腳本語(yǔ)句進(jìn)行保存。不過(guò),這么做的話(huà),只會(huì)浪費(fèi)時(shí)間。為了提高腳本語(yǔ)句的可用性,筆者是強(qiáng)烈建議,數(shù)據(jù)庫(kù)管理員不要太過(guò)于自信,腳本語(yǔ)句編寫(xiě)完成后,一定要進(jìn)行測(cè)試。只有經(jīng)過(guò)測(cè)試表明這個(gè)腳本語(yǔ)句有用后,才能對(duì)其進(jìn)行歸檔。
其次,若采用記事本等工具編寫(xiě)腳本語(yǔ)句的時(shí)候,為了在Oracle環(huán)境中可以直接調(diào)用這個(gè)腳本文件,最好把腳本文件的擴(kuò)展名改為SQL。這是Oracle數(shù)據(jù)庫(kù)承認(rèn)的腳本文件擴(kuò)展名。
還有對(duì)于初次接觸腳本文件的數(shù)據(jù)庫(kù)管理員來(lái)說(shuō),對(duì)于腳本文件的格式要稍微注意一點(diǎn)。大體上,跟普通的SQL語(yǔ)句類(lèi)似。只是在兩個(gè)方面要引起注意。一是在腳本文件的最后一行,一定要添加“/”符號(hào)。這個(gè)符號(hào)的作用是,告示數(shù)據(jù)庫(kù)現(xiàn)在可以執(zhí)行這條語(yǔ)句了。二是在SQL語(yǔ)句的最后一條語(yǔ)句中,不要添加“;”號(hào)。否則的話(huà),下次運(yùn)行這個(gè)腳本語(yǔ)句的時(shí)候,會(huì)出現(xiàn)錯(cuò)誤。
最后,在編寫(xiě)腳本文件的時(shí)候,要注意腳本文件的變量問(wèn)題。若腳本文件需要外界傳入?yún)?shù),則在執(zhí)行的時(shí)候,SQL*Plus工具,會(huì)使用這些外部傳入的值替換腳本文件中的替換參數(shù),所以,腳本文件中替換參數(shù)的生命方式跟Oracle數(shù)據(jù)庫(kù)中函數(shù)與過(guò)程的變量聲明方式有一點(diǎn)區(qū)別。在腳本文件中,在使用替換參數(shù)的時(shí)候,不需要事先聲明。而是在要用到的時(shí)候,直接利用&1 &2等來(lái)表示。
第二步:編輯腳本文件。
在我們使用腳本文件的時(shí)候,往往需要根據(jù)實(shí)際情況,對(duì)其進(jìn)行稍微的調(diào)整。對(duì)腳本文件進(jìn)行編輯,也有兩種方式。一是通過(guò)SQL*Plus工具,二是第三方獨(dú)立的腳本編輯軟件。
對(duì)于一些調(diào)整不大的腳本文件,我們可以直接利用SQL*Plus工具打開(kāi),然后進(jìn)行編輯。但是,對(duì)于需要進(jìn)行大量修改的腳本文件,則筆者建議數(shù)據(jù)庫(kù)管理員采用第三方獨(dú)立的腳本編輯軟件。原因很簡(jiǎn)單,就如同上面所說(shuō)的那樣,SQL*Plus工具腳本命令編輯功能非常的薄弱。若采用這個(gè)工具對(duì)現(xiàn)成的腳本語(yǔ)句進(jìn)行編輯的話(huà),則可能工作量還是重新編寫(xiě)一個(gè)來(lái)的輕。所以,數(shù)據(jù)庫(kù)管理員要根據(jù)實(shí)際的情況,選擇合適的腳本編輯工具。
另外,在編輯的過(guò)程中,要注意語(yǔ)法的正確性。特別是要注意,不能夠改變其固有的格式。如不要不小心刪除了最后的“/”符號(hào)結(jié)束,等等。筆者現(xiàn)在喜歡用的時(shí)微軟自帶的記事本作為腳本的編輯工具。他比較方便,而且也不用再去網(wǎng)上找專(zhuān)業(yè)的腳本編輯工具。即省事,又能夠我們數(shù)據(jù)庫(kù)管理員的常規(guī)需求,何樂(lè)而不為呢!
第三步:運(yùn)行腳本文件。
腳本建立好之后,如何運(yùn)行腳本呢?在Oracle系統(tǒng)中也提供了許多方式。數(shù)據(jù)庫(kù)管理員可以根據(jù)自己的使用習(xí)慣來(lái)進(jìn)行選擇。
一是通過(guò)Start語(yǔ)句來(lái)調(diào)用腳本文件。其語(yǔ)法是Start Filemame[相關(guān)參數(shù)]。在運(yùn)行這個(gè)命令的時(shí)候,需要注意幾個(gè)問(wèn)題。
1、腳本文件的擴(kuò)展名問(wèn)題。上面在建立腳本文件的時(shí)候,筆者就跳掉過(guò),為了在SQL*Plus等工具中可以直接調(diào)用這個(gè)腳本文件,最好能夠把擴(kuò)展名改為Oracle數(shù)據(jù)庫(kù)能夠接受的擴(kuò)展名。默認(rèn)情況下,擴(kuò)展名設(shè)置為SQL即可。
2、腳本文件的路徑問(wèn)題。若用戶(hù)在利用Start調(diào)用腳本文件的時(shí)候,若沒(méi)有清楚的指名保存路徑的話(huà),則SQL*Plus工具會(huì)現(xiàn)在當(dāng)前的目錄中進(jìn)行查找;若沒(méi)有的話(huà),則會(huì)根據(jù)環(huán)境變量中確定的目錄中進(jìn)行查找。而一般情況下,我們把腳本文件都會(huì)獨(dú)立存放。所以,在使用Start命令執(zhí)行腳本文件的時(shí)候,最好能夠注明腳本文件的絕對(duì)路徑名。防止語(yǔ)句執(zhí)行錯(cuò)誤。
另外@命令也可以起到跟Start命令一樣的作用。只不過(guò),前者的使用范圍更廣一點(diǎn)。@命令可以脫離SQL*PLUS工具而使用。如可以直接在微軟操作系統(tǒng)中的命令行方式下使用。當(dāng)然,這操作系統(tǒng)要事先部署了Oracle數(shù)據(jù)庫(kù)環(huán)境。
二是可以直接利用SQL*Plus工具打開(kāi)文本文件,執(zhí)行腳本語(yǔ)句。然后點(diǎn)擊“文件”、“執(zhí)行”命令執(zhí)行這個(gè)腳本語(yǔ)句。這種方式的好處就是,系統(tǒng)會(huì)主動(dòng)提示用戶(hù)需要輸入的參數(shù)。
不過(guò)筆者不怎么喜歡采用以上兩種方式。筆者一般是先利用腳本編輯器打開(kāi)對(duì)應(yīng)的腳本文件。然后看看是否需要進(jìn)行必要的更改。若不需要的話(huà),就直接把這個(gè)語(yǔ)句復(fù)制粘貼到SQL*Plus工具中,執(zhí)行。如此的話(huà),也就不用像Start那樣,指定腳本文件的具體位置了。
在執(zhí)行腳本語(yǔ)句的時(shí)候,特別需要注意一個(gè)參數(shù)的位置問(wèn)題。從外界傳入的參數(shù),要跟腳本語(yǔ)句的替換參數(shù)一一對(duì)應(yīng)。如果參數(shù)的位置出現(xiàn)問(wèn)題,則執(zhí)行的結(jié)果也就會(huì)有問(wèn)題。
總之,腳本文件是我們管理Oracle數(shù)據(jù)庫(kù)的一大利器。我們好好利用腳本文件,可以提高Oracle數(shù)據(jù)庫(kù)的管理效率。畢竟,每次在需要的時(shí)候,都去編寫(xiě)命令是一件很麻煩的事情。而腳本文件的最大好處,就是可以提高語(yǔ)句的重復(fù)利用,節(jié)省我們編寫(xiě)語(yǔ)句、調(diào)試測(cè)試的時(shí)間。