在使用DIRECT = TRUE运行sqlldr时,您能看到加载进度吗?

时间:2014-04-13 03:32:01

标签: oracle sql-loader

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

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

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

  

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

如果设置了此参数,sqlldr将打印一条消息,例如

Save data point reached - logical record count 10000

每次达到保存点。但是,正如Oracle指出并且我自己的测试确认的那样,这些节省非常昂贵:

  

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

再次保证,在8小时负载的情况下,每15分钟仍然运行一次,值得一点性能。

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

请注意,查询SYS.V_$LOADTSTATSYS.V_$LOADPSTAT 有效。同样,根据Oracle文档:

  

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