问题描述
oracle的sqlldr导入数据时,1.在java中调用Runtime.getRuntime().exec(sqlLoadSQL);时为什么不能立即入库。要停调tomcat服务后才能全部入库??并且日志文件中才生成数据??是不是sqlldr有什么参数控制啊??1.如果执行Runtime.getRuntime().exec(sqlLoadSQL)后;由于某些错误,不能全部入库只有几百条数据入库;这时我想回滚,该怎么做,,也就是事务处理。。。。急丫。。。。。
解决方案
解决方案二:
2|你用sqlldr加载一个1000万记录的数据表,但是加载了多一半的时候你发现有问题,这个时候你想清空表重新加载。那么最好reusestorage,这样再次加载就不需要再次寻找空闲空间了。数据库操作的sql语句: 使用方法: truncatetabletable_name; 操作特性: truncate只删除表中的所有数据,不删除表的结构; truncate是ddl操作立即生效,原数据不放到rollbacksegment中,不能回滚.,操作不触发trigger.; truncate语句缺省情况下将空间释放到minextents个extent,除非使用reusestorage; truncate会将高水线复位(回到最开始)
解决方案三:
1要停调tomcat服务后才能全部入库??和tomcat没有关系吧看看是不是程序逻辑有问题
解决方案四:
sqlLoadSQL设置有提交参数rows,一般默认是64,当插入数据库的条数达到提交条件时,才会提交一次(最后一次不满条件时也会提交),你的插入操作一次插入多少?
解决方案五:
引用1楼dyllove98的回复:
2|你用sqlldr加载一个1000万记录的数据表,但是加载了多一半的时候你发现有问题,这个时候你想清空表重新加载。那么最好reusestorage,这样再次加载就不需要再次寻找空闲空间了。数据库操作的sql语句: 使用方法: truncatetabletable_name; 操作特性: truncate只删除表中的所有数据,不删除表的结构;……
又学到不少东西
解决方案六:
引用3楼dubufanchen的回复:
sqlLoadSQL设置有提交参数rows,一般默认是64,当插入数据库的条数达到提交条件时,才会提交一次(最后一次不满条件时也会提交),你的插入操作一次插入多少?
我插入240000条64:错误情况下是插入64条。。在运行正常的情况下:运行Runtime.getRuntime().exec(sqlLoadSQL)只插入836条不知道为什么总是这个数字;我是这样认为的:1.sqlload是不是有参数或缓存控制。2.插入是dml语句应该commit才能提交吧!不解??
解决方案七:
将参数rows=0设置成逐笔提交试一下,如果这样可以说明问题就是这个地方,如果每次都是只插入836条,应该是你的数据格式不正确,看看log文件中的提示(默认与数据文件同一个目录,与ctl文件同名,只是后缀由ctl换成log),里面会有详细的出错说明。
解决方案八:
导入100万数据:1)今天我也遇到这样的问题:执行在sqlldr语句后面加上direct=true即可Processprocess=r.exec("sqlldruserid=customer/soshare@customercontrol=bigdata.ctldata=bigdata.csvdirect=true");[经过测试:用时间为:00:00:30.06]2)还有跟快的Processprocess=r.exec("sqlldruserid=customer/soshare@customercontrol=bigdata.ctldata=bigdata.csvdirect=truestreamsize=10485760");[经过测试:用时间为:00:00:28.19]