【问题标题】:How to check progress of long running insertions in oracle如何检查oracle中长时间运行的插入的进度
【发布时间】:2015-01-07 10:36:26
【问题描述】:

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

所以我的问题是,有没有办法检查在 oracle 表中执行长时间运行插入时插入了多少行,谢谢。

【问题讨论】:

  • 你从哪里读取你插入的数据?

标签: sql oracle oracle11g


【解决方案1】:

这取决于您是在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,则交易将完成。你可以用v$sessionjoin 它。可以查询-

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

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 2010-10-11
    • 2023-04-05
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多