昨天看到一个同事在通过PL/SQL Developer工具把文本数据往oracle表;有两个文本;一个有30万条记录;一个7万多条记录。
在导入到过程中;出现错误记录还需要点击确认。不过使用黑科技(屏幕精灵)自动点击。单一个7万多记录的文本需要10分钟左右的时间。

看到这种情况;我热心肠爆发;我帮你来提快导入速度。我想到两种方案;
    1:oracle的sqlldr命令
    2:oracle的外部表;
    由于文本存在错误记录;就选择1.
    
文本格式如下:存在有76760条记录

  1. [oracle@oracle234 ~]$ wc -l lottu.txt
  2. 76761 lottu.txt
  3. [oracle@oracle234 ~]$ head lottu.txt
  4. stat_user_stay_info.rowkey,stat_user_stay_info.appkey,stat_user_stay_info.phone_softversion,stat_user_stay_info.dim_type,stat_user_stay_info.dim_code,stat_user_stay_info.time_peroid,stat_user_stay_info.stat_date,stat_user_stay_info.indicator,stat_user_stay_info.stat_time,stat_user_stay_info.value
  5. 3a00997_7c34d20170108,307A5C626E6C2F6472636E6E6A2F736460656473,2.14.0,cpid,blf1298_12243_001,1,20170105,stay3day,20170109102339,1
  6. 3a00997_bf86b20170108,307A5C626E6C2F6472636E6E6A2F736460656473,2.13.0,cpid,blp1375_13621_001,1,20170105,stay3day,20170109102339,7
  7. 3a00e87_4b11a20170126,337A5C626E6C2F6472636E6E6A2F736460656473,1.4.0,cpid,all,1,20170123,stay3day,20170127095931,6
  8. 3a0129a_6575220170118,307A5C626E6C2F6460726E742F716D7472,all,cpid,bsf1389_10917_001,1,20170116,stay2day,20170119094145,1
  9. 3a0183b_5764a20170202,307A5C626E6C2F6472636E6E6A2F736460656473,1.91,cpid,blf1298_12523_001,1,20170128,stay5day,20170203094327,1
  10. 3a01b9b_54b4720170123,307A5C626E6C2F6472636E6E6A2F736460656473,2.13.0,cpid,blp1375_13641_001,1,20170122,stay1day,20170124102457,3
  11. 3a0230d_7464120170126,307A5C626E6C2F6460726E742F606F65736E686569646D716473,all,cpid,bsp1405_13363_001,1,20170122,stay4day,20170127100446,18
  12. 3a02bed_3ea3320170206,307A5C626E6C2F6472636E6E6A2F736460656473,2.15.0,cpid,blp1375_14217_001,1,20170130,stay7day,20170207135438,1
  13. 3a03fe3_4c5fe20170119,307A5C21626E6C2F6472776865646E21,all,cpid,bvf1328_10885_001,1,20170116,stay3day,20170120093733,1

导入表结果如下:

  1. SQL> desc STAT_USER_STAY_INFO1;
  2. Name Null? Type
  3. ----------------------------------------- -------- ----------------------------
  4. JOBID VARCHAR2(64)
  5. APPKEY NOT NULL VARCHAR2(200)
  6. PHONE_SOFTVERSION NOT NULL VARCHAR2(32)
  7. DIM_TYPE NOT NULL VARCHAR2(64)
  8. DIM_CODE NOT NULL VARCHAR2(64)
  9. TIME_PEROID NOT NULL VARCHAR2(4)
  10. STAT_DATE NOT NULL VARCHAR2(500)
  11. INDICATOR NOT NULL VARCHAR2(200)
  12. STAT_TIME VARCHAR2(500)
  13. VALUE NOT NULL NUMBER

执行sqlldr命令;但结果呢?只导入5万条记录;结果出乎意料。

  1. sqlldr 'lottu/li0924' control=/home/oracle/stay_info.ctl log=/home/oracle/stay_info.log bad=/home/oracle/stay_info.bad

查看log文件;由于篇幅的问题;只取关键部分。

  1. .......
  2. Record 55076: Rejected - Error on table STAT_USER_STAY_INFO1, column DIM_CODE.
  3. ORA-01400: cannot insert NULL into ("LOTTU"."STAT_USER_STAY_INFO1"."DIM_CODE")
  4.  
  5. MAXIMUM ERROR COUNT EXCEEDED - Above statistics reflect partial run.
  6.  
  7. Table STAT_USER_STAY_INFO1:
  8. 55025 Rows successfully loaded.
  9. 51 Rows not loaded due to data errors.
  10. 0 Rows not loaded because all WHEN clauses were failed.
  11. 0 Rows not loaded because all fields were null.
  12.  
  13. Space allocated for bind array: 165120 bytes(64 rows)
  14. Read buffer bytes: 1048576
  15.  
  16. Total logical records skipped: 0
  17. Total logical records read: 55105
  18. Total logical records rejected: 51
  19. Total logical records discarded: 0
  20.  
  21. Run began on Fri Feb 24 10:51:02 2017
  22. Run ended on Fri Feb 24 10:51:09 2017
  23.  
  24. Elapsed time was: 00:00:06.87
  25. CPU time was: 00:00:00.46

