如何在oracle中检查长时间运行的插入的进度

时间:2015-01-07 10:36:27

标签: sql oracle oracle11g

我试图在oracle的每一行上执行一些计算后插入100万条记录。 15个小时过去了,它还在工作中。当我在这个表上写一个select查询时,它什么也没显示。我不知道每次插入的插入数据在哪里。

所以我的问题是,有没有办法检查在oracle表中执行长时间运行插入到目前为止插入的行数,谢谢。

1 个答案:

答案 0 :(得分:8)

这取决于您是在SQL还是PL/SQL进行插入。使用PL/SQL时,您可以通过自己的方式获取已处理的行数,但您当然可以编写自己的程序。

SQL,我可以想到两种方式:

  • V $ SESSION_LONGOPS
  • V $ TRANSACTION

大多数GUI based tools对于长操作视图都有很好的图形表示。您可以查询 -

SELECT ROUND(SOFAR*21411/TOTALWORK)
FROM V$SESSION_LONGOPS
WHERE username     = '<username>'
AND TIME_REMAINING > 0

V$TRANSACTION视图可以告诉您任何交易是否仍处于待处理状态。如果您的INSERT已完成且已发出COMMIT,则交易将完成。您可以join使用v$session。您可以查询 -

SELECT     .... 
from       v$transaction t 
inner join v$session s 
ON         t.addr = s.taddr;