SQL*Loader-805的解决(r2笔记36天)

使用sql*loader是大型项目中数据迁移的利器。如果是外部系统,其他数据库到oracle的数据迁移,使用文本式文件是最兼容的方式。 sqlldr的加载效率是很高的,同时在oracle 10g以后推出的oracle_loader效率也不容小视。 sqlldr提供了额外的功能来生成external_table的创建和insert脚本,不过control file是关键,今天尝试的时候就出现了一些问题。 > sqlldr n1/n1 control=NAME_DATA_sqlldr.ctl external_table=generate_only SQL*Loader: Release 11.2.0.2.0 - Production on Thu Jul 17 08:50:19 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. SQL*Loader-805: CONTINUEIF not supported by External Table 这个问题在MOS上也没有查到针对性的解决方案,就是提示不支持。 查看control file的内容,如下: > less NAME_DATA_sqlldr.ctl LOAD DATA CONTINUEIF LAST != "|" INTO TABLE NAME_DATA APPEND FIELDS TERMINATED BY '__XXX__' OPTIONALLY ENCLOSED BY '"_"' TRAILING NULLCOLS ( NAME_ID INTEGER EXTERNAL NULLIF (NAME_ID=BLANKS) , SYS_CREATION_DATE DATE "MM/DD/YYYY HH24:MI:SS" NULLIF (SYS_CREATION_DATE=BLANKS) 。。。。。 现在的问题就是使用continueif导致了对于外部表不支持。 生成的数据文件中,每行都是以|结尾 因为在oracle_loader中有records teminated by 的选项,可以尝试先生成external table的脚本,然后在脚本中把“records teminated by newline" 修改为”records terminated by '|'" 修改control file为如下的方式,就是删除了continueif的语句 LOAD DATA INTO TABLE NAME_DATA APPEND FIELDS TERMINATED BY '__DOX__' OPTIONALLY ENCLOSED BY '"_"' TRAILING NULLCOLS ( NAME_ID INTEGER EXTERNAL NULLIF (NAME_ID=BLANKS) 。。。 然后在生成的日志文件中找到了如下的一段内容,简单修改了表明 CREATE DIRECTORY statements needed for files ------------------------------------------------------------------------ CREATE DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000 AS '/dbccbsPT1/oracle/NFTCUS1/export/MIG_SCRIPTS_TRUE/CM2_LOG' CREATE TABLE statement for external table: ------------------------------------------------------------------------ CREATE TABLE NAME_DATA_EXT_TEST ( "NAME_ID" NUMBER(10), 。。。。。 "CONV_RUN_NO" NUMBER(3) ) ORGANIZATION external ( TYPE oracle_loader DEFAULT DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000 ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE BADFILE 'SYS_SQLLDR_XT_TMPDIR_00000':'a.bad' LOGFILE 'a.log_xt' READSIZE 1048576 现在需要做的就是修改NEWLINE为 ’|’ 然后尝试创建。就没有问题了。 SQL> select count(*)from name_data_ext_test; COUNT(*) ---------- 9355

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-07-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

ORA-02019 错误处理

       ORA-02019 错误提示是未找到远程数据库的连接说明,通常发生在本地数据库无法连接到远程数据库。引发该问题的原因很多,比如网络连接,连接方式(...

1001
来自专栏杨建荣的学习笔记

一个SQL性能问题的优化探索(二)(r11笔记第38天)

继续前几天的一个案例一个SQL性能问题的优化探索(一)(r11笔记第33天) 如下的SQL语句存在索引字段CARD_NO,但是执行的时候却走了全表扫描,因为这是...

3518
来自专栏沃趣科技

应用示例荟萃 | performance_schema全方位介绍(上)

经过前面6个篇幅的学习,相信大家对什么是performance_schema,已经初步形成了一个整体认识,但我想很多同行看完之前的文章之后可能还是一脸懵逼,今天...

2073
来自专栏idba

死锁案例之四

一 前言 死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想...

773
来自专栏乐沙弥的世界

PL/SQL 包编译时hang住的处理

       最近PL/SQL包在编译时被hang住,起初以为是所依赖的对象被锁住。结果出乎意料之外。下面直接看代码演示。

906
来自专栏杨建荣的学习笔记

关于dual表的破坏性测试(r3笔记第60天)

关于dual表的破坏性测试,既然是破坏性测试,就需要确定这个测试仅限于测试或者个人学习所用,可能有些sql看似极为简单,但是一旦运行就会导致整个业务系统崩溃。 ...

38813
来自专栏杨建荣的学习笔记

不经意发现的dba_objects和dba_tables中的细节(r7笔记第56天)

今天有一个同学问我一个问题,因为白天比较忙也没有在意,在下班后坐地铁的时候抽空看了这个问题,感觉还是蛮有意思的。但是当时也没有任何答案,就准备自己回去好好实验一...

3643
来自专栏杨建荣的学习笔记

一个普通数据库用户所能查到的"意料之外"的信息(r2笔记98天)

有时候限于工作环境的情况,大多数开发人员只得到了一个权限收到限制的数据库用户。 可能你都不知道你所拥有的数据库用户都能查到哪些你想象不到的数据库信息,其实你知道...

3398
来自专栏乐沙弥的世界

使用带dblink方式的datapump迁移Oracle 10g到11g

      对于从Oracle 10g下迁移数据库到Oracle 11g,除了使用RMAN方式之外,我们可以使用带dblink的datapump方式来实现基于逻...

641
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(31)-MVC使用RDL报表

这次我们来演示MVC3怎么显示RDL报表,坑爹的微软把MVC升级到5都木有良好的支持报表,让MVC在某些领域趋于短板 我们只能通过一些方式来使用rdl报表。 R...

2845

扫码关注云+社区