日志提示;只导入了“55025 Rows successfully loaded. ”;加上拒绝的51条;这跟76761条记录远远不够。
日志记录是不会骗人的;进入表中查看确实是55025条记录

  1. SQL> select count(*) from STAT_USER_STAY_INFO1;
  2.  
  3. COUNT(*)
  4. ----------
  5. 55025

奇了怪;明明76761条记录;为什么oracle只认可5万条记录 。还有2万多条记录为什么不认可呢?
其实oracle给了提示;就在刚刚那个log文件中。只是我忽略这样一句话"MAXIMUM ERROR COUNT EXCEEDED - Above statistics reflect partial run."。
这个意思是说;超过最大所容限错误数。
既然说得这么清楚了;我们在看看sqlldr命令

  1. [oracle@oracle234 ~]$ sqlldr
  2.  
  3. SQL*Loader: Release 11.2.0.1.0 - Production on Fri Feb 24 11:00:08 2017
  4.  
  5. Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
  6.  
  7. Usage: SQLLDR keyword=value [,keyword=value,...]
  8.  
  9. Valid Keywords:
  10.  
  11. userid -- ORACLE username/password
  12. control -- control file name
  13. log -- log file name
  14. bad -- bad file name
  15. data -- data file name
  16. discard -- discard file name
  17. discardmax -- number of discards to allow (Default all)
  18. skip -- number of logical records to skip (Default 0)
  19. load -- number of logical records to load (Default all)
  20. errors -- number of errors to allow (Default 50)
  21. rows -- number of rows in conventional path bind array or between direct path data saves
  22. (Default: Conventional path 64, Direct path all)
  23. bindsize -- size of conventional path bind array in bytes (Default 256000)
  24. silent -- suppress messages during run (header,feedback,errors,discards,partitions)
  25. direct -- use direct path (Default FALSE)
  26. parfile -- parameter file: name of file that contains parameter specifications
  27. parallel -- do parallel load (Default FALSE)
  28. file -- file to allocate extents from
  29. skip_unusable_indexes -- disallow/allow unusable indexes or index partitions (Default FALSE)
  30. skip_index_maintenance -- do not maintain indexes, mark affected indexes as unusable (Default FALSE)
  31. commit_discontinued -- commit loaded rows when load is discontinued (Default FALSE)
  32. readsize -- size of read buffer (Default 1048576)
  33. external_table -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE (Default NOT_USED)
  34. columnarrayrows -- number of rows for direct path column array (Default 5000)
  35. streamsize -- size of direct path stream buffer in bytes (Default 256000)
  36. multithreading -- use multithreading in direct path
  37. resumable -- enable or disable resumable for current session (Default FALSE)
  38. resumable_name -- text string to help identify resumable statement
  39. resumable_timeout -- wait time (in seconds) for RESUMABLE (Default 7200)
  40. date_cache -- size (in entries) of date conversion cache (Default 1000)
  41. no_index_errors -- abort load on any index errors (Default FALSE)
  42.  
  43. PLEASE NOTE: Command-line parameters may be specified either by
  44. position or by keywords. An example of the former case is 'sqlldr
  45. scott/tiger foo'; an example of the latter is 'sqlldr control=foo
  46. userid=scott/tiger'. One may specify parameters by position before
  47. but not after parameters specified by keywords. For example,
  48. 'sqlldr scott/tiger control=foo logfile=log' is allowed, but
  49. 'sqlldr scott/tiger control=foo log' is not, even though the
  50. position of the parameter 'log' is correct.

其中有一行内容“    errors -- number of errors to allow            (Default 50)”  
所以说上面出现问题就不奇怪了。

最后将sqlldr命令加errors参数即可。

  1. sqlldr 'lottu/li0924' control=/home/oracle/stay_info.ctl log=/home/oracle/stay_info.log bad=/home/oracle/stay_info.bad errors=1000

整个过程20秒处理完成。相比之下;我那同事果断选择这种方法。

