新聞中心
SQLLDR是一種在Oracle數(shù)據(jù)庫(kù)中使用的數(shù)據(jù)加載工具,它可以將大量數(shù)據(jù)從文本文件導(dǎo)入數(shù)據(jù)庫(kù)表中。針對(duì)初學(xué)者,使用Linux系統(tǒng)下的SQLLDR工具可能會(huì)面對(duì)許多挑戰(zhàn)。本文旨在幫助初學(xué)者了解Linux下SQLLDR的基本使用技巧,解決在數(shù)據(jù)加載過(guò)程中可能會(huì)遇到的問(wèn)題。

一、為何選擇SQLLDR
在介紹SQLLDR使用技巧之前,我們有必要簡(jiǎn)單介紹一下SQLLDR的優(yōu)勢(shì)。與其他數(shù)據(jù)導(dǎo)入工具相比,SQLLDR有諸多優(yōu)點(diǎn):
1. 快速導(dǎo)入數(shù)據(jù):SQLLDR使得數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)更快、更高效,因?yàn)镾QLLDR是使用Oracle本地SQL語(yǔ)句進(jìn)行加載,它比其他工具使用SQL*Net協(xié)議進(jìn)行數(shù)據(jù)傳輸?shù)乃俣纫臁?/p>
2. 減少數(shù)據(jù)損失:SQLLDR能夠提供優(yōu)秀的容錯(cuò)機(jī)制,因此它可以將數(shù)據(jù)準(zhǔn)確地加載到Oracle表中并且減少錯(cuò)誤和數(shù)據(jù)損失。
3. 自動(dòng)化批量導(dǎo)入:SQLLDR工具支持批量導(dǎo)入數(shù)據(jù),這意味著您可以一次性加載大量數(shù)據(jù),而不必一次加載一個(gè)表。
二、SQLLDR使用規(guī)范
在學(xué)習(xí)SQLLDR使用時(shí),您需要了解SQLLDR的常規(guī)語(yǔ)法和規(guī)范,這些規(guī)范包括:
1. 文件擴(kuò)展名:SQLLDR只能導(dǎo)入文本類(lèi)型的數(shù)據(jù),你必須將需要導(dǎo)入的文件名后綴改為.txt或者.csv
2. 系統(tǒng)環(huán)境變量:在使用SQLLDR之前,一定要確保正確設(shè)置了系統(tǒng)環(huán)境變量——ORACLE_SID,該變量的值應(yīng)該是目標(biāo)Oracle數(shù)據(jù)庫(kù)的實(shí)例名。
3. 控制文件:SQLLDR運(yùn)行需要一個(gè)稱為「控制文件」的文件,我在下面將進(jìn)一步解釋該文件的作用以及如何編寫(xiě)控制文件
三、SQLLDR使用技巧
1. 編寫(xiě)控制文件
控制文件是負(fù)責(zé)指導(dǎo)SQLLDR如何進(jìn)行數(shù)據(jù)導(dǎo)入的文件??刂莆募且粋€(gè)包含指令的文本文件,它描述了要加載的數(shù)據(jù)的來(lái)源,目標(biāo)表和數(shù)據(jù)如何被加載到Oracle數(shù)據(jù)庫(kù)中。
以下是一個(gè)示例控制文件(test.ctl):
LOAD DATA
INFILE ‘/home/test.csv’
INTO TABLE test_table
FIELDS TERMINATED BY ‘,’
OPTIONAL ENCLOSED BY ‘”‘
TRLING NULLCOLS;
該文件指定了SQLLDR需要從test.csv文件中加載數(shù)據(jù),并將其加載到名為test_table的表中。該文件還指定了字段分隔符和一個(gè)可選的引號(hào)字符用于字符列的區(qū)分。 Trling NULLCOLS選項(xiàng)指定SQLLDR不會(huì)將控制文件中聲明的未列出的列作為默認(rèn)賦值NULL值的列。
2. 運(yùn)行SQLLDR
有了控制文件,就可以運(yùn)行SQLLDR來(lái)開(kāi)始加載數(shù)據(jù)了:
sqlldr userid=USERNAME/PASSWORD control=test.ctl
請(qǐng)注意,控制文件test.ctl必須在SQLLDR命令中指定。還要注意,與Oracle數(shù)據(jù)庫(kù)對(duì)話需要使用用戶名和密碼。
3. 處理錯(cuò)誤
遇到錯(cuò)誤時(shí),SQLLDR會(huì)生成一個(gè)錯(cuò)誤日志文件和一個(gè)拒絕文件。錯(cuò)誤日志文件包含了加載期間的錯(cuò)誤和警告信息,而拒絕文件包含了沒(méi)有正確加載到表中的數(shù)據(jù)行。
處理錯(cuò)誤的更好方式是使用錯(cuò)誤日志文件。標(biāo)準(zhǔn)后綴為.bad的錯(cuò)誤日志文件可能與控制文件位于相同的目錄中。如果您的SQLLDR命令未指定錯(cuò)誤日志文件名稱,它將采用默認(rèn)名稱。錯(cuò)誤日志文件中包含了相應(yīng)的錯(cuò)誤信息,我們可以使用Vi或Nano等文本編輯器進(jìn)行打開(kāi)。通過(guò)檢查這個(gè)文件,我們能夠了解哪些記錄未被正確加載以及失敗的原因。
四、
有了熟練運(yùn)用SQLLDR的技巧,您可以大大縮短大量數(shù)據(jù)導(dǎo)入的過(guò)程,并且保證數(shù)據(jù)的準(zhǔn)確性和完整性。通過(guò)本文簡(jiǎn)單的介紹,我相信您已經(jīng)對(duì)SQLLDR的基本使用有了一定的認(rèn)識(shí)。還有一些更高級(jí)的功能,比如控制文件語(yǔ)法和參數(shù)設(shè)置等等,但這已經(jīng)超出了初學(xué)者的范疇。希望您的使用SQLLDR愉快!
相關(guān)問(wèn)題拓展閱讀:
- linux文件入庫(kù)
- 請(qǐng)教SQL LOAD 中的“OPTIONAL ENCLOSED BY”
linux文件入庫(kù)
sqlldr hr/hr control=d:\test.ctl
test.ctl如下:
Load data
infile ‘d:\test.txt’
insert into table yourtable
fields terminated by X’09’
(key1,key2,key13,……key50)
或:
1、控制文件test.ctl的內(nèi)容
LOAD DATA
INFILE *
BADFILE ‘宏轎C:\Documents and Settings\Jackey\桌面\WMCOUNTRY.BAD’
DISCARDFILE ‘C:\Documents and Settings\Jackey\桌面\WMCOUNTRY.DSC’
INSERT INTO TABLE 你的表名
Fields terminated by “;” Optionally enclosed by ‘”‘
(
key1,
key2,
key3,
key4,
這里你把所有的列補(bǔ)全。。。。
key50
)
BEGINDATA
“1”;”JP”;”Japan”;”;NULL;NULL;NULL;NULL;NULL;NULL;NULL
“2”;”ssss”;”Japan”;”;NULL;NULL;NULL;NULL;NULL;NULL;NULL
“3”;”fdsfsfs”;”fdfsfsf”;”;NULL;NULL;”ssss”搏絕姿;NULL;NULL;NULL
–反正上面寫(xiě)50列,寫(xiě)夠?;^
請(qǐng)教SQL LOAD 中的“OPTIONAL ENCLOSED BY”
1、準(zhǔn)備工作:創(chuàng)建需要導(dǎo)入數(shù)據(jù)的表結(jié)構(gòu),如果已有相關(guān)的表,此步省略!
SQL> create table test
2 (
hostVARCHAR2(30),
user_name VARCHAR2(30),
ip_address VARCHAR2(15),
passVARCHAR2(4) default ‘no’ not null,7 judgeNUMBER default 0 not null,8 endtimeDATE
9 );
表已創(chuàng)建。
2、編寫(xiě)sqlload導(dǎo)入數(shù)據(jù)的控制文件,這里測(cè)試的控制文件如下,可以根據(jù)自己需要添加相關(guān)的控制參數(shù),測(cè)試的話復(fù)制保存為txt文件即可!
LOAD DATA
INFILE ‘d:\data.txt’
INTO TABLE test
TRUNCATE
fields terminated by ‘,’
trailing nullcols
(HOST,USER_NAME,IP_AddrESS,PASS,JUDge,endTIME)控制文件還有其他參數(shù),根據(jù)自己需求調(diào)整和測(cè)試:
附部分控制參數(shù):具體用法以官方文檔為準(zhǔn)
OPTIONS (skip=1,rows=128) — sqlldr 命令顯示的選項(xiàng)可以寫(xiě)到這里邊來(lái),skip=1 用來(lái)跳過(guò)數(shù)據(jù)中的之一行LOAD DATA
INFILE “users_data.csv”指定外部數(shù)據(jù)文件,可以是不同格式的數(shù)據(jù)文件,如csv、txt都支持可以寫(xiě)多個(gè) INFILE “another_data_file.csv” 指定多個(gè)數(shù)據(jù)文件truncate操作類(lèi)型,用 truncate table 來(lái)清除表中原有記錄,根據(jù)情況而定是否需要清楚原有表中數(shù)據(jù)INTO TABLE users-要插入記錄的表Fields terminated by “,”數(shù)據(jù)中每行記錄用 “,” 分隔Optionally enclosed by ‘”‘ –數(shù)據(jù)中每個(gè)字段用 ‘”‘ 框起,比如字段中有 “,” 分隔符時(shí)trailing nullcols表的字段沒(méi)有對(duì)灶冊(cè)應(yīng)的值時(shí)允許為空(
virtual_column FILLER, –這是一個(gè)虛擬字段,用來(lái)跳過(guò)由 PL/隱芹宏SQL Developer 生成的之一列序號(hào)user_id number,字段可以指定類(lèi)型,否則認(rèn)為是 CHARACTER 類(lèi)型, log 文件中有顯示user_name,
login_times,
last_login DATE “-MM-DD HH24:MI:SS” — 指定接受日期的格式,相當(dāng)用 to_date() 函數(shù)轉(zhuǎn)換)
insert為缺省方式,在首舉數(shù)據(jù)裝載開(kāi)始時(shí)要求表為空append –在表中追加新記錄
replace –刪除舊記錄(用 delete from table 語(yǔ)句),替換成新裝載的記錄truncate –刪除舊記錄(用 truncate table 語(yǔ)句),替換成新裝載的記錄3、創(chuàng)建需要導(dǎo)入的數(shù)據(jù),注意數(shù)據(jù)格式必須和表結(jié)構(gòu)嚴(yán)格對(duì)應(yīng),否則導(dǎo)入失敗!測(cè)試數(shù)據(jù)如下:有部分?jǐn)?shù)據(jù)最后字段為空,所以控制文件中需要加trailing nullcols 參數(shù)!
ttt,SCOTT,192.168.1.111,yes,1,
,JACK,192.168.1.20,no,1,
,TOM,192.168.1.20,no,1,
WEB1,HAHA,192.168.1.1,no,1,
XXX,ROBIN,111.111.111.111,no,1,08-AUG-08
DB2,LUCY,192.168.10.10,no,1,
ORACLE,LI,222.222.222.222,no,1,
WORKGROUP,DENNIS,133.133.133.133,no,0,08-AUG-08DCR,CANDY,192.168.100.10,no,1,
T3,F,192.168.10.33,no,1,
T1,LINDA,192.168.10.200,no,1,08-AUG-08
T2,LILEI,192.168.100.31,no,1,08-AUG-08
4、導(dǎo)入數(shù)據(jù)-導(dǎo)入時(shí)也有相關(guān)的參數(shù)進(jìn)行控制
附部分導(dǎo)入?yún)?shù):各參數(shù)可以再命令行下輸入sqlldr查看C:\Documents and Settings\Administrator>sqlldrSQL*Loader: Release 11.2.0.1.0 – Production on 星期三 2月 27 17:13:Copyright (c) 1982, 2023, Oracle and/or its affiliates. All rights reserved.
用法: SQLLDR keyword=value
有效的關(guān)鍵字:
userid — ORACLE 用戶名/口令
control — 控制文件名
log — 日志文件名
bad — 錯(cuò)誤文件名
data — 數(shù)據(jù)文件名
discard — 廢棄文件名
discardmax — 允許廢棄的文件的數(shù)目(全部默認(rèn))skip — 要跳過(guò)的邏輯記錄的數(shù)目 (默認(rèn) 0)
load — 要加載的邏輯記錄的數(shù)目 (全部默認(rèn))errors — 允許的錯(cuò)誤的數(shù)目(默認(rèn) 50)rows — 常規(guī)路徑綁定數(shù)組中或直接路徑保存數(shù)據(jù)間的行數(shù)(默認(rèn): 常規(guī)路徑 64, 所有直接路徑)
bindsize — 常規(guī)路徑綁定數(shù)組的大小 (以字節(jié)計(jì)) (默認(rèn))silent — 運(yùn)行過(guò)程中隱藏消息 (標(biāo)題,反饋,錯(cuò)誤,廢棄,分區(qū))direct — 使用直接路徑(默認(rèn) FALSE)parfile — 參數(shù)文件: 包含參數(shù)說(shuō)明的文件的名稱parallel — 執(zhí)行并行加載 (默認(rèn) FALSE)file — 要從以下對(duì)象中分配區(qū)的文件
skip_unusable_indexes — 不允許/允許使用無(wú)用的索引或索引分區(qū) (默認(rèn) FALSE)skip_index_maintenance — 沒(méi)有維護(hù)索引, 將受到影響的索引標(biāo)記為無(wú)用 (默認(rèn) FALSE)commit_discontinued — 提交加載中斷時(shí)已加載的行 (默認(rèn) FALSE)readsize — 讀取緩沖區(qū)的大小 (默認(rèn))external_table — 使用外部表進(jìn)行加載; NOT_USED, GENERATE_ON, EXECUTE (默認(rèn) NOT_USED)
columnarrayrows — 直接路徑列數(shù)組的行數(shù) (默認(rèn) 5000)streamsize — 直接路徑流緩沖區(qū)的大小 (以字節(jié)計(jì)) (默認(rèn))multithreading — 在直接路徑中使用多線程
resumable — 啟用或禁用當(dāng)前的可恢復(fù)會(huì)話 (默認(rèn) FALSE)resumable_name — 有助于標(biāo)識(shí)可恢復(fù)語(yǔ)句的文本字符串resumable_timeout — RESUMABLE 的等待時(shí)間 (以秒計(jì)) (默認(rèn) 7200)date_cache — 日期轉(zhuǎn)換高速緩存的大小 (以條目計(jì)) (默認(rèn) 1000)no_index_errors — 出現(xiàn)任何索引錯(cuò)誤時(shí)中止加載 (默認(rèn) FALSE)如下命令:control=指定控制文件和路徑 log=導(dǎo)入日志文件保存 bad=錯(cuò)誤信息 data=數(shù)據(jù)文件開(kāi)始導(dǎo)入:
C:\Documents and Settings\Administrator>sqlldr scott/tiger control=d:\sqlload.txt log=d:\loadlog.txt bad=d:\bad.txt data=d:\data.txtSQL*Loader: Release 11.2.0.1.0 – Production on 星期三 2月 27 17:06:Copyright (c) 1982, 2023, Oracle and/or its affiliates. All rights reserved.
達(dá)到提交點(diǎn) – 邏輯記錄計(jì)數(shù) 12
導(dǎo)入成功后查看結(jié)果:
C:\Documents and Settings\Administrator>sqlplus scott/tigerSQL*Plus: Release 11.2.0.1.0 Production on 星期三 2月 27 17:07:Copyright (c) 1982, 2023, Oracle. All rights reserved.
連接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> select * from test;
HOSTUSER_NAME IP_ADDRESSPASSJUDGE ENDTIME—tttSCOTT.168.1.yes JACK.168.1.no TOM.168.1.no 1WEBHAHA.168.1.no 1DBLUCY.168.10. no 1ORACLE LI.222.222. no 1DCRCANDY.168.100. no 1TF.168.10. no 1已選擇8行。
結(jié)果顯然與數(shù)據(jù)文件不一致,最后一個(gè)字段有值的數(shù)據(jù)沒(méi)有導(dǎo)入!這不是最后想要的結(jié)果!但可以確定已經(jīng)有數(shù)據(jù)導(dǎo)入,表示表對(duì)象和控制文件沒(méi)問(wèn)題!
應(yīng)該是數(shù)據(jù)文件的格式問(wèn)題!注意數(shù)據(jù)文件最后一個(gè)字段是日期型數(shù)據(jù)。查看是不是數(shù)據(jù)庫(kù)現(xiàn)有日期類(lèi)型不支持?jǐn)?shù)據(jù)文件的表示格式SQL> select sysdate from dual;
SYSDATE
—
27-2月 -13
顯然和我們數(shù)據(jù)文件的日期顯示不一致,且是中文,這里可以把數(shù)據(jù)文件的最后字段的數(shù)據(jù)改成和數(shù)據(jù)庫(kù)一樣的格式,也可以對(duì)數(shù)據(jù)庫(kù)的格式和語(yǔ)言進(jìn)行更改,因?yàn)闇y(cè)試系統(tǒng)是windows才會(huì)出現(xiàn)這個(gè)錯(cuò)誤,在linux可以避免!
如果是linux 可以嘗試以下步驟解決:
alter system set nls_date_format=’DD-MON-RR’;alter system set nls_language= american scope = spfile;得重啟數(shù)據(jù)庫(kù)這里由于是windows,這里就不更改語(yǔ)言和重啟數(shù)據(jù)庫(kù),直接對(duì)數(shù)據(jù)文件進(jìn)行更改,修改后的數(shù)據(jù)文件如下ttt,SCOTT,192.168.1.111,yes,1,
,JACK,192.168.1.20,no,1,
,TOM,192.168.1.20,no,1,
WEB1,HAHA,192.168.1.1,no,1,
XXX,ROBIN,111.111.111.111,no,1,08-5月 -08DB2,LUCY,192.168.10.10,no,1,
ORACLE,LI,222.222.222.222,no,1,
WORKGROUP,DENNIS,133.133.133.133,no,0,08-5月 -08DCR,CANDY,192.168.100.10,no,1,
T3,F,192.168.10.33,no,1,
T1,LINDA,192.168.10.200,no,1,08-5月 -08
T2,LILEI,192.168.100.31,no,1,08-5月 -08
再導(dǎo)入一次,導(dǎo)入后進(jìn)行查看結(jié)果
C:\Documents and Settings\Administrator>sqlldr scott/tiger control=d:\sqlload.txt log=d:\loadlog.txt bad=d:\bad.txt data=d:\data.txtSQL*Loader: Release 11.2.0.1.0 – Production on 星期三 2月 27 17:48:Copyright (c) 1982, 2023, Oracle and/or its affiliates. All rights reserved.
達(dá)到提交點(diǎn) – 邏輯記錄計(jì)數(shù) 12
C:\Documents and Settings\Administrator>sqlplus scott/tigerSQL*Plus: Release 11.2.0.1.0 Production on 星期三 2月 27 17:49:Copyright (c) 1982, 2023, Oracle. All rights reserved.
連接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> col host for a10
SQL> col user_name for a15
SQL> select * from test;
HOSTUSER_NAMEIP_ADDRESSPASSJUDGE ENDTIMEttt SCOTT.168.1.yes JACK2.168.1.no TOM92.168.1.no 1WEBHAHA2.168.1.no 1XXXROBIN.111.111.no月 -08DBLUCY2.168.10.no 1ORACLELI2.222.222.no 1WORKGROUP DENNIS.133.133. no月 -08DCRCANDY.168.100.no 1T F92.168.10.no 1TLINDA.168.10.no月 -08TLILEI.168.100.no月 -08已選擇12行。
關(guān)于linux sqlldr使用的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專(zhuān)業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
分享名稱:輕松入門(mén):Linux下SQLLDR使用技巧(linuxsqlldr使用)
鏈接地址:http://www.5511xx.com/article/cdsjejj.html


咨詢
建站咨詢
