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

一、為何選擇SQLLDR
在介紹SQLLDR使用技巧之前,我們有必要簡單介紹一下SQLLDR的優(yōu)勢。與其他數(shù)據(jù)導(dǎo)入工具相比,SQLLDR有諸多優(yōu)點:
1. 快速導(dǎo)入數(shù)據(jù):SQLLDR使得數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫更快、更高效,因為SQLLDR是使用Oracle本地SQL語句進(jìn)行加載,它比其他工具使用SQL*Net協(xié)議進(jìn)行數(shù)據(jù)傳輸?shù)乃俣纫臁?/p>
2. 減少數(shù)據(jù)損失:SQLLDR能夠提供優(yōu)秀的容錯機(jī)制,因此它可以將數(shù)據(jù)準(zhǔn)確地加載到Oracle表中并且減少錯誤和數(shù)據(jù)損失。
3. 自動化批量導(dǎo)入:SQLLDR工具支持批量導(dǎo)入數(shù)據(jù),這意味著您可以一次性加載大量數(shù)據(jù),而不必一次加載一個表。
二、SQLLDR使用規(guī)范
在學(xué)習(xí)SQLLDR使用時,您需要了解SQLLDR的常規(guī)語法和規(guī)范,這些規(guī)范包括:
1. 文件擴(kuò)展名:SQLLDR只能導(dǎo)入文本類型的數(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ù)庫的實例名。
3. 控制文件:SQLLDR運行需要一個稱為「控制文件」的文件,我在下面將進(jìn)一步解釋該文件的作用以及如何編寫控制文件
三、SQLLDR使用技巧
1. 編寫控制文件
控制文件是負(fù)責(zé)指導(dǎo)SQLLDR如何進(jìn)行數(shù)據(jù)導(dǎo)入的文件。控制文件是一個包含指令的文本文件,它描述了要加載的數(shù)據(jù)的來源,目標(biāo)表和數(shù)據(jù)如何被加載到Oracle數(shù)據(jù)庫中。
以下是一個示例控制文件(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的表中。該文件還指定了字段分隔符和一個可選的引號字符用于字符列的區(qū)分。 Trling NULLCOLS選項指定SQLLDR不會將控制文件中聲明的未列出的列作為默認(rèn)賦值NULL值的列。
2. 運行SQLLDR
有了控制文件,就可以運行SQLLDR來開始加載數(shù)據(jù)了:
sqlldr userid=USERNAME/PASSWORD control=test.ctl
請注意,控制文件test.ctl必須在SQLLDR命令中指定。還要注意,與Oracle數(shù)據(jù)庫對話需要使用用戶名和密碼。
3. 處理錯誤
遇到錯誤時,SQLLDR會生成一個錯誤日志文件和一個拒絕文件。錯誤日志文件包含了加載期間的錯誤和警告信息,而拒絕文件包含了沒有正確加載到表中的數(shù)據(jù)行。
處理錯誤的更好方式是使用錯誤日志文件。標(biāo)準(zhǔn)后綴為.bad的錯誤日志文件可能與控制文件位于相同的目錄中。如果您的SQLLDR命令未指定錯誤日志文件名稱,它將采用默認(rèn)名稱。錯誤日志文件中包含了相應(yīng)的錯誤信息,我們可以使用Vi或Nano等文本編輯器進(jìn)行打開。通過檢查這個文件,我們能夠了解哪些記錄未被正確加載以及失敗的原因。
四、
有了熟練運用SQLLDR的技巧,您可以大大縮短大量數(shù)據(jù)導(dǎo)入的過程,并且保證數(shù)據(jù)的準(zhǔn)確性和完整性。通過本文簡單的介紹,我相信您已經(jīng)對SQLLDR的基本使用有了一定的認(rèn)識。還有一些更高級的功能,比如控制文件語法和參數(shù)設(shè)置等等,但這已經(jīng)超出了初學(xué)者的范疇。希望您的使用SQLLDR愉快!
相關(guān)問題拓展閱讀:
- linux文件入庫
- 請教SQL LOAD 中的“OPTIONAL ENCLOSED BY”
linux文件入庫
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
–反正上面寫50列,寫夠。基絕
請教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、編寫sqlload導(dǎo)入數(shù)據(jù)的控制文件,這里測試的控制文件如下,可以根據(jù)自己需要添加相關(guān)的控制參數(shù),測試的話復(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)整和測試:
附部分控制參數(shù):具體用法以官方文檔為準(zhǔn)
OPTIONS (skip=1,rows=128) — sqlldr 命令顯示的選項可以寫到這里邊來,skip=1 用來跳過數(shù)據(jù)中的之一行LOAD DATA
INFILE “users_data.csv”指定外部數(shù)據(jù)文件,可以是不同格式的數(shù)據(jù)文件,如csv、txt都支持可以寫多個 INFILE “another_data_file.csv” 指定多個數(shù)據(jù)文件truncate操作類型,用 truncate table 來清除表中原有記錄,根據(jù)情況而定是否需要清楚原有表中數(shù)據(jù)INTO TABLE users-要插入記錄的表Fields terminated by “,”數(shù)據(jù)中每行記錄用 “,” 分隔Optionally enclosed by ‘”‘ –數(shù)據(jù)中每個字段用 ‘”‘ 框起,比如字段中有 “,” 分隔符時trailing nullcols表的字段沒有對灶冊應(yīng)的值時允許為空(
virtual_column FILLER, –這是一個虛擬字段,用來跳過由 PL/隱芹宏SQL Developer 生成的之一列序號user_id number,字段可以指定類型,否則認(rèn)為是 CHARACTER 類型, log 文件中有顯示user_name,
login_times,
last_login DATE “-MM-DD HH24:MI:SS” — 指定接受日期的格式,相當(dāng)用 to_date() 函數(shù)轉(zhuǎn)換)
insert為缺省方式,在首舉數(shù)據(jù)裝載開始時要求表為空append –在表中追加新記錄
replace –刪除舊記錄(用 delete from table 語句),替換成新裝載的記錄truncate –刪除舊記錄(用 truncate table 語句),替換成新裝載的記錄3、創(chuàng)建需要導(dǎo)入的數(shù)據(jù),注意數(shù)據(jù)格式必須和表結(jié)構(gòu)嚴(yán)格對應(yīng),否則導(dǎo)入失??!測試數(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)入時也有相關(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 — 錯誤文件名
data — 數(shù)據(jù)文件名
discard — 廢棄文件名
discardmax — 允許廢棄的文件的數(shù)目(全部默認(rèn))skip — 要跳過的邏輯記錄的數(shù)目 (默認(rèn) 0)
load — 要加載的邏輯記錄的數(shù)目 (全部默認(rèn))errors — 允許的錯誤的數(shù)目(默認(rèn) 50)rows — 常規(guī)路徑綁定數(shù)組中或直接路徑保存數(shù)據(jù)間的行數(shù)(默認(rèn): 常規(guī)路徑 64, 所有直接路徑)
bindsize — 常規(guī)路徑綁定數(shù)組的大小 (以字節(jié)計) (默認(rèn))silent — 運行過程中隱藏消息 (標(biāo)題,反饋,錯誤,廢棄,分區(qū))direct — 使用直接路徑(默認(rèn) FALSE)parfile — 參數(shù)文件: 包含參數(shù)說明的文件的名稱parallel — 執(zhí)行并行加載 (默認(rèn) FALSE)file — 要從以下對象中分配區(qū)的文件
skip_unusable_indexes — 不允許/允許使用無用的索引或索引分區(qū) (默認(rèn) FALSE)skip_index_maintenance — 沒有維護(hù)索引, 將受到影響的索引標(biāo)記為無用 (默認(rèn) FALSE)commit_discontinued — 提交加載中斷時已加載的行 (默認(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é)計) (默認(rèn))multithreading — 在直接路徑中使用多線程
resumable — 啟用或禁用當(dāng)前的可恢復(fù)會話 (默認(rèn) FALSE)resumable_name — 有助于標(biāo)識可恢復(fù)語句的文本字符串resumable_timeout — RESUMABLE 的等待時間 (以秒計) (默認(rèn) 7200)date_cache — 日期轉(zhuǎn)換高速緩存的大小 (以條目計) (默認(rèn) 1000)no_index_errors — 出現(xiàn)任何索引錯誤時中止加載 (默認(rèn) FALSE)如下命令:control=指定控制文件和路徑 log=導(dǎo)入日志文件保存 bad=錯誤信息 data=數(shù)據(jù)文件開始導(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á)到提交點 – 邏輯記錄計數(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ù)文件不一致,最后一個字段有值的數(shù)據(jù)沒有導(dǎo)入!這不是最后想要的結(jié)果!但可以確定已經(jīng)有數(shù)據(jù)導(dǎo)入,表示表對象和控制文件沒問題!
應(yīng)該是數(shù)據(jù)文件的格式問題!注意數(shù)據(jù)文件最后一個字段是日期型數(shù)據(jù)。查看是不是數(shù)據(jù)庫現(xiàn)有日期類型不支持?jǐn)?shù)據(jù)文件的表示格式SQL> select sysdate from dual;
SYSDATE
—
27-2月 -13
顯然和我們數(shù)據(jù)文件的日期顯示不一致,且是中文,這里可以把數(shù)據(jù)文件的最后字段的數(shù)據(jù)改成和數(shù)據(jù)庫一樣的格式,也可以對數(shù)據(jù)庫的格式和語言進(jìn)行更改,因為測試系統(tǒng)是windows才會出現(xiàn)這個錯誤,在linux可以避免!
如果是linux 可以嘗試以下步驟解決:
alter system set nls_date_format=’DD-MON-RR’;alter system set nls_language= american scope = spfile;得重啟數(shù)據(jù)庫這里由于是windows,這里就不更改語言和重啟數(shù)據(jù)庫,直接對數(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á)到提交點 – 邏輯記錄計數(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元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
分享標(biāo)題:輕松入門:Linux下SQLLDR使用技巧(linuxsqlldr使用)
本文地址:http://m.fisionsoft.com.cn/article/cdsjejj.html


咨詢
建站咨詢
