使用SQL Loader导入大量数据,避免使用SQL频繁写库
来源:互联网 发布:淘宝主图视频尺寸要求 编辑:程序博客网 时间:2024/06/06 21:38
使用SQL Loader导入大量数据,避免使用SQL频繁写库
Posted on 2008-04-18 21:33 ChinaRay 阅读(7595) 评论(1) 编辑 收藏一.将原始数据文件读进内存流中,每读一行解析一条数据,接着执行一条SQL语句,将解析到的数据插入数据库表;
二..将原始数据文件读进内存流中,每读一行解析一条数据,接着将解析到的数据按行写入一个临时文件data.tmp,待所有数据均被解析完毕且写入临时文件后,调用SQL Loader,将所有数据一次性从临时文件导入数据库表。
一开始是按照第一种方法编程的。在本机(Oracle服务器装在本机)测试顺利通过,但是花了大约150分钟才导入解析和完成;当部署到实际环境中运行时,却出现了问题。跟踪发现是因为网络不稳定(程序所在服务器与数据库服务器处于不同的局域网,由防火墙隔开,做了几个特定端口的路由),有时候连接不到数据库,往往只导入了很少的几千条甚至几百条数据时,数据库就连接不上了。
后来分析,对于大量数据的导入,采用第一种方法会导致频繁写库,每次都要打开数据库(禁用了连接池,后续文章会提到禁用的原因),对数据库造成较大的压力,加上网络环境本来就不够稳定,所以很容易出现问题。于是改用第二种方法。
使用第二种方法后,解析花的时间大约为90分钟,导入则只花了5分钟左右。看来SQL Loader的效率真的很高。
下面讲讲SQL Loader的基本用法。
1、在Oracle中按照导入数据的格式建立一个空表
2、编写一个控制文件control.ctl,内容如下
INFILE 'E:\test\data.tmp'
BADFILE 'E:\test\data.bad'
DISCARDFILE 'E:\test\data.dsc'
DISCARDMAX 1000
APPEND
INTO TABLE "TB_TEST"
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS
(
USER_ID,
USER_NAME,
REG_TIME DATE(20) "YYYY-MM-DD HH24:MI:SS"
)
操作分类:
a、insert,为缺省方式,在数据装载开始时要求表为空
b、append,在表中追加新记录
c、replace,删除旧记录,替换成新装载的记录
d、truncate,同上
3、在命令行中执行以下语句:
sqlldr userid/password@database e:\test\control.ctl
关于如何在程序中使用SQL Loader,在后续文章中将做相关介绍。
- 使用SQL Loader导入大量数据,避免使用SQL频繁写库
- 使用SQL Loader导入大量数据,避免使用SQL频繁写库
- 使用SQL Loader导入大量数据,避免使用SQL频繁写库
- 使用SQL*LOADER导入数据
- 使用sql*loader进行数据导入
- 使用 Sql*Loader 向 Oracle 导入数据
- 使用sql*loader进行数据导入
- 使用sql*loader进行数据导入
- Oracle 使用SQL Loader 从外部导入数据
- 使用SQL*Loader将CSV文件数据导入ORACLE数据表
- 使用SQL*LOADER将TXT或CSV数据导入ORACLE
- 使用Oracle SQL Loader进行大数据导入
- 使用SQL*Loader将CSV文件数据导入ORACLE数据表
- 使用SQL*Loader将CSV文件数据导入ORACLE
- SQL Loader 导入数据
- sql*loader导入数据
- 使用SQL*LOADER装载数据
- 大量插入:使用SQL*Loader Direct Path选项
- 修改系统默认输入法
- Java安全通信:HTTPS与SSL
- C逻辑运算
- Linux下./configure错误详解
- Q53
- 使用SQL Loader导入大量数据,避免使用SQL频繁写库
- ItemsControl 解析
- 如何OGNL理解
- Spring学习笔记(五)
- Windows核心编程【22】小结
- 如何OGNL理解
- attach database failed
- mule config
- AlertDialog总结