oracle 的 sqlldr 导入数据时

nicai00 2010-11-29 11:31:46


oracle 的 sqlldr 导入数据时 ,

1. 在java 中 调用 Runtime.getRuntime().exec(sqlLoadSQL); 时 为什么不能立即入库。要停调tomcat 服务后 才能全部入库??并且 日志文件中才生成数据?? 是不是sqlldr 有什么参数控制啊??

1. 如果 执行 Runtime.getRuntime().exec(sqlLoadSQL) 后 ; 由于某些错误,不能全部入库 只有几百条数据入库; 这时我想回滚 ,该怎么做,, 也就是事务 处理。。。。


急丫 。。。。。
...全文
400 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxy202408 2010-12-17
  • 打赏
  • 举报
回复
导入100万数据:
1)今天 我也遇到这样的问题: 执行在 sqlldr语句后面 加上direct=true 即可

Process process = r.exec("sqlldr userid=customer/soshare@customer control=bigdata.ctl data=bigdata.csv direct=true ");
[经过测试:用时间为: 00: 00: 30.06]
2)还有跟快的
Process process = r.exec("sqlldr userid=customer/soshare@customer control=bigdata.ctl data=bigdata.csv direct=true streamsize=10485760");
[经过测试:用时间为: 00: 00: 28.19]



醉梦书生 2010-12-08
  • 打赏
  • 举报
回复
将参数rows=0设置成逐笔提交试一下,如果这样可以说明问题就是这个地方,
如果每次都是只插入836 条,应该是你的数据格式不正确,看看log文件中的提示(默认与数据文件同一个目录,与ctl文件同名,只是后缀由ctl换成log),里面会有详细的出错说明。
nicai00 2010-11-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dubufanchen 的回复:]
sqlLoadSQL设置有提交参数rows,一般默认是64,当插入数据库的条数达到提交条件时,才会提交一次(最后一次不满条件时也会提交),你的插入操作一次插入多少?
[/Quote]

我 插入 240000 条

64 :错误情况下是 插入 64条 。。

在运行正常的情况下: 运行Runtime.getRuntime().exec(sqlLoadSQL) 只插入836 条 不知道为什么 总是这个 数字 ;

我是 这样认为的:1.sqlload 是不是有参数 或缓存 控制。
2.插入 是 dml 语句 应该commit 才能提交吧!

不解 ??
nicai00 2010-11-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dyllove98 的回复:]
2|你用sqlldr加载一个1000万记录的数据表,但是加载了多一半的时候你发现有问题,这个时候你想清空表重新加载。那么最好 reuse storage ,这样再次加载就不需要再次寻找空闲空间了。

数据库操作的sql语句:
  使用方法:
  truncate table table_name;
  操作特性:
  truncate 只删除表中的所有数据,不删除表的结构; ……
[/Quote]

又学到不少东西
Jlins 2010-11-29
  • 打赏
  • 举报
回复
1\要停调tomcat 服务后 才能全部入库??

和tomcat没有关系吧 看看是不是程序逻辑有问题
Jlins 2010-11-29
  • 打赏
  • 举报
回复
2|你用sqlldr加载一个1000万记录的数据表,但是加载了多一半的时候你发现有问题,这个时候你想清空表重新加载。那么最好 reuse storage ,这样再次加载就不需要再次寻找空闲空间了。

数据库操作的sql语句:
  使用方法:
  truncate table table_name;
  操作特性:
  truncate 只删除表中的所有数据,不删除表的结构;
  truncate 是ddl操作立即生效,原数据不放到rollback segment中,不能回滚.,操作不触发trigger.;
  truncate 语句缺省情况下将空间释放到 minextents个 extent,除非使用reuse storage;
  truncate 会将高水线复位(回到最开始)
醉梦书生 2010-11-29
  • 打赏
  • 举报
回复
sqlLoadSQL设置有提交参数rows,一般默认是64,当插入数据库的条数达到提交条件时,才会提交一次(最后一次不满条件时也会提交),你的插入操作一次插入多少?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