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

8

我正在尝试在Oracle上对每一行进行计算后插入100万条记录。已经过去了15个小时,插入仍在进行中。当我在此表上编写一个查询时,它什么也不显示。我不知道我的插入数据去哪里了。

所以我的问题是,在Oracle表中执行长时间运行的插入时是否有任何方法检查到目前为止插入了多少行记录,谢谢。


你从哪里读取要插入的数据? - Tony Andrews
1个回答

9
这取决于您是在SQL还是PL/SQL中进行插入。在使用PL/SQL时,您有自己的方法来获取已处理的行数,当然也可以编写自己的程序。
至于SQL,我可以想到两种方法:
  • V$SESSION_LONGOPS
  • V$TRANSACTION
大多数基于GUI的工具都会有漂亮的图形表示长时间操作视图。您可以查询 -
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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接