我使用direct = TRUE选项将一个大文件(~22 GB)加载到带有sqlldr的Oracle(否则可能需要几个月)。所以它已经在那里坐了几个小时,尽我所知,但我无法知道它会花多长时间。有没有办法检查这种负载的进度?
答案 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_$LOADTSTAT
或SYS.V_$LOADPSTAT
不有效。同样,根据Oracle文档:
对此表的任何SELECT都会导致“没有返回任何行”,因为您 无法加载数据并同时进行查询。