我们从一个Oracle数据库中复制大表,并将它们合并到另一个数据库中。因此,我们有非常长的插入语句。
我想知道是否已经处理了许多行。我知道Oracle可以做到这一点,因为PL/SQL Developer可以在HTML报告中显示统计数据。
我尝试了以下SQL:
-- currently executing SQLs
select sm.SID, sm.SQL_ID, sm.STATUS, sm.SQL_TEXT, sm.LAST_REFRESH_TIME, sm.FIRST_REFRESH_TIME,
sp.OPERATION, sp.TIMESTAMP, sp.CARDINALITY as EST_ROWS,
sp.OBJECT_OWNER, sp.OBJECT_NAME, sp.OBJECT_TYPE, sp.COST, sp.BYTES, sp.CPU_COST
from V$SQL_MONITOR sm
inner join V$SQL_PLAN sp
on sm.SQL_ID = sp.SQL_ID
where sm.STATUS = 'EXECUTING'
order by sm.LAST_REFRESH_TIME desc, sp.DEPTH;
我已经尝试过字段V$SQLSTATS.ROWS_PROCESSED
、V$SESSTAT.VALUE
(STATISTIC#=308),但没有显示当前处理的行数。
有人知道在Oracle11g中如何确定特定SQL语句当前处理的行数吗?
提前谢谢。
请参阅上面的评论,这里有一个来自www.dba-oracle.com的示例,显示了迄今为止完成的工作量:
select
sid,
message
from
v$session_longops
where
sid = 13
order by
start_time;
下面是一个输出示例,显示了长时间运行的CREATEINDEX语句的进度。
SID MESSAGE
--- -------------------------------------------------------------------
11 Table Scan: CUST.PK_IDX: 732 out of 243260 Blocks done