摘要:簡(jiǎn)要介紹了SQL*Loader工具的主要功能和優(yōu)缺點(diǎn),為解決SQL*Loader可視化不強(qiáng)的缺點(diǎn),提出了使用SQL*Loader工具的可視化數(shù)據(jù)導(dǎo)入方法。最后給出了具體實(shí)例和部分關(guān)鍵代碼,驗(yàn)證了所提方法的正確性和可行性。
關(guān)鍵詞:SQL*Loader;可視化;數(shù)據(jù)導(dǎo)入;控制文件;批處理
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2013)07-1478-03
現(xiàn)在G字節(jié)的數(shù)據(jù)庫(kù)已經(jīng)很普遍,數(shù)據(jù)倉(cāng)庫(kù)通常都達(dá)到了T字節(jié)容量,隨著數(shù)據(jù)庫(kù)的增長(zhǎng),使用外部數(shù)據(jù)快速有效地填充數(shù)據(jù)庫(kù)的需求變得非常重要。為迎接這個(gè)挑戰(zhàn),Oracle提供了一個(gè)稱(chēng)為SQL*Loader的工具。SQL*Loader專(zhuān)門(mén)為Oracle數(shù)據(jù)庫(kù)進(jìn)行設(shè)計(jì),具有功能強(qiáng)大、數(shù)據(jù)加載快速的優(yōu)點(diǎn),但必須使用命令行窗口進(jìn)行調(diào)用,對(duì)使用人員要求比較高,操控性不強(qiáng)。如何能方便快捷的使用SQL*Loader工具進(jìn)行數(shù)據(jù)導(dǎo)入,并且實(shí)現(xiàn)可視化操作,則成為一個(gè)普遍的問(wèn)題。為實(shí)現(xiàn)可視化的使用SQL*Loader工具進(jìn)行數(shù)據(jù)導(dǎo)入,筆者使用Delphi7作為程序開(kāi)發(fā)工具,開(kāi)發(fā)出一個(gè)小軟件。該軟件可以在界面上設(shè)置導(dǎo)入數(shù)據(jù)的幾種主要參數(shù),并調(diào)用SQL*Loader工具將外部數(shù)據(jù)快速導(dǎo)入到Oracle數(shù)據(jù)庫(kù)中。需要說(shuō)明的是本軟件僅使用SQL*Loader工具的部分主要功能來(lái)驗(yàn)證可視化的數(shù)據(jù)導(dǎo)入方法,以起到拋磚引玉的作用。
1 SQL*Loader簡(jiǎn)介
SQL*Loader工具能夠?qū)?shù)據(jù)從外部數(shù)據(jù)文件裝載進(jìn)Oracle數(shù)據(jù)庫(kù)。外部文件為文本格式的各種文檔,可以是TXT、DAT、CSV等。SQL*Loader的中樞核心是控制文件,控制文件能夠控制外部數(shù)據(jù)文件中的數(shù)據(jù)如何映射到Oracle的表和列。SQL*Loader輸入數(shù)據(jù)類(lèi)型完全獨(dú)立于它們將被載入的數(shù)據(jù)庫(kù)列的數(shù)據(jù)類(lèi)型。在控制文件中使用的語(yǔ)言是SQL*Loader數(shù)據(jù)定義語(yǔ)言(Data Definition Language,DDL)。SQL*Loader在執(zhí)行過(guò)程中還將生成日志文件、錯(cuò)誤文件和廢棄文件。SQL*Loader的裝載方式有常規(guī)路徑和直接路徑裝載兩種,默認(rèn)為常規(guī)路徑裝載。常規(guī)路徑裝載使用SQL INSERT語(yǔ)句和內(nèi)存中的鍵數(shù)組緩存將數(shù)據(jù)直接路徑映射輸入數(shù)據(jù)項(xiàng)到數(shù)據(jù)庫(kù)表中,這個(gè)過(guò)程與其他進(jìn)程競(jìng)爭(zhēng)SGA內(nèi)部的內(nèi)存資源,會(huì)降低裝載的性能。直接路徑裝載不需要使用SQL INSERT語(yǔ)句和鍵數(shù)組緩存,格式化輸入數(shù)據(jù)到Oracle數(shù)據(jù)塊并將它們直接寫(xiě)入數(shù)據(jù)庫(kù)中,在速度上較常規(guī)路徑裝載快。SQL*Loader工具的組件見(jiàn)圖 1。
圖 1 SQL*Loader組件
1.1 SQL*Loader的特點(diǎn)
可以從不同文件類(lèi)型的多個(gè)輸入數(shù)據(jù)文件中裝載數(shù)據(jù);輸入記錄可以是定長(zhǎng)的或變長(zhǎng)的記錄;可以在同一次運(yùn)行中加載多個(gè)表,還可以邏輯地將選定的記錄載入到每個(gè)不同的表中;在輸入數(shù)據(jù)載入表之前,可以對(duì)其使用SQL函數(shù);多個(gè)物理記錄可以被編譯成一個(gè)邏輯記錄,同樣,SQL可以提取一條物理記錄并把它作為多個(gè)邏輯記錄加載;支持嵌套列、嵌套表、VARRAYS和LOBS。
1.2 SQL*Loader的缺點(diǎn)
SQL*Loader雖然能夠快速裝載數(shù)據(jù)到Oracle數(shù)據(jù)庫(kù),但是,使用語(yǔ)法不直觀,只能從命令行窗口處進(jìn)行調(diào)用,使用命令編寫(xiě)控制文件,缺少可視化的操作界面,使用不直觀、專(zhuān)業(yè)性強(qiáng),不易操作,從而制約了其使用范圍。
1.3 可視化數(shù)據(jù)導(dǎo)入解決的問(wèn)題
基于SQL*Loader的可視化數(shù)據(jù)導(dǎo)入功能可以既具備SQL*Loader的導(dǎo)入數(shù)據(jù)快速、強(qiáng)大,又操作簡(jiǎn)單,界面直觀,能較好的彌補(bǔ)通過(guò)命令行使用SQL*Loader工具的不足,受眾面廣。
2 SQL*Loader的可視化數(shù)據(jù)導(dǎo)入方法的設(shè)計(jì)與實(shí)現(xiàn)
首先提供可視化的參數(shù)編輯界面,進(jìn)行數(shù)據(jù)導(dǎo)入的參數(shù)設(shè)置,將參數(shù)寫(xiě)入控制文件;其次生成調(diào)用SQL*Loader的批處理文件,批處理文件需指定連接數(shù)據(jù)庫(kù)的用戶(hù)、控制文件、日志文件及導(dǎo)入數(shù)據(jù)時(shí)的相關(guān)參數(shù);最后執(zhí)行批處理文件,批處理文件將調(diào)用SQL*Loader工具執(zhí)行控制文件內(nèi)容,快速導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫(kù),并生成日志文件。下面將說(shuō)明實(shí)現(xiàn)可視化數(shù)據(jù)導(dǎo)入的主要步驟和關(guān)鍵代碼。
2.1 參數(shù)設(shè)置
選擇設(shè)定需要導(dǎo)入數(shù)據(jù)的目標(biāo)表,選擇數(shù)據(jù)文件,根據(jù)數(shù)據(jù)文件的數(shù)據(jù)格式,設(shè)置字段分隔符、數(shù)據(jù)括號(hào)、跳過(guò)行數(shù)、裝載行數(shù)、裝載方式、每次提交行數(shù),參數(shù)設(shè)置好后還需要指定錯(cuò)誤文件、廢棄文件的路徑。界面設(shè)計(jì)如圖 2:
生成控制文件中命令行的關(guān)鍵代碼如下:
2.2 字段匹配
進(jìn)行目標(biāo)表和數(shù)據(jù)文件數(shù)據(jù)的字段匹配,生成導(dǎo)入列位置的字符串。首先根據(jù)配置好的參數(shù)讀取部分外部數(shù)據(jù)文件中的數(shù)據(jù),再連接數(shù)據(jù)庫(kù)獲取目標(biāo)表的字段,將外部數(shù)據(jù)作為數(shù)據(jù)源,進(jìn)行源字段和目標(biāo)字段匹配操作,如果有時(shí)間字段的還需要對(duì)時(shí)間字段進(jìn)行格式化處理,根據(jù)源數(shù)據(jù)的時(shí)間格式設(shè)置控制文件中的時(shí)間字段的格式參數(shù)。界面如圖 3所示。
圖 3 進(jìn)行字段匹配
2.3 生成控制文件
參數(shù)設(shè)置和字段匹配操作完成后,就可以生成控制文件了。將上兩步執(zhí)行完畢得到的結(jié)果字符串內(nèi)容,保存到以.ctl為擴(kuò)展名的文件中,就生成了控制文件。
2.4 生成批處理文件
通過(guò)界面調(diào)用SQL*Loader工具需要使用批處理文件達(dá)到自動(dòng)調(diào)起的效果。批處理文件中應(yīng)該包含調(diào)起SQL*Loader的語(yǔ)句以及連接數(shù)據(jù)庫(kù)的用戶(hù)名、口令和服務(wù)名,還應(yīng)包含裝載行數(shù)、跳過(guò)行數(shù)、提交行數(shù)等參數(shù)。
生成批處理文件的關(guān)鍵代碼如下:
2.5 數(shù)據(jù)導(dǎo)入
創(chuàng)建執(zhí)行批處理的進(jìn)程執(zhí)行批處理文件,從而調(diào)起SQL*Loader工具在命令行中執(zhí)行控制文件,通過(guò)SQL*Loader將外部數(shù)據(jù)導(dǎo)入到Oracle數(shù)據(jù)庫(kù)表中,并生成日志文件。導(dǎo)入過(guò)程中出現(xiàn)的錯(cuò)誤記錄、廢棄記錄分別記載在錯(cuò)誤文件、廢棄文件中。執(zhí)行批處理文件的關(guān)鍵代碼如下:
3 結(jié)束語(yǔ)
本文使用了SQL*Loader的最基本的一些功能,通過(guò)軟件界面設(shè)置參數(shù),程序代碼生成控制文件和批處理文件,執(zhí)行批處理文件調(diào)用SQL*Loader初步實(shí)現(xiàn)了可視化的數(shù)據(jù)導(dǎo)入功能。SQL*Loader還具有更加強(qiáng)大的應(yīng)用,同樣通過(guò)本文的方法實(shí)現(xiàn)可視化操作和數(shù)據(jù)導(dǎo)入。
參考文獻(xiàn):
[1] 甲骨文公司Ooacle9i 白皮書(shū)[Z].
[2] Kevin Loney. Oracle Database 10g完全參考手冊(cè)[M]. 張志浩,尹立軍,譯.北京:清華大學(xué)出版社,2006.
[3] 王東,楊獻(xiàn)智.加載數(shù)據(jù)到ORACLE數(shù)據(jù)庫(kù)方法研究[J].中國(guó)電力教育:2005年研究綜述與技術(shù)論壇專(zhuān)刊,2005.
[4] 張巖,趙霽.Oracle中數(shù)據(jù)裝載與數(shù)據(jù)重組的研究[J].計(jì)算機(jī)應(yīng)用,2004,24(6).