SQL LOADER毛病小結。本站提示廣大學習愛好者:(SQL LOADER毛病小結)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL LOADER毛病小結正文
在應用SQL*LOADER裝載數據時,因為立體文件的多樣化和數據格局成績總會碰到五花八門的一些小成績,上面是任務中積累、整頓記載的碰到的一些五花八門毛病。願望能對年夜家有些用途。(明天忽然看到本身之前整頓的這些材料,因而稍稍整頓、歸結成這篇博客,前面假如碰著其他案例,會陸陸續續彌補在此篇文章。)
ERROR 1:SQL*LOADER裝載數據勝利,然則發明某些字段的中文為亂碼,這個是由於編碼原因形成亂碼。可在掌握文件中添加字符集編碼參數處理成績,
例如:CHARACTERSET 'ZHS16GBK' 或 CHARACTERSET 'UTF8',依據數據庫現實情形設置數據庫字符集。
LOAD DATACHARACTERSET 'ZHS16GBK' INFILE '/oradata/impdata/test.txt' APPEND INTO TABLE ETL.TESTFIELDS 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 會釀成一個很年夜的整數。
ERROR 3:裝載數據時,因為外面有日期字段,須要添加日期函數處置特定格局的數據類型。不然會湧現紊亂格局
LOAD APPEND INTO TABLE ODS.TO_ALARM_LOGFIELDS 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常量參數處理。
LOAD DATACHARACTERSET 'UTF8'INFILE 'DEVICE_WIRELESS_GSMCELL_F_20120130190002.CSV' "str '\r\n'"APPEND INTO TABLE STAGE.TS_RSRC_IRMS_GSMCELLFIELDS 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編纂器檢查)
LOAD DATAINFILE '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裝載數據沒法拔出。要給用戶對應的表空間擴大空間