【发布时间】:2015-01-07 10:36:26
【问题描述】:
在对 oracle 中的每一行执行一些计算后,我试图插入 100 万条记录。 15小时过去了,它仍在工作。当我在这个表上写一个选择查询时,它什么也没显示。我不知道每次插入时我插入的数据在哪里。
所以我的问题是,有没有办法检查在 oracle 表中执行长时间运行插入时插入了多少行,谢谢。
【问题讨论】:
-
你从哪里读取你插入的数据?
在对 oracle 中的每一行执行一些计算后,我试图插入 100 万条记录。 15小时过去了,它仍在工作。当我在这个表上写一个选择查询时,它什么也没显示。我不知道每次插入时我插入的数据在哪里。
所以我的问题是,有没有办法检查在 oracle 表中执行长时间运行插入时插入了多少行,谢谢。
【问题讨论】:
这取决于您是在SQL 还是PL/SQL 中进行插入。在使用PL/SQL 时,您有自己的方法来获取已处理的行数,当然您也可以编写自己的程序。
来到SQL,我能想到两种方法:
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;
【讨论】: