我正在通过Oracle SQL Loader从家里通过vpn加载大文件,而且他们花了很多时间。当我从工作中加载它们时加载速度要快得多。我正在加载的文件已经在我的工作服务器上了。
所以我的想法是,减速是因为为每一行打印的“达到提交点 - 逻辑记录计数”。由于必须通过网络发送,因此必须很慢。我用谷歌搜索,但找不到任何方法来打印更少的。尝试添加rows = 5000作为参数,但我仍然得到每行的打印件。
如何打印较少的“达到提交点 - 逻辑记录计数”计数?
由于
答案 0 :(得分:6)
您可以使用options clause中提供的关键字silent
。您可以将following things设置为无声:
- HEADER - 禁止通常出现在屏幕上的SQL * Loader标头消息。标题消息仍显示在日志文件中。
- FEEDBACK - 禁止通常出现在屏幕上的“提交点已达到”反馈消息。
- 错误 - 抑制日志文件中的数据错误消息,该消息在记录生成导致其出现的Oracle错误时发生 写入坏文件。仍会显示已拒绝记录的计数。
- DISCARDS - 禁止写入丢弃文件的每条记录的日志文件中的消息。
- PARTITIONS - 在直接加载分区表时禁止将每分区统计信息写入日志文件。
- ALL - 实现所有抑制值:HEADER,FEEDBACK,ERRORS,DISCARDS和PARTITIONS。
您想要取消feedback
。
您可以在命令行上使用,例如:
sqlldr schema/pw@db silent=(feedback, header)
在控制文件的options子句中,例如:
options (bindsize=100000, silent=(feedback, errors) )
答案 1 :(得分:0)
尝试将输出和错误重定向到文件。
答案 2 :(得分:0)
Ben的回答非常好。不要使用任何shell程序来压制STDOUT
。我使用了以下内容:
sqlldr schema/pw@db mycontrolfile.ctl | sed '/Commit point reached/d'
其中一个问题是,如果您使用脚本来运行命令,那么sed命令将刷新错误返回值。换句话说,如果由于某种原因,sqlldr失败并返回值为1,则sed将立即刷新此值,返回值为0.因此,您的错误状态将被刷新。
重定向STDOUT
和STDERR
可能不如Ben的解决方案好。
答案 3 :(得分:0)
从shell脚本调用sqlldr
时遇到同样的问题。
错误:强>
SQL * Loader:版本10.2.0.3.0 - 生产于2016年8月9日星期二20:06:38 版权所有(c)1982,2005,Oracle。保留所有权利。
达到提交点 - 逻辑记录计数64
表myschema.ORG_MOVEMENT_RULES的SQL Loader失败。退出...
经过调查,发现控制文件(v_movementrules_control)
在从Windows复制到Unix系统时已损坏,并且在每行末尾都有DOS / Windows行结束字符^M
。
sqlldr userid=${USER}/${PASS}@${DB} control=${v_OrgRules_Control}