1. 程式人生 > >如何監控Expdp/Impdp會話進度

如何監控Expdp/Impdp會話進度

有時候由於expdp匯出的資料量太大,而會話不小心關閉了,如何檢視expdp進度如何?通過下面兩個檢視可以檢視到關於expdp工作的進度和相關資訊:
1、檢視正在執行的job:
SELECT * FROM DBA_DATAPUBMP_JOBS;
SELECT * FROM DBA_DATAPUMP_SESSIONS;
SELECT SID,SERIAL# FROM V$SESSION S,DBA_DATAPUMP_SESSIONS D WHERE S.SADDR=D.SADDR;
SELECT   SID,
         SERIAL#,
         S.SADDR,
         S.PROGRAM,
         S.USERNAME,
         S.STATUS,
         S.SQL_ID,
         SQL.SQL_FULLTEXT
  FROM   V$SESSION S, DBA_DATAPUMP_SESSIONS D, V$SQLAREA SQL
 WHERE       S.SADDR = D.SADDR
         AND S.SQL_ADDRESS = SQL.ADDRESS
         AND S.SQL_ID = SQL.SQL_ID;

2、使用attach引數:
1)檢視任務進度
當你使用crontab後臺任務執行匯入匯出任務的時候,想檢視任務進度,該引數很有用,可以讓你再次連線到已經斷開的會話中,再次接管匯出或匯入的任務,當然你得先用前面2個檢視查到jobname。
2)中途想停止crontab後臺任務
假如之前後臺任務的指令碼中,有類似命令:

expdp system/xxx  DIRECTORY=DATA_PUMP_DIR2  parallel=32  DUMPFILE=xxxx-%U.dmp  filesize=50G  LOGFILE=xxx.log SCHEMAS=xxx  job_name=lurou.exp

此時你可以使用如下命令重新連線任務,並達到提前終止任務的目的:

expdp system/xxx  attach=lurou.exp

3、 v$session_longops
另也可以通過v$session_longops檢視來監控長期執行的會話。


4、通過語句檢視impdp進度
SELECT  a.tablespace_name,
        ROUND (a.total_size) "total_size(MB)",
        ROUND (a.total_size) - ROUND (b.free_size, 3) "used_size(MB)",
        ROUND (b.free_size, 3) "free_size(MB)",
        ROUND (b.free_size / total_size * 100, 2) || '%' free_rate
  FROM  (  SELECT  tablespace_name, SUM (bytes) / 1024 / 1024 total_size
              FROM  dba_data_files
          GROUP BY  tablespace_name) a,
        (  SELECT  tablespace_name, SUM (bytes) / 1024 / 1024 free_size
              FROM  dba_free_space
          GROUP BY  tablespace_name) b
 WHERE  a.tablespace_name = b.tablespace_name(+);


另外,還可以使用檢視v$session_longops檢視RMAN備份進度
SELECT SID,OPNAME, SERIAL#, CONTEXT, SOFAR, TOTALWORK,
ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
FROM V$SESSION_LONGOPS
WHERE OPNAME LIKE 'RMAN%'
AND OPNAME NOT LIKE '%aggregate%'
AND TOTALWORK != 0
AND SOFAR <> TOTALWORK
order by "%_COMPLETE" 
desc
---------------------