在使用SQL*LOADER装载数据时,由于平面文件的多样化和数据格式问题总会遇到形形色色的一些小问题,下面是工作中累积、整理记录的遇到的一些形形色色错误。希望能对大家有些用处。(今天突然看到自己以前整理的这些资料,于是稍稍整理、归纳成这篇博客,后面如果碰到其他案例,会陆陆续续补充在此篇文章。)

ERROR 1:SQL*LOADER装载数据成功,但是发现某些字段的中文为乱码,这个是因为编码缘故造成乱码。可在控制文件中添加字符集编码参数解决问题,

例如: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 会变成一个很大的整数。

 

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常量参数解决。

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编辑器查看)

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装载数据无法插入。要给用户对应的表空间扩展空间

SQL*LOADER错误总结的更多相关文章

  1. Oracle【IT实验室】数据库备份与恢复之二:SQL*Loader

    2.1 基本知识 Oracle 的  SQL* LOADER  可以将外部格式化的文本数据加载到数据库表中.通常 与 SPOOL导出文本数据方法配合使用.     1.命令格式 SQLLDR keyw ...

  2. 关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法

    在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法: 1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中2. 建立数据库间的 ...

  3. [Oracle] SQL*Loader 详细使用教程(1)- 总览

    SQL*Loader原理   SQL*Loader是Oracle提供的用于数据加载的一种工具,它比较适合业务分析类型数据库(数据仓库),能处理多种格式的平面文件,批量数据装载比传统的数据插入效率更高. ...

  4. [Oracle] SQL*Loader 详细使用教程(2)- 命令行参数

    sqlldr工具   SQL*Loader的客户端工具是sqlldr,在操作系统的命令行下输入sqlldr,后面不接任何参数,将显示帮助信息如下所示(所有命令行参数的简单描述及其默认值),所以你并不需 ...

  5. [Oracle] SQL*Loader 详细使用教程(3)- 控制文件

    控制文件是SQL*Loader里最重要的文件,它是一个文本文件,用来定义数据文件的位置.数据的格式.以及配置数据加载过程的行为,在sqlldr中以control参数指定控制文件.   在控制文件里配置 ...

  6. SQL*Loader使用详解(一)

    1.SQL*Loader介绍 1)SQL*Loader是一个从外部文件指加载数据到Oracle数据库的工具.语法类似于DB2的Load语法,但SQL*Loader支持各种load格式.选择性load和 ...

  7. [Oracle] 常用工具集之 - SQL*Loader

    SQL*Loader原理 SQL*Loader是Oracle提供的用于数据加载的一种工具,它比较适合业务分析类型数据库(数据仓库),能处理多种格式的平面文件,批量数据装载比传统的数据插入效率更高.其示 ...

  8. Oracle SQL Loader

    C:/Documents and Settings/WWJD>sqlldr SQL :: Copyright (c) , , Oracle. All rights reserved. 用法: S ...

  9. Oracle Sql Loader的学习使用

    最近由于遇到oracle控制文件的使用,虽然不是很复杂,但是从来没有用过,专门花点时间看看.点击 这里 查看详细 1,概述: Sql Loader: 一个批量工具,将文件数据导入到数据库.可以导入一个 ...

随机推荐

  1. CodeIgniter-Lottery - php ci 抽奖辅助函数

    CodeIgniter-Lottery - php ci 抽奖辅助函数 Github https://github.com/xjnotxj/CodeIgniter-Lottery 用法 1. 移入文件 ...

  2. Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)

    上一篇,讲到了SolrNet的基本用法及CURD,这个算是SolrNet 的入门知识介绍吧,昨天写完之后,有朋友评论说,这些感觉都被写烂了.没错,这些基本的用法,在网上百度,资料肯定一大堆,有一些写的 ...

  3. 关于C#静态变量初始化问题

    关于这个静态变量,平时自己没有太认真的去认识.最近调项目的bug,让我重新认识了静态变量的特点. 其实,我们一直都在说:静态变量只在类第一次初始化的时候进行初始化,以后都不初始化. 很简单的一句话,但 ...

  4. github生成静态博客

    github生成静态博客很简单. 1.确认你知道你github的用户名,我的叫做chenxing12 2.创建一个项目名字叫做:用户名.github.io 我的用户名叫做chenxing12,所以我创 ...

  5. 让你的web程序“动”起来。

    看到这里你可能会问,asp.net程序本身就是动态网站,还要如何动? 我这里所谓的动起来,是指动态加载,动态更新.好吧可能你又要问了动态网站本来就是动态加载,动态更新的.asp.net的程序依附于II ...

  6. Debugging into .NET Core源代码的两种方式

    一.前言 .NET开源时间还不长,因为一直在做YOYOFx的关系,所似我常常有更深入的了解.NET Core和ASP.NET Core内容的需求,并且.NET Core平台与之前版本的变化太大,这也导 ...

  7. php页面静态化技术;学习笔记

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. [Excel] WorkBook.SaveAs

    ExcelApplication.WorkBook.SaveAs(Filename, FileFormat, Password, WriteResPassword, ReadOnlyRecommend ...

  9. 用c#开发的一款webservice调用小工具,方便测试

    本人经常与webservice打交道,webservice调用工具有soap ui,使用起来不是那么方便,所以我花了很长时间特意写了个小工具来调用Webservice方便测试,还有待进一步完善.使用方 ...

  10. jQuery基础_4

    dom对象就是jquery对象的数组组成部分jquery对象和dom对象的转化jquery对象-->dom对象$()[下标]dom对象-->jquery对象$(dom对象) jquery框 ...