在 Oracle 數據庫中,咱們一般在不一樣數據庫的表間記錄進行復制或遷移時會用如下幾種方法:html
sqlloaderOracle用於數據遷移、將數據從外部文件加載到Oracle數據庫的表中,它具備強大的數據解析引擎,對數據文件中數據的格式幾乎沒有限制。sql
基本的組成由:數據庫
*.ctl:控制文件,與表信息相關,數據入表的邏輯處理(數據加載信息,解析數據,導入數據信息)windows
*.bad :執行bat後自動生成,錯誤日誌,保存導入文件出現錯誤的記錄併發
*.log :執行bat後自動生成,日誌文件,能夠查看導入的狀況oracle
*.dis:廢棄文件app
經常使用的參數命令:函數
ROWS對於傳統常規路徑(Conventional Path)導入的狀況,表明一次提交(Commit)的行數(默認:6 最大值:65534)工具
BINDSIZE大數據
經過配置BINDSIZE的值,加快加載導入效率,並且配置的值要比默認值和經過參數ROWS計算的緩衝區大小更優先。
即BINDSIZE可以制約ROWS,若是ROWS提交的數據須要的緩衝區大於BINDSIZE的配置值,會以BINDSIZE的設定爲準※在設定參數時,必定要同時考慮ROWS和BINDSIZE的設定。
READSIZE
讀取緩衝區的大小 (適用於傳統常規路徑和直接路徑加載),默認 1048576。READSIZE負責讀取的緩衝區大小,而BINDSIZE負責提交的緩衝區大小,若是READSIZE小於BINDSIZE,那麼READSIZE會自動增長。
經過設置READSIZE爲更大的值,能夠在提交前讀取更多的數據到Buffer中去
地址:https://www.oracle.com/databa...
下載包:
NOTE:直接下載oracle client客戶端便可
使用一個控制文件(*.ctl) 和一個數據文件(*.csv),步驟以下:
create table user_info ( userid int, username varchar2(50), address varchar2(500), sex varchar2(2), phone_number varchar2(13) email varchar2(50), certificate_no VARCHAR2(20) )
01412401,李四,廣東深圳龍華,M,13444455568,WJ@email.com,310101198504069999
01412402,張三,廣東深圳龍華,M,13444455567,HH@email.com,310101198504069998
01412403,王二,廣東深圳福田,M,13444455566,WJ@email.com,310101198504069997
01412404,李達,廣東深圳南山,M,13444455565,HH@email.com,310101198504069996
OPTIONS (skip=1,rows=128) -- sqlldr 命令顯示的 選項能夠寫到這裏邊來,skip=1 用來跳過數據中的第一行 ,rows=128 表明每128行數--據提交一次 LOAD DATA INFILE "/home/oracle/script/users_data.csv" --指定外部數據文件,能夠寫多 個 INFILE "another_data_file.csv" 指定多個數據文件 --這裏還可使 用 BADFILE、DISCARDFILE 來指定壞數據和丟棄數據的文件, --truncate --操做類型,用 truncate table 來清除表中原有 記錄 append INTO TABLE test_users -- 要插入記錄的表,這裏插入到另一張表裏 Fields terminated by "," -- 數據中每行記錄用 "," 分隔 Optionally enclosed by '"' -- 數據中每一個字段用 '"' 框起,好比字段中有 "," 分隔符時 trailing nullcols --表的字段沒有對應的值時允 許爲空 ( virtual_column FILLER, --這是一個虛擬字段,用來跳 過由 PL/SQL Developer 生成的第一列序號 userid, username, address , phone_number, email , certificate_no )
在操做類型 truncate 位置可用如下中的一值:
- insert :爲缺省方式,在數據裝載開始時要求表爲空
- append:在表中追加新記錄
- replace:刪除舊記錄(用 delete from table 語句),替換成新裝載的記錄
- truncate :刪除舊記錄(用 truncate table 語句),替換成新裝載的記錄
時間類型轉換
字段 DATE "YYYY-MM-DD HH24:MI:SS" -- 指定接受日期的格式,至關用 to_date() 函數轉換
普通版:
在安裝好sqlload命令目錄中打開CMD命令,
而後再命令行窗口執行:
sqlldr userid=username/password@ip:port/dbName control=d:users_load_data.ctl log=d:userload.log
普通導入速度比較慢,一秒才幾條,這樣導入跟一條條插入數據差很少,所以應該善用其參數,加快加載導入數據
升級版:
將命令行改爲這樣:
sqlldr userid=username/password@ip:port/dbName control=d:users_load_data.ctl log=d:userload.log errors=100000 bindsize=8000000 rows=5000
這樣能夠配置能夠在一秒1萬條左右,加快導入速度,節省了不少時間。NOTE:
當加載海量數據時(大約超過10GB),最好禁止日誌的產生,這樣不產生REDO LOG,能夠提升效率,在 CONTROL 文件中 load data 上面加一行:unrecoverable, 此選項必需要與DIRECT共同應用.
對於超大數據文件的導入就要用併發操做了,即同時運行多個導入任務.parallel=true
各位看官還能夠嗎?喜歡的話,動動手指點個💗,點個關注唄!!謝謝支持!
歡迎關注公衆號【Ccww技術博客】,原創技術文章第一時間推出