1. 程式人生 > 實用技巧 >Oracle--大資料遷移--sqlldr技術的應用

Oracle--大資料遷移--sqlldr技術的應用

1. 讓表不產生REDO LOG
ALTER TABLE table_name nologging;

2.編寫控制檔案 *.ctl (重點)

如 0120.ctl

3.準備資料檔案

如 0120.csv

4. 在裝有oracle服務的Linux伺服器上執行

sqlldr db_user/db_pwd@//url:port/orcl control=0120.ctl direct=true ; 注意這裡的資料庫連線串是oracle 18c的寫法。

5. 執行結果

先使用 echo $? 回車,結果為0是成功;它也會生成日誌檔案檢視具體情況的

詳解0120.ctl的檔案內容(以下表欄位是原表的縮略版,刪除了不少欄位)

OPTIONS (skip=1,rows=5000,errors=0) -- sqlldr 命令顯示的選項可以寫到這裡邊來,skip=1 用來跳過資料中的第一行(第一行往往是表頭)
unrecoverable                    -- 此選項必須要與DIRECT共同應用  
LOAD DATA 
CHARACTERSET 'UTF8'             --設定編碼
INFILE "0120.csv"                 --指定外部資料檔案  
--INFILE "0121.csv"              --若有多個數據檔案要以前執行,則按照本行的寫法繼續寫
                                --
這裡還可以使 用 BADFILE、DISCARDFILE 來指定壞資料和丟棄資料的檔案, truncate --操作型別,truncate會清空表,還可以有 append 追加資料 INTO TABLE table_name -- 要插入記錄的表 Fields terminated by "," -- 資料中每行記錄用 "," 分隔 Optionally enclosed by '"' -- 資料中每個欄位用 '"' 框起,比如欄位中有 "," 分隔符時 trailing nullcols --
表的欄位沒有對應的值時允許為空 ( -- virtual_column FILLER, --這是一個虛擬欄位,用來跳 過由 PL/SQL Developer 生成的第一列序號,若有則需要跳過該列,否則註釋掉 oid "sys_guid()" , -- 第一個主鍵欄位使用 oracle的uuid函式生成 instcode ,-- 預設是varchar型別的,預設最大支援255的長度,如果超長的自己要手動設長度 如 instcode char(1024), instname , name , idcard , phone , dayavginsuranceassets NULLIF (dayavginsuranceassets="") "to_number(:dayavginsuranceassets)" , --表字段number型別,手動呼叫oracle的to_number函式轉,當欄位為""時就是 NULL banktimepointassets NULLIF (banktimepointassets="") "to_number(:banktimepointassets)" , --表字段number型別,手動呼叫oracle的to_number函式轉,當欄位為""時就是 NULL enterpriseassetsratio , systime "sysdate" , --這裡使用系統預設生產時間,日期欄位也可以參考number型別,使用to_date("yyyy-MM-dd",:systime) updatetime "sysdate" , --這裡使用系統預設生產時間,日期欄位也可以參考number型別,使用to_date("yyyy-MM-dd",:updatetime) dayavgcurrentassets_total NULLIF (dayavgcurrentassets_total="") "to_number(:dayavgcurrentassets_total)" , --表字段number型別,手動呼叫oracle的to_number函式轉,當欄位為""時就是 NULL stat_date , stat_dd , city_code )

csv檔案