溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何理解SQL*Loader工具

發(fā)布時(shí)間:2021-11-08 15:49:52 來(lái)源:億速云 閱讀:165 作者:柒染 欄目:建站服務(wù)器

如何理解SQL*Loader工具,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。


        SQL*Loader工具是Oracle非常強(qiáng)大的外部數(shù)據(jù)加載工具。小編將簡(jiǎn)單討論一下SQL*Loader工具的結(jié)構(gòu),配置以及突出特性。

下面是一張SQL*Loader工具的結(jié)構(gòu)圖:

如何理解SQL*Loader工具


          上圖中描述了SQL*Loader工作使用的物理文件,包括輸入的文本文件,輸出的數(shù)據(jù)庫(kù);SQL*Loader工具工作需要至少一個(gè)控制文件,控制文件中包含了數(shù)據(jù)加載的描述性信息,SQL*Loader根據(jù)控制文件中的描述來(lái)加載、轉(zhuǎn)換數(shù)據(jù),寫入數(shù)據(jù)庫(kù)??刂莆募谐税瑪?shù)據(jù)加載的描述性信息外,還可以包含參數(shù)信息和加載的數(shù)據(jù)。參數(shù)信息包括,直接路徑加載參數(shù)等,可以通過(guò)sqlldr工具的parfile參數(shù)指定單獨(dú)的配置文件,這里需要注意的是,在sqlldr命令行指定的參數(shù)將覆蓋在控制文件中指定的參數(shù)。單獨(dú)的數(shù)據(jù)文件是通過(guò)控制文件中的INFILE屬性指定的。

        SQL*Loader工具運(yùn)行后會(huì)產(chǎn)生3個(gè)文件,一個(gè)是日志文件,日志文件中詳細(xì)記錄了數(shù)據(jù)的加載情況和加載結(jié)果,并會(huì)另外指定兩個(gè)文件Bad FIles和Discard Files,Bad Files保存的是加載導(dǎo)致SQL錯(cuò)誤(也就是說(shuō),輸入數(shù)據(jù)是“壞的”)的數(shù)據(jù),Discard Files保存的是加載過(guò)程拋棄的數(shù)據(jù)。加載完畢對(duì)這些文件的驗(yàn)證能夠了解加載情況,判斷加載是否成功。

        SQL*Loader支持傳統(tǒng)路徑和直接路徑加載,傳統(tǒng)路徑加載SQL*Loader工具會(huì)將數(shù)據(jù)轉(zhuǎn)換成SQL語(yǔ)句執(zhí)行,會(huì)產(chǎn)生相應(yīng)的undo和redo數(shù)據(jù),直接路徑加載是直接操作數(shù)據(jù)塊,不會(huì)產(chǎn)生相應(yīng)的undo和redo數(shù)據(jù),特別適合大數(shù)據(jù)量的加載工作。

        通過(guò)上面的討論可以了解到SQL*Loader工具最核心的是控制文件,控制文件中最核心的配置是對(duì)加載數(shù)據(jù)的定義。下面通過(guò)一個(gè)簡(jiǎn)單的例子討論控制文件中的配置:

/***************************************/


Load DATA
#表示加載數(shù)據(jù)。


INFILE 'C:\sqlldr\olap.date_time_15_min.txt'
#INFILE指定數(shù)據(jù)文件,如果是INFILE *,表示加載的數(shù)據(jù)保存在控制文件中。


INTO TABLE test.date_time_15_min
#數(shù)據(jù)加載到的具體表名。


APPEND|REPLACE|TRUNCATE
#如果沒有這行,默認(rèn)是INSERT操作,要求表必須為空,TRUNCATE操作非傳統(tǒng)意義上的TRUNCATE TABLE DATE_TIME_15_MIN,而是執(zhí)行TRUNCATE TABLE DATE_TIME_15_MIN REUSE STORAGE操作,這點(diǎn)需要注意。


FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
#數(shù)據(jù)的存儲(chǔ)是以,符號(hào)作為分割,"符號(hào)引起來(lái)的表示字符串,這是定界加載,這是最傳統(tǒng)的方式,另外還可以定長(zhǎng)加載,這里我們不討論。


TRAILING NULLCOLS
#如果輸入的數(shù)據(jù)不存在某列的數(shù)據(jù),SQLLOADER就會(huì)為該列綁定一個(gè)NULL值。


(APPLIEDTIME "to_date(:appliedtime,'yyyy-mm-dd hh34:mi:ss')",
#以(符號(hào)開始表示表的字段,由于是日期字段,所以需要使用函數(shù)進(jìn)行轉(zhuǎn)換,函數(shù)必須用雙引號(hào)引起來(lái),:appliedtime是跟前面的APPLIEDTIME相對(duì)應(yīng)。

applieddate "to_date(:applieddate,'yyyy-mm-dd hh34:mi:ss')",

psvcode,
#如果字段沒有指定存儲(chǔ)類型,默認(rèn)為CHAR(255),超過(guò)長(zhǎng)度會(huì)收到Fileld in data file exceeds maximum length的報(bào)錯(cuò),只需要根據(jù)長(zhǎng)度指定類型,例如,CHAR(1000)。

hzpsvcode,

pointindex,

appliedhour "to_date(:appliedhour,'yyyy-mm-dd hh34:mi:ss')"

)
BEGINDATA
#下面是加載的數(shù)據(jù),對(duì)應(yīng)上面的INFILE *設(shè)置。

........


/***************************************/


        控制文件除了定義數(shù)據(jù)加載方式外,還可以保存SQLLOADER參數(shù)和加載的數(shù)據(jù)。

        另外,從Oracle 9i開始,Oracle推出了外部表的功能,外部表是另一種快速加載數(shù)據(jù)的方式,沿用了SQL*Loader的參數(shù),用于替代SQL*Loader工具,它比SQL*Loader工具有更好的靈活性,能夠更靈活的處理、篩選數(shù)據(jù)(SQL語(yǔ)句方面),調(diào)度數(shù)據(jù)的加載,學(xué)習(xí)的知識(shí)也相對(duì)更少。

        從Oracle Database 10g開始,Oracle推出外部表卸載功能ORACLE_DATAPUMP能夠非常方便的將數(shù)據(jù)卸載到平面文件,通過(guò)平面文件的傳遞可以快速加載到其他數(shù)據(jù)庫(kù)。Oracle沒有提供專門工具用于將數(shù)據(jù)庫(kù)的數(shù)據(jù)卸載到平面文件中,可以用SQL語(yǔ)句、外部表卸載功能、PL/SQL等等方式完成數(shù)據(jù)的卸載。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI