在使用SQL*LOADER裝載數據時,因爲平面文件的多樣化和數據格式問題總會遇到形形色色的一些小問題,下面是工做中累積、整理記錄的遇到的一些形形色色錯誤。但願能對你們有些用處。(今天忽然看到本身之前整理的這些資料,因而稍稍整理、概括成這篇博客,後面若是碰到其餘案例,會陸陸續續補充在此篇文章。) 數據庫
ERROR 1:SQL*LOADER裝載數據成功,可是發現某些字段的中文爲亂碼,這個是由於編碼緣故形成亂碼。可在控制文件中添加字符集編碼參數解決問題, app
例如:CHARACTERSET 'ZHS16GBK' 或 CHARACTERSET 'UTF8',根據數據庫實際狀況設置數據庫字符集。編輯器
LOAD DATA
CHARACTERSET 'ZHS16GBK'
INFILE '/oradata/impdata/test.txt'
APPEND INTO TABLE ETL.TEST
FIELDS TERMINATED BY '@#$' TRAILING NULLCOLS
(
MON_CD ,
CITY_ID ,
CELL_ID ,
GPRS_USER_CNT ,
TERM_BRAND ,
BRAND_ID ,
FLUX ,
CELL_NAM
)
ERROR 2:裝載數據時,報ORA-01722: invalid number錯誤(不是數據類型錯誤形成的通常錯誤。而是最後一個字段爲NUMBER類型時,會報上述錯誤)由於換行符的問題,若是NUMBER類型的列位於表的最後,最後其實會有換行符(若是爲\n,不會出錯, 若是爲\r\n,則會報錯),在用SQLLDR導入時會把換行符也算做那個數字的一部分,從而出錯。解決辦法加INTEGER或者加「TERMINATED BY WHITESPACE」。 函數
Record 1: Rejected - Error on table DM.TM_WGGHF_CELL_USER_DAY, column TYPE_ID. 測試
ORA-01722: invalid number 編碼
注意:若是數據字段類型是NUMBER類型,則用INTEGER會致使裝載的數據異常,99.875000 會變成一個很大的整數。 spa
ERROR 3:裝載數據時,因爲裏面有日期字段,須要添加日期函數處理特定格式的數據類型。不然會出現錯亂格式 日誌
LOAD APPEND INTO TABLE ODS.TO_ALARM_LOG
FIELDS TERMINATED BY '@#$' TRAILING NULLCOLS
(
COLLECT_DT ,
DATE_CD ,
HR_CD ,
DISPH_LOST_REASON ,
COLLET_TYPE_ID ,
ALM_TM "TO_DATE(:ALM_TM,'DD-MM-YYYY HH24:MI:SS', 'NLS_DATE_LANGUAGE=American')" ,
ALM_DISCOVER_TM "TO_DATE(:ALM_DISCOVER_TM, 'DD-MM-YYYY HH24:MI:SS', 'NLS_DATE_LANGUAGE=American')" ,
ALARM_DELSTA_ID ,
ALM_RESUME_TM "TO_DATE(:ALM_RESUME_TM, 'DD-MM-YYYY HH24:MI:SS', 'NLS_DATE_LANGUAGE=American')" ,
FP_ALM_SER ,
FP3_ALM_FINGMARK ,
AREA_NAM ,
VSEQUIP_NAM ,
VSEQUIP_STATUS_ID ,
VSEQUIP_SUBSTATUS_ID ,
PLAN_DISPH_TM "TO_DATE(:PLAN_DISPH_TM, 'DD-MM-YYYY HH24:MI:SS', 'NLS_DATE_LANGUAGE=American')" ,
AUTO_PRETREAT_STATUS_ID ,
EMOS_RECORD_CNT ,
CONT_TIME ,
ALM_CNT
)
ERROR 4 若是數據文件裏面缺乏某些字段,能夠在控制文件中添加常量參數,例以下面缺乏COLLECT_DT這個字段的數據(實際上是根據數據文件以及某些參數生成的),能夠經過CONSTANT常量參數解決。 code
LOAD DATA
CHARACTERSET 'UTF8'
INFILE 'DEVICE_WIRELESS_GSMCELL_F_20120130190002.CSV' "str '\r\n'"
APPEND INTO TABLE STAGE.TS_RSRC_IRMS_GSMCELL
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\'' TRAILING NULLCOLS
(
COLLECT_DT CONSTANT '20120214',
CELL_ID ,
CELL_NAM ,
FULL_NAM ,
OTHER_NAM ,
OMC_CELL_NAM ,
GROUP_NAM ,
GROUP_NAM_EN
)
ERROR 5 若是換行是WINDOW平臺的格式(即\r\n, LINUX平臺是以\n),以下圖所示(用vi編輯器查看) blog
LOAD DATA
INFILE 'EDS.TW_BUSS_GN_CELLFLUX_HR4.csv' "str '\r\n'"
APPEND INTO TABLE EDS.TW_BUSS_GN_CELLFLUX_HR_TEST
FIELDS TERMINATED BY ',' TRAILING NULLCOLS
(
DATE_CD ,
HR_CD ,
LAC_ID ,
CELL_ID ,
BUSI_TYP1_CD ,
BUSI_TYP2_CD ,
CITY_ID ,
CELL_NAM ,
UP_FLUX ,
DOWN_FLUX ,
VSD_CNT ,
CI
)
ERROR 6 數據文件請見附件TEST.csv,數據文件中某個字段的值內部有換行符,加載數據時,想保持數據原樣,即數據入庫後,數據裏面保存有換行。此時能夠經過"str '\r\n'"解決問題。
以下所示,數據文件TEST.csv只有兩行數據,每一條記錄中第二個字段都存在換行。
12,"這僅僅是
測試"
14,"數據有
換行"
LOAD DATA
INFILE 'TEST.csv' "str '\r\n'"
APPEND INTO TABLE TEST
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS
(
ID ,
NAME
)
ERROR 7 : 字段長度超過255
SQLLDR默認輸入的字段長度爲255個字符。若是某個字段的字符長度超過255,並且你在控制文件裏面,沒有指定其字符長度,則會報下面錯誤:SQL Loader- Field in data file exceeds maximum length
ERROR 8 : SQL*Loader-510 & SQL*Loader-2026
這個是我遇到的一個特殊例子,SQLLDR裝載日誌錯誤以下:
SQL*Loader-510: Physical record in data file (/jkfile/DAD_CDR/TEMP/201207/EDS.TW_CUST_COSTCELL_HR_07.dat) is longer than the maximum
(20971520)
SQL*Loader-2026: the load was aborted because SQL Loader cannot continue.
由於這個EDS.TW_CUST_COSTCELL_HR_07.dat文件37G,剛開始搜索了不少資料,也沒有解決問題,其實最後發現時數據文件FTP拷貝傳送時損壞的緣故。
ERROR 9:SQL*Loader-605 & ORA-01653
ORA-01653: unable to extend table tablename by 128 in tablespace xxxx
SQL*Loader-605: Non-data dependent ORACLE error occurred -- load discontinued.
出現這個錯誤是由於表所在表空間沒法擴展,致使SQL*LOADER裝載數據沒法插入。要給用戶對應的表空間擴展空間