【问题标题】:Can you see load progress when running sqlldr with DIRECT = TRUE?使用 DIRECT = TRUE 运行 sqlldr 时,您能看到加载进度吗?
【发布时间】:2014-04-13 03:32:01
【问题描述】:

我正在使用 sqlldr 将一个大文件 (~22 GB) 加载到 Oracle,使用 direct = TRUE 选项(否则可能需要几个月的时间)。所以它已经在那里坐了几个小时,尽我所能加载,但我无法知道它需要多长时间。有没有办法检查这种负载的进度?

【问题讨论】:

  • 不知道 sqlldr 但您可以使用管道作为数据源。对于 sqlldr,并使用某种脚本或程序将数据写入此管道,这些脚本或程序会告诉您已经写入了多少。到目前为止已经写了多少行,或者计算源文件的百分比。这样,您将获得进度 +/- sqlldr 的缓冲

标签: oracle sql-loader


【解决方案1】:

您可以监控要插入的表的增长情况。检查 dba_segments。

【讨论】:

  • 加载时,数据块会附加到段的范围中。在加载完成之前,此数据不可见,但在加载期间段的大小正在增长。
  • 你是对的 - 我可以看到字节和块在增加。
【解决方案2】:

更新:ik_zelf 的答案是正确的,但我将保留这个答案,因为设置 rows 参数以强制定期保存仍然是一件有用的事情。

我发现跟踪直接路径加载进度的一种方法是在 sqlldr 中设置 ROWS 选项

rows -- 常规路径绑定数组中或之间的行数 直接路径数据保存 (默认:常规路径64,直接路径全部)

如果设置了这个参数,sqlldr会打印这样的消息

Save data point reached - logical record count 10000

每次达到一个保存点。然而,正如 Oracle 指出的并且我自己的测试证实,这些节省非常昂贵:

数据保存是一项昂贵的操作。 ROWS 的值应该是 设置得足够高,以便每 15 分钟保存一次数据或 更长。目的是提供一个上限(高水位线) 发生实例故障时丢失的工作量 在长时间运行的直接路径负载期间。将 ROWS 的值设置为 数量少会对性能和数据块空间产生不利影响 利用率。

确保在 8 小时的负载中每 15 分钟仍然运行一次,这对性能有所影响是值得的。

http://docs.oracle.com/cd/B19306_01/server.102/b14215/ldr_modes.htm#i1007779

请注意,查询SYS.V_$LOADTSTATSYS.V_$LOADPSTAT 不会 工作。同样,根据 Oracle 文档:

针对此表的任何 SELECT 都会导致“没有返回行”,因为您 无法同时加载数据和查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2013-11-02
    • 2014-11-17
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多