3

我正在家里通过 vpn 上的 Oracle SQL Loader 加载大文件,它们需要很多时间。当我从工作中加载它们时,它们的加载速度要快得多。我正在加载的文件已经在我的工作服务器上。

所以我的想法是减速是因为为每一行打印的“达到提交点 - 逻辑记录数”。由于它们必须通过网络发送,因此必须很慢。我用谷歌搜索但找不到任何方法来减少它们的打印量。尝试添加 rows=5000 作为参数,但我仍然得到每一行的打印。

如何打印更少的“达到的提交点 - 逻辑记录计数”计数?

谢谢

4

4 回答 4

8

您可以使用选项子句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) )
于 2012-08-10T13:33:58.113 回答
0

尝试将输出和错误重定向到文件。

于 2012-08-10T13:22:12.237 回答
0

本的回答非常好。不要使用任何 shell 程序来抑制STDOUT. 我使用了以下内容:

sqlldr schema/pw@db mycontrolfile.ctl | sed '/Commit point reached/d'

这样做的问题之一是,如果您使用脚本运行命令,则错误返回值将被 sed 命令刷新。换句话说,如果由于某种原因 sqlldr 失败并返回值为 1,那么 sed 将立即刷新它并返回值为 0。因此您的错误状态将被刷新。

重定向可能不如 Ben 的解决方案好STDOUTSTDERR

于 2014-08-18T20:20:17.173 回答
0

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}
于 2016-08-09T23:26:47.710 回答