`
streamsong
  • 浏览: 82522 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL*LOADER和外部表加载

阅读更多

最近一直在用SQL*LOADER加载数据,用外部表也可以实现,今天想测试下外部表加载数据和SQL*LOADER加载1029027条记录的性能。
首先创建一张外部表。
create table enmo
(name char(10),lname char(10),xname varchar2(50),ydoss varchar2(20),
doss varchar2(50),btime varchar2(50),etime varchar2(50),
num_file number,box_num number,b_enum varchar2(20))
organization external
(type oracle_loader
default directory imp
access parameters
(records delimited by newline
fields terminated by","
(name,lname,xname,ydoss,doss,btime,etime,num_file,box_num,b_enum))
location('doss.csv'));
表已创建。
查看要加载的数据是否正确
SQL> select * from enmo;
select * from enmo
*
第 1 行出现错误:
ORA-29913: 执行 ODCIEXTTABLEFETCH 调出时出错
ORA-30653: 已达到拒绝限制值
这个错误一般都是外部表的数据和外部表的数据类型或字段长度不符,查看日志发现
处理列 NUM_FILE (行 1, 数据文件 d:\imp\doss.csv) 时出错
ORA-01722: 无效数字
这是因为doss.csv的第一行是表的字段名字,和NUMBER类型不符,处理方法可以在第9行下面添加skip=1或者直接讲doss.csv的第一行删除即可,这里直接删除doss.csv的第一行。
SQL> select name,lname,xname,ydoss,doss,btime from enmo where rownum<10;
NAME   LNAM XNAME                  YDOSS DOSS             BTIME
------ ---- ---------------------- ----- ---------------- ------------------
内务府 呈稿  掌关防管理内管领事务处      乾关1 05-08-009-000001    乾隆七年九月十八日
内务府 呈稿  掌关防管理内管领事务处      嘉关1 05-08-009-000002    嘉庆元年正月十二日
内务府 呈稿  掌关防管理内管领事务处      嘉关2 05-08-009-000003    嘉庆元年五月初七日
内务府 呈稿  掌关防管理内管领事务处      嘉关3 05-08-009-000004    嘉庆元年七月初二日
内务府 呈稿  掌关防管理内管领事务处      嘉关4 05-08-009-000005    嘉庆元年九月初五日
内务府 呈稿  掌关防管理内管领事务处      嘉关5 05-08-009-000006    嘉庆元年三月十八日
内务府 呈稿  掌关防管理内管领事务处      嘉关6 05-08-009-000007    嘉庆元年二月十九日
内务府 呈稿  掌关防管理内管领事务处      嘉关7 05-08-009-000008    嘉庆元年三月十四日
内务府 呈稿  掌关防管理内管领事务处      嘉关8 05-08-009-000009    嘉庆二年二月初三日
已选择9行。
先测试SQL*LOADER加载需要的时间,首先创建一张和表enmo同构的表。
CREATE TABLE ENMO_01 AS SELECT * FROM ENMO WHERE 1=2;
表已创建。
利用SQL*LOADER加载
C:\Documents and Settings\Administrator>sqlldr stream/stream control=d:\imp\doss.ctl log=d:\imp\doss.log direct=true streamsize=10485760 date_cache=50000
SQL*Loader: Release 11.2.0.1.0 - Production on 星期日 10月 2 22:15:40 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates.All rights reserved.
加载完成 - 逻辑记录计数 1029027。
参数介绍:
direct=true打开直接路径加载。
streamsize=10485760直接路径加载默认读取全部记录,之后存到流缓冲区,即streamsize,该参数默认256K,这里加大到10M。
date_cache=50000该参数指定一个转换后日期格式的缓冲区,以条为单位,这里指定5000条。
查看日志,加载用时28.82秒
跳过的逻辑记录总数:          0
读取的逻辑记录总数:       1029027
拒绝的逻辑记录总数:          0
废弃的逻辑记录总数:        0
由 SQL*Loader 主线程加载的流缓冲区总数:      227
由 SQL*Loader 加载线程加载的流缓冲区总数:        0
从 星期日 10月 02 22:15:40 2011 开始运行
在 星期日 10月 02 22:16:08 2011 处运行结束
经过时间为: 00: 00: 28.82
CPU 时间为: 00: 00: 04.75
测试外部表加载需要的时间。
SQL> select count(*) from enmo;
COUNT(*)
----------
   1029027

SQL> truncate table enmo_01;
表被截断。

SQL> set timing on
SQL> INSERT /*+APPEND*/ INTO ENMO_01 SELECT * FROM ENMO;
已创建1029027行。已用时间:  00: 00: 23.82

SQL> set timing on
SQL> INSERT /*+APPEND*/ INTO ENMO_01 SELECT * FROM ENMO;
已创建1029027行。
已用时间:  00: 00: 23.82
SQL*LOADER加载需要28.82秒,外部表只需要23.82秒。
/*+APPEND*/代表SQL级的直接路径加载,这种方式不写redo,可以减少磁盘I/O。同样都是直径路径,显然利用外部表加载的时间要小于SQL*LOADER加载的时间。
ORACLE公司的工程师黄凯耀曾在EXADATA上利用外部表加载1T的数据,只用可10分钟,当然,他还用到了压缩技术。
我认为用外部表加载更方便,起码在加载前可以非常只管的检查要加载的数据是否正确。

分享到:
评论

相关推荐

    SQL*Loader详细介绍

    - **直接路径加载**:SQL*Loader可采用直接路径加载模式,绕过数据库实例,提高加载速度,但不支持事务。 - **并发加载**:通过多进程或多线程实现并发加载,提高数据导入效率。 - **子记录和数组记录**:处理...

    SQL*Loader.zip

    8. **直接路径加载**:SQL*Loader使用直接路径加载技术,绕过数据库的SQL解析器和优化器,提高数据加载速度。但这也意味着在加载期间,目标表可能无法进行其他操作。 9. **绑定变量**:高级用户还可以使用绑定变量...

    sql*loader 指南

    SQL*Loader是Oracle提供的一款高效数据加载工具,用于将外部文件中的数据批量加载到Oracle数据库表中。该工具支持多种文件格式,包括CSV、文本文件等,并且能够处理复杂的字符分隔符和字段格式化需求。SQL*Loader有...

    sqlloader详解

    3. **多表加载**:一次运行中可以加载多个表,并且可以根据条件将特定记录定向到不同表中。 4. **数据预处理**:在数据加载到表之前,可以执行SQL函数对数据进行预处理。 5. **复合记录处理**:可以将多个物理记录...

    使用SQL*Loader将dBASE数据转储到ORACLE数据库.pdf

    SQL*Loader是Oracle数据库提供的一种高效的数据加载工具,用于将外部数据文件中的数据批量导入到Oracle数据库的表中。在本篇文章中,我们将探讨如何使用SQL*Loader将dBASE数据库的数据转储到Oracle数据库。 首先,...

    Oracle数据库装载外部数据工具SQL*Loader的应用 (1).pdf

    SQL*Loader的功能强大,允许一次性加载多个表,并能逻辑地将特定记录加载到不同的表中。此外,它还支持在数据加载前应用SQL函数进行预处理,以及处理嵌套列、嵌套表、VARARRAYS和LOBs(包括BLOB、CLOB、NCLOB和BFILE...

    Oracle数据库装载外部数据工具SQL*Loader的应用.pdf

    在进行数据库的数据装载时,Oracle提供了SQL*Loader工具,这是一个强大的数据导入程序,能够将外部数据文件导入Oracle数据库表中。以下是对Oracle数据库装载外部数据工具SQL*Loader应用的详细知识点介绍。 首先,...

    sqlloader的成功案例

    SQL*Loader是Oracle提供的一款用于将外部文件中的数据批量加载到Oracle数据库中的工具。它支持多种数据格式,如CSV、TXT等,并能够处理大数据量的导入工作,极大地提高了数据迁移或更新的效率。SQL*Loader有两种主要...

    如何使用ORACLE中的SQL*LOADER.pdf

    Oracle的SQL*Loader是Oracle数据库提供的一种强大的数据加载工具,它可以高效地将数据从外部文件导入到Oracle数据库中,支持多种格式的数据文件,包括文本文件、CSV文件等。在这个例子中,我们将探讨如何使用SQL*...

    SQL_LOADER例子

    在描述中提到,"sqlloader方便数据的导入导出",确实如此,SQL*Loader不仅支持数据的导入,还可以用于导出数据。对于导入,它能处理大量数据,并且支持多种数据类型,包括字符串、数字、日期等。对于导出,可以通过...

    SQL loader and oracle sql study

    **SQLLoader FAQ - Oracle FAQ_files、SQLLoader FAQ - Oracle FAQ.htm** 这些文件很可能是关于SQL*Loader的常见问题解答(FAQ),可能包含了使用SQL*Loader时遇到的问题及其解决方案。FAQ通常涵盖以下内容: 1. **...

    sqlloader入门

    - `external_table`:使用外部表进行加载。 - `columnarrayrows`:直接路径列数组的行数。 - `streamsize`:直接路径流缓冲区的大小。 - `multithreading`:在直接路径中使用多线程。 - `resumable`:启用或禁用当前...

    sqlloader数据导入详解

    SQL*Loader 的核心功能在于能够读取外部文件并将其加载到指定的数据库表中。下面通过一个示例来了解 SQL*Loader 的基本语法和操作流程: ```sql LOAD DATA INFILE '/ora9i/fengjie/agent/data/ipaagentdetail200410...

    sqlload入门简单教程

    10. **与外部表配合使用**:通过创建外部表,可以直接在SQL查询中使用数据文件,简化数据加载流程。 了解了这些基本概念后,你可以通过实践操作“sqlload.doc”文档中的例子,进一步熟悉SQL*Loader的使用。这个文档...

    ORACLE SQL Loader

    6. **并发加载** 对于大规模数据导入,可以使用多个装载进程并行加载数据,以提高性能。但这需要考虑数据库的并发控制和资源管理。 7. **错误处理** SQL*Loader支持错误处理,可以配置它将错误记录到日志文件,...

    通过sqlloader将csv中文件写入数据库中

    在提供的压缩包`sqlLoader`中,可能包含示例的控制文件和数据文件,你可以按照上述步骤进行操作,以实际操作来加深理解。通过实践,你将能够熟练掌握`SQL*Loader`,从而更高效地管理和维护数据库中的数据。

    sqlloader使用教程

    SQL*Loader作为Oracle数据库管理系统的重要组成部分,专门用于将数据从外部文件批量加载到现有Oracle表中。它最初在Oracle版本5时仅限于CMS和部分PC系统,但随着Oracle的迭代更新,SQL*Loader的功能得到了显著增强,...

    ORACLE SQL*加载程序的使用方法.pdf

    ORACLE SQL*加载程序(SQL*Loader)是Oracle提供的用于将外部数据文件加载到数据库表中的工具。它是一种数据转换工具,支持数据的导入、迁移和整合,特别适用于数据量大和复杂数据结构的情况。SQL*Loader能够有效地...

    sqlloader知识点

    与DB2的Load工具相比,SQL*Loader提供了更多的灵活性和选项,支持多种加载模式,包括单表加载和多表加载。 #### 二、SQL*Loader的使用方法 ##### 1. 基本使用 - **命令行调用**:通过`sqlldr`命令启动SQL*Loader。...

    利用 sqluldr2导出数据 使用sqlldr导入数据 通过merge into 合并更新数据

    SQL*Loader是Oracle用于将数据从外部文件加载到数据库的工具。它的使用流程与SQLULDR2类似,但方向相反: - 创建控制文件,定义要导入的表结构、字段映射等。 - 运行SQL*Loader命令,指定数据库连接信息、控制...

Global site tag (gtag.js) - Google Analytics