在实际中常常有大量的数据需要导入到目前的数据库表中,Oracle提供的sqlldr命令很好的meet了这个需求。在使用的过程中,我们发现,如果在数据库的table端的Column中设置default值,但是使用sqlldr就不会起作用,也就是默认值没有设置成功,所以需要设置默认值得时候,我们将默认值写到了ctl文件中。ctl文件如下:Load data
infile "d: empuser.txt"
Append
into table tmp_temp
TRAILING NULLCOLS
(
phonenumber ,
addtime sysdate,
remark "suit"
)在导入大量数据的时候i,sqlldr往往不敬人意,在导入的时候存在效率问题,可以通过一下几种方式提高sqlldr的速度.1. 使用direct=Y 这是速度提高最快的方式
2. 使用大的readsize/streamsize 提高读写数据的缓冲区的大小
readsize 的最大值为21971520(20M). streamszie的最大值不清楚,我自己一般设置为21971520
3. 使用大的bindsize (只对conventional path load有效) , 提高一次提交的数据量, 效果也比较明显.
4. 使用大的columnarrayrows . Oracle9i的最大值在750000-800000之间,
Number of rows for direct path column array 提高direct load的效率,
5. 使用并行load, 最好运行两个不同的sqlldr程序, 指定每个ctl文件加载不同的内容.
6. 先删除加载表上的索引和约束. 具体效果不是很清楚, 但是, 肯定可以提高加载的速度.
7. 最好将加载表设置成nologging/unrecoverable, 对于conventional path load比较有用, 减少重做日志的写入.
8. 加大date_cache的大小, 在加载表有日期字段的时候能够提高加载的速度.
date_cache -- size (in entries) of date conversion cache (Default 1000)Oracle批量执行SQL语句Oracle Over的使用相关资讯 Oracle数据库 Oracle入门教程 oracle数据库教程
- Oracle数据库全球化 (03月01日)
- Oracle数据库日期过滤方法性能比较 (02/02/2015 13:20:26)
- Oracle数据库安装中端口被占用问题 (10/29/2014 07:42:24)
| - 在CentOS 6.6上搭建C++运行环境并 (10/10/2015 19:44:40)
- Oracle数据库无法使用localhost和 (11/14/2014 16:39:10)
- 使用SQLT来构建Oracle测试用例 (08/28/2014 06:17:41)
|
本文评论 查看全部评论 (0)