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