SQL LOADER錯(cuò)誤小結(jié)
在使用SQL*LOADER裝載數(shù)據(jù)時(shí),由于平面文件的多樣化和數(shù)據(jù)格式問題總會(huì)遇到形形色色的一些小問題,下面是工作中累積、整理記錄的遇到的一些形形色色錯(cuò)誤。希望能對大家有些用處。(今天突然看到自己以前整理的這些資料,于是稍稍整理、歸納成這篇博客,后面如果碰到其他案例,會(huì)陸陸續(xù)續(xù)補(bǔ)充在此篇文章。)
ERROR 1:SQL*LOADER裝載數(shù)據(jù)成功,但是發(fā)現(xiàn)某些字段的中文為亂碼,這個(gè)是因?yàn)榫幋a緣故造成亂碼??稍诳刂莆募刑砑幼址幋a參數(shù)解決問題,
例如:CHARACTERSET 'ZHS16GBK' 或 CHARACTERSET 'UTF8',根據(jù)數(shù)據(jù)庫實(shí)際情況設(shè)置數(shù)據(jù)庫字符集。
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:裝載數(shù)據(jù)時(shí),報(bào)ORA-01722: invalid number錯(cuò)誤(不是數(shù)據(jù)類型錯(cuò)誤造成的一般錯(cuò)誤。而是最后一個(gè)字段為NUMBER類型時(shí),會(huì)報(bào)上述錯(cuò)誤)因?yàn)閾Q行符的問題,如果NUMBER類型的列位于表的最后,最后其實(shí)會(huì)有換行符(如果為\n,不會(huì)出錯(cuò), 如果為\r\n,則會(huì)報(bào)錯(cuò)),在用SQLLDR導(dǎo)入時(shí)會(huì)把換行符也算作那個(gè)數(shù)字的一部分,從而出錯(cuò)。解決辦法加INTEGER或者加“TERMINATED BY WHITESPACE”。
Record 1: Rejected - Error on table DM.TM_WGGHF_CELL_USER_DAY, column TYPE_ID.
ORA-01722: invalid number
注意:如果數(shù)據(jù)字段類型是NUMBER類型,則用INTEGER會(huì)導(dǎo)致裝載的數(shù)據(jù)異常,99.875000 會(huì)變成一個(gè)很大的整數(shù)。
ERROR 3:裝載數(shù)據(jù)時(shí),由于里面有日期字段,需要添加日期函數(shù)處理特定格式的數(shù)據(jù)類型。否則會(huì)出現(xiàn)錯(cuò)亂格式
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 如果數(shù)據(jù)文件里面缺少某些字段,可以在控制文件中添加常量參數(shù),例如下面缺少COLLECT_DT這個(gè)字段的數(shù)據(jù)(其實(shí)是根據(jù)數(shù)據(jù)文件以及某些參數(shù)生成的),可以通過CONSTANT常量參數(shù)解決。
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 數(shù)據(jù)文件請見附件TEST.csv,數(shù)據(jù)文件中某個(gè)字段的值內(nèi)部有換行符,加載數(shù)據(jù)時(shí),想保持?jǐn)?shù)據(jù)原樣,即數(shù)據(jù)入庫后,數(shù)據(jù)里面保存有換行。此時(shí)可以通過"str '\r\n'"解決問題。
如下所示,數(shù)據(jù)文件TEST.csv只有兩行數(shù)據(jù),每一條記錄中第二個(gè)字段都存在換行。
12,"這僅僅是
測試"
14,"數(shù)據(jù)有
換行"
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默認(rèn)輸入的字段長度為255個(gè)字符。如果某個(gè)字段的字符長度超過255,而且你在控制文件里面,沒有指定其字符長度,則會(huì)報(bào)下面錯(cuò)誤:SQL Loader- Field in data file exceeds maximum length
ERROR 8 : SQL*Loader-510 & SQL*Loader-2026
這個(gè)是我遇到的一個(gè)特殊例子,SQLLDR裝載日志錯(cuò)誤如下:
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.
因?yàn)檫@個(gè)EDS.TW_CUST_COSTCELL_HR_07.dat文件37G,剛開始搜索了很多資料,也沒有解決問題,其實(shí)最后發(fā)現(xiàn)時(shí)數(shù)據(jù)文件FTP拷貝傳送時(shí)損壞的緣故。
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.
出現(xiàn)這個(gè)錯(cuò)誤是因?yàn)楸硭诒砜臻g無法擴(kuò)展,導(dǎo)致SQL*LOADER裝載數(shù)據(jù)無法插入。要給用戶對應(yīng)的表空間擴(kuò)展空間
相關(guān)文章
SQL Server 數(shù)據(jù)庫備份和還原認(rèn)識和總結(jié)(二)
本文將針對上文繼續(xù)進(jìn)行數(shù)據(jù)備份和還原講解,主要講解備份和還原的一些關(guān)鍵選項(xiàng)2012-08-08
除MSSQL數(shù)據(jù)庫text字段中惡意腳本的刪方法
刪除MSSQL數(shù)據(jù)庫text字段的替換處理示例--全表替換,看到有人提問,所以整理了一個(gè)好久以前的處理方法,以供大家參考2009-07-07
SQLServer數(shù)據(jù)庫處于恢復(fù)掛起狀態(tài)的解決辦法
這篇文章主要介紹了SQLServer數(shù)據(jù)庫處于恢復(fù)掛起狀態(tài)的解決辦法 ,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
sqlserver數(shù)據(jù)庫最大Id沖突問題解決方法之一
在一個(gè)特定的表中保存最大Id,通過記錄來取每次的唯一最大值2011-12-12
不固定參數(shù)的存儲(chǔ)過程實(shí)現(xiàn)代碼
我們知道存儲(chǔ)過程是不支持不固定參數(shù)情況的(包括數(shù)組參數(shù)),可是有時(shí)候我們的參數(shù)又必須是不固定的,怎么辦呢?2011-01-01
SQL Server數(shù)據(jù)庫的高性能優(yōu)化經(jīng)驗(yàn)總結(jié)
小編以前在做ASP及.NET的時(shí)候經(jīng)常用到SQL SERVER,現(xiàn)在用PHP雖然大多數(shù)時(shí)候用MYSQL,但不泛有些客戶要在原來SQL的平臺上升級或兼容開發(fā),值得慶幸的是PHP無所不能,基本上所有的數(shù)據(jù)庫它都能連接并支持2011-07-07
sqlserver 多表查詢不同數(shù)據(jù)庫服務(wù)器上的表
sqlserver中多表查詢不同數(shù)據(jù)庫服務(wù)器上的表的實(shí)現(xiàn)方法,需要的朋友可以參考下2012-04-04
SSB(SQLservice Service Broker) 入門實(shí)例介紹
前兩天用了 MSsql里的 SSB委托機(jī)制,做了一個(gè)消息分發(fā)的小功能,在這里簡單跟大家分享一下方法跟實(shí)例2013-04-04



