一、簡介
SQL*LOADER是ORACLE的數據加載工具,通常用來將操作系統文件遷移到ORACLE數據庫中。SQL*LOADER是大型數據倉庫選擇使用的加載方法,因為它提供了最快速的途徑(DIRECT,PARALLEL)。使用前提是必須存在目標表。
二、SQL*LOADER使用方法
在Window系統下,SQL Loader的命令為sqlldr,在UNIX下一般為sqlldr/sqlload。
有效的關鍵字:
userid -- ORACLE 用戶名/口令
control -- 控制文件名
log -- 日志文件名
bad -- 錯誤文件名,如果有的數據沒有被處理,將會出現在這里
data -- 數據文件名
discard -- 廢棄文件名
discardmax -- 允許丟棄數據的數目 (全部默認)
skip -- 要跳過的邏輯記錄的數目 (默認0)
load -- 要加載的邏輯記錄的數目 (全部默認)
errors -- 允許的錯誤記錄數目 (默認50)
rows -- 常規路徑綁定數組中或直接路徑保存數據間的行數 (默認: 常規路徑 64, 所有直接路徑)
bindsize -- 常規路徑綁定數組的大小,以字節計算(默認65536)
silent -- 運行過程中隱藏的信息 (header,feedback,errors,discards,partitions)
direct -- 使用直接路徑 (默認FALSE)
parfile -- 參數文件:包含參數說明的文件的名稱
parallel -- 執行并行加載 (默認FALSE)
file -- 要從以下對象中分配區的文件
skip_unusable_indexes -- 不允許/允許使用無用的索引或索引分區 (默認 FALSE)
skip_index_maintenance -- 沒有維護索引, 將受到影響的索引標記為無用 (默認 FALSE)
commit_discontinued -- 提交加載中斷時已加載的行 (默認 FALSE)
readsize -- 讀取緩沖區的大小 (默認 1048576)
external_table -- 使用外部表進行加載; NOT_USED, GENERATE_ONLY, EXECUTE (默認 NOT_USED)
columnarrayrows -- 直接路徑列數組的行數 (默認 5000)
streamsize -- 直接路徑流緩沖區的大小 (以字節計) (默認 256000)
multithreading -- 在直接路徑中使用多線程
resumable -- 啟用或禁用當前的可恢復會話 (默認 FALSE)
resumable_name -- 有助于標識可恢復語句的文本字符串
resumable_timeout -- RESUMABLE 的等待時間 (以秒計) (默認 7200)
date_cache -- 日期轉換高速緩存的大小 (以條目計) (默認 1000)
PLEASE NOTE: 命令行參數可以由位置或關鍵字指定。前者的例子是 'sqlload scott/tiger foo';
后一種情況的一個示例是 'sqlldr control=foo
userid=scott/tiger'.位置指定參數的時間必須早于但不可遲于由關鍵字指定的參數。例如,允許 'sqlldr
scott/tiger control=foo logfile=log', 但是不允許 'sqlldr scott/tiger
control=foo log', 即使參數 'log' 的位置正確。
三、SQL*LOADER實例
控制文件腳本實例:
load data --控制文件表示
infile 'e:\aa.csv' --有導入的數據文件名
append into table TBL_SYNC_CORE_INSURANCE --向表TBL_SYNC_CORE_INSURANCE中追加記錄
fields terminated by ',' --指定用逗號分隔
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS --表的字段沒有對應值時允許為空
*************下面是表的字段
(
COVERAGE_CODE,
PRODUCT_NO,
NAME,
MAIN_COVERAGE_CODE,
KIND,
CREATOR,
CREATED_DATE,
MODIFIER,
MODIFIED_DATE
)
備注:數據導入的方式上例中用的append,有一下幾種:insert,為缺省方式,在數據裝載開始時要求表為空;append,在表中追加新記錄;replace,刪除舊記錄,替換成新裝載的記錄 ;truncate,同replace,會用truncate語句刪除現存數據。
在命令行提示符下使用SQL*Loader命令實現數據的輸入:
sqlldr userid=用戶名/口令@服務名 control='e:\control.ctl' log=e:\log.txt bad=e:\bad.txt
如果本地安裝了oracle服務端,可以不寫服務名;log和bad不寫,默認生成在當前目錄下。
四、其他導入方法
利用PLSQL Developer:
在單個文件不大的情況下(少于100000行),并且目的表結構已經存在的情況下-----對于excel而言肯定不會超過了,因為excel文件的最大行為65536-----可以全選數據COPY ,然后用PLSQL Developer工具。
1 在PLSQL Developer的sql window里輸入select * from test for update;
2 按F8執行;
3 打開鎖, 再按一下加號. 鼠標點到第一列的列頭,使全列成選中狀態,然后粘貼,最后COMMIT提交即可。
五、補充在Linux下使用 sqlldr 的注意事項
在執行 sqlldr 前,需要進行以下步驟
- 設置 ORACLE_HOME 環境變量,如 export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
- 設置ORACLE編碼格式,將本地字符集和ORACLE字符集設置為一致,如export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
- 將csv文件轉碼成相應的編碼
然后再使用 sqlldr 進行數據導入
posted on 2010-11-07 15:42
哈哈的日子 閱讀(4158)
評論(0) 編輯 收藏