java sqlldr导入_使用SQL*LOADER将TXT或CSV数据导入ORACLE(转)
一、簡(jiǎn)介
SQL*LOADER是ORACLE的數(shù)據(jù)加載工具,通常用來(lái)將操作系統(tǒng)文件遷移到ORACLE數(shù)據(jù)庫(kù)中。SQL*LOADER是大型數(shù)據(jù)倉(cāng)庫(kù)選擇使用的加載方法,因?yàn)樗峁┝俗羁焖俚耐緩?DIRECT,PARALLEL)。使用前提是必須存在目標(biāo)表。
二、SQL*LOADER使用方法
在Window系統(tǒng)下,SQLLoader的命令為sqlldr,在UNIX下一般為sqlldr/sqlload。
有效的關(guān)鍵字:
userid?? --?? ORACLE?? 用戶名/口令
control?? --???控制文件名
log?? --???日志文件名
bad?? --錯(cuò)誤文件名,如果有的數(shù)據(jù)沒有被處理,將會(huì)出現(xiàn)在這里
data?? --???數(shù)據(jù)文件名
discard?? --???廢棄文件名
discardmax?? --???允許丟棄數(shù)據(jù)的數(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)65536)
silent?? --???運(yùn)行過(guò)程中隱藏的信息?? (header,feedback,errors,discards,partitions)
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 -- 沒有維護(hù)索引, 將受到影響的索引標(biāo)記為無(wú)用? (默認(rèn) FALSE)
commit_discontinued -- 提交加載中斷時(shí)已加載的行? (默認(rèn) FALSE)
readsize -- 讀取緩沖區(qū)的大小?????????????? (默認(rèn) 1048576)
external_table -- 使用外部表進(jìn)行加載; NOT_USED, GENERATE_ONLY, EXECUTE? (默認(rèn) NOT_USED)
columnarrayrows -- 直接路徑列數(shù)組的行數(shù)? (默認(rèn) 5000)
streamsize -- 直接路徑流緩沖區(qū)的大小 (以字節(jié)計(jì))? (默認(rèn) 256000)
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)
PLEASE NOTE: 命令行參數(shù)可以由位置或關(guān)鍵字指定。前者的例子是 'sqlload scott/tiger foo';
后一種情況的一個(gè)示例是 'sqlldr control=foo
userid=scott/tiger'.位置指定參數(shù)的時(shí)間必須早于但不可遲于由關(guān)鍵字指定的參數(shù)。例如,允許 'sqlldr
scott/tiger control=foo logfile=log', 但是不允許 'sqlldr scott/tiger
control=foo log', 即使參數(shù) 'log' 的位置正確。
三、SQL*LOADER實(shí)例
控制文件腳本實(shí)例:
loaddata--控制文件表示infile'e:\aa.csv'--有導(dǎo)入的數(shù)據(jù)文件名appendintotableTBL_SYNC_CORE_INSURANCE--向表TBL_SYNC_CORE_INSURANCE中追加記錄fields?terminatedby','--指定用逗號(hào)分隔OPTIONALLY?ENCLOSEDBY'"'TRAILING?NULLCOLS--表的字段沒有對(duì)應(yīng)值時(shí)允許為空*************下面是表的字段
(
COVERAGE_CODE,
PRODUCT_NO,
NAME,
MAIN_COVERAGE_CODE,
KIND,
CREATOR,
CREATED_DATE,
MODIFIER,
MODIFIED_DATE
)
備注:數(shù)據(jù)導(dǎo)入的方式上例中用的append,有一下幾種:insert,為缺省方式,在數(shù)據(jù)裝載開始時(shí)要求表為空;append,在表中追加新記錄;replace,刪除舊記錄,替換成新裝載的記錄?? ;truncate,同replace,會(huì)用truncate語(yǔ)句刪除現(xiàn)存數(shù)據(jù)。
在命令行提示符下使用SQL*Loader命令實(shí)現(xiàn)數(shù)據(jù)的輸入:
sqlldr userid=用戶名/口令@服務(wù)名control='e:\control.ctl'?? log=e:\log.txt?? bad=e:\bad.txt
如果本地安裝了oracle服務(wù)端,可以不寫服務(wù)名;log和bad不寫,默認(rèn)生成在當(dāng)前目錄下。
四、其他導(dǎo)入方法
利用PLSQL?? Developer:
在單個(gè)文件不大的情況下(少于100000行),并且目的表結(jié)構(gòu)已經(jīng)存在的情況下-----對(duì)于excel而言肯定不會(huì)超過(guò)了,因?yàn)閑xcel文件的最大行為65536-----可以全選數(shù)據(jù)COPY?? ,然后用PLSQL?? Developer工具。
1?? 在PLSQL?? Developer的sql?? window里輸入select?? *?? from?? test?? for?? update;
2?? 按F8執(zhí)行;
3?? 打開鎖,?? 再按一下加號(hào).?? 鼠標(biāo)點(diǎn)到第一列的列頭,使全列成選中狀態(tài),然后粘貼,最后COMMIT提交即可。
五、補(bǔ)充在Linux下使用 sqlldr 的注意事項(xiàng)
在執(zhí)行 sqlldr 前,需要進(jìn)行以下步驟
設(shè)置 ORACLE_HOME 環(huán)境變量,如 export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
設(shè)置ORACLE編碼格式,將本地字符集和ORACLE字符集設(shè)置為一致,如export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
將csv文件轉(zhuǎn)碼成相應(yīng)的編碼
然后再使用 sqlldr 進(jìn)行數(shù)據(jù)導(dǎo)入
posted on 2010-11-07 15:42 哈哈的日子 閱讀(3723) 評(píng)論(0) ?編輯 ?收藏
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的java sqlldr导入_使用SQL*LOADER将TXT或CSV数据导入ORACLE(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java date 操作类_JAVA时间
- 下一篇: java一年包装_浅谈Java的包装类