Oracle sqlldr导入之“MAXIMUM ERROR COUNT EXCEEDED”的更多相关文章

  1. Oracle sqlldr导入导出txt数据文件详解

    一.sqlldr导入txt 1.预备 a).txt文件 这里要保存成无签名的UTF-8 b).oracle建表 2.编写控制文件input_test.ctl LOAD DATA CHARACTERSE ...

  2. oracle sqlldr导入数据和导入去除空格

    1.新建目录E:\load把需要导入的数据文件放到目录下面 这是我自己造的测试数据... 2.在文件下新建脚本文件 Load data infile 'E:\load\info.txt' into t ...

  3. [转]sqlldr 导入乱码,Oracle客户端字符集问题

    1,查Oracle数据库创建时候的字符集:oracle服务器端执行 SQL> select name, value$ from sys.props$ where name like 'NLS%' ...

  4. Oracle数据库导入csv文件(sqlldr命令行)

    1.说明 Oracle数据库导入csv文件, 当csv文件较小时, 可以使用数据库管理工具, 比如DBevaer导入到数据库, 当csv文件很大时, 可以使用Oracle提供的sqlldr命令行工具, ...

  5. oracle sqlldr使用(导入速度快,但对数据本身的处理功能弱)

    oracle sqlldr使用(导入速度快,但对数据本身的处理功能弱) 博客分类: DB.Oracle OracleSQL  sqlload.cmd pause sqlldr user/pass@tn ...

  6. Oracle 数据库导入与出

    Oracle 数据库导入与出 导出( EXPORT )是用 EXP 将数据库部分或全对象的结构和导出 . 导入( 导入( IMPORT )是用 )是用 IMP IMP将 OS 文件中的对象结构和数据装 ...

  7. Oracle IMPDP导入数据案例之注意事项(undo/temp)

    针对Oracle数据迁移,我们可能会用到expdp/impdp的方式,有时候需要大表.lob字段等可能会消耗过大的临时表空间和undo表空间,所以一般我们根据导出日志,在导入前适当调整表空间大小.否则 ...

  8. Oracle sqlldr数据加载

    1 sqlldr 传统路径:sqlldr会利用sql插入为我们加载数据 直接路径加载:sqlldr不适用sql,直接格式化数据块,绕开undo,避开redo,最快的方法就是并行直接路径加载 sqlld ...

  9. Oracle impdp导入数据临时表空间与undo表空间爆满解决实例

    Oracle impdp导入数据临时表空间与undo表空间爆满解决实例 [日期:2018-01-24] 来源:Linux社区  作者:rangle [字体:大 中 小]   针对Oracle数据迁移, ...

随机推荐

  1. combobox的值从主页面传递到子页面

    1.主页面传递参数 url: '@Url.Action("WaterLoad")' + '?year=' + year + '&fanwei=' + fanwei, 2.控 ...

  2. Linux epoll版定时器

    #ifndef __MYTIMER_H_ #define __MYTIMER_H_ /*************** 高并发场景下的定时器 *****************/ //定时器回调函数 t ...

  3. Qt Creator设置多核编译(-j8参数)

    In the qtcreator go to the "Projects tab" and set "Make arguments" as you like: ...

  4. 关于Unity中的光照(六)

    反射探头 1:镜子金属等具有光滑表面的物体都会反射,而游戏中计算实时反射非常消耗CPU的资源, unity5.0新增了一个反射探头的技术,通过采样点,生成反射Cubemap,然后通过特定的着色器从Cu ...

  5. hash模块 hashlib不可逆加密 和 base64算法加密解密

    hashlib模块 用于加密相关的操作,代替md5模块和sha模块,主要提供SHA1,SHA224,SSHA256,SHA384,SHA512,MD5算法 直接看代码案例: ---------md5- ...

  6. moodle中的完形填空题的文本编写方法

    moodle中的完形填空题的文本编写方法 [完形填空题]考题把一段文字挖去一些空,让考生根据上下文正确地完成这些填空.完型填空题中的一段短文可以包括各种题目,如选择,填空,和数字题等. 题目的编辑是在 ...

  7. JDBC流ASCII和二进制数据

    PreparedStatement对象可以使用输入和输出流来提供参数数据.能够将整个文件放入可以容纳大值的数据库列,例如CLOB和BLOB数据类型. 有以下方法可用于流式传输数据 - setAscii ...

  8. (转) 解密H264、AAC硬件解码的关键扩展数据处理

    出自:http://blog.itpub.net/30168498/viewspace-1576794/       通过上一篇文章,我们用ffmpeg分离出一个多媒体容器中的音视频数据,但是很可能这 ...

  9. Python内部机制。

    type ,object ,__class__ ,__bases__ ,__metaclass__ , -------------------------不明白的地方----------------- ...

  10. 联想服务器X3650 M2 配置 RAID5 + 热备盘

    实验环境: 1.  服务器型号联想 System X3650 M2 2.  六块300G  SAS硬盘 实验目的: 配置RAID 5 ,搭建重要文件备份服务器. 标注:本教程六块硬盘,其中五块硬盘做R ...