job掛起處理
expdp/impdp 掛起處理
現象:在執行expdp或者是impdp時,往往會出現導入表成功,但是在Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX或者其他地方掛起
處理方法:
1、檢查alert日誌
2、檢查主機資源 top(內存) + df -h
3、查看錶空間使用率
4、確定等待事件
select sid,serial#,username,program,sql_id,event,p1,p2,p3 from v$session s, dba_datapump_sessions d where s.saddr = d.saddr;
依據等待事件進一步分析
常見的等待事件:
1)、statement suspended, wait error to be cleared
一般是由表空間不足,此時增加datafile,等待事件消失,但是仍然會報錯。
解決方法是:重新導入
2)、Streams AQ: enqueue blocked on low memory 與wait for unread message on broadcast channel等待
通過調整streams_pool_size解決(該參數爲SGA動態調整,但在執行expdp時,未能變化,默認爲0,導致內存不足而掛起)
SQL> show parameter streams
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
streams_pool_size big integer 0
SQL> alter system set streams_pool_size=200M scope=memory;
expdp/impdp涉及到一個參數:
SQL> SELECT SESSION_ID, STATUS, TIMEOUT, SUSPEND_TIME, RESUME_TIME, ERROR_NUMBER from DBA_RESUMABLE;
SESSION_ID STATUS TIMEOUT SUSPEND_TIME RESUME_TIME ERROR_NUMBER
---------- --------- ---------- -------------------- -------------------- ------------
2140 SUSPENDED 7200 03/06/12 14:07:17 1659
1999 NORMAL 7200 0
查看resumable特性:
在dba_resumable表中可以查詢到resumable_timeout的值
SQL> show parameter timeout
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
ddl_lock_timeout integer 0
distributed_lock_timeout integer 60
log_checkpoint_timeout integer 1800
resumable_timeout integer 0
雖然查看到timeout=0,但是在視圖中可以看到還是7200
SQL> SELECT SESSION_ID, STATUS, TIMEOUT, SUSPEND_TIME, RESUME_TIME, ERROR_NUMBER from DBA_RESUMABLE;
SESSION_ID STATUS TIMEOUT SUSPEND_TIME RESUME_TIME ERROR_NUMBER
---------- --------- ---------- -------------------- -------------------- ------------
2140 NORMAL 7200 03/06/12 14:15:02 0
1999 NORMAL 7200
10g導入的時候,有可能造成system表空間不足,Bug發生在導入表的統計信息處,解決bug可能很困難,繞過bug,使用EXCLUDE=TABLE_STATISTICIS
select * from dba_datapump_jobs t where t.owner_name like 'XXXX' and t.state='EXECUTING';
STATE:正常導入的狀態是executing,而掛起是的狀態是DEFINING
查詢導入導出進程
select dds.owner_name,dds.job_name,dds.saddr,dds.session_type,vs.sid,vs.serial#,vp.spid from dba_datapump_sessions dds,v$session vs,v$process vp where dds.saddr=vs.saddr and vs.paddr=vp.addr;
如果狀態全爲not running則可以直接drop;如果狀態不爲not running,則需要找出相應的操作系統進程 ,並進行kill;
SQL> drop table SYS_EXPORT_SCHEMA_01 purge;
如果系統還有非LOCAL=NO的連接,且時間都超過幾天了,一般都是異常的進程,建議查清楚後KILL掉
ps -ef | grep oracleprod | grep -v LOCAL=NO | grep -v grep
查詢對應的sql
select a.username,a.sid,a.serial#,c.piece,c.sql_text
from v$session a,v$sqltext c
where a.sql_address = c.address
and a.sql_hash_value = c.hash_value
and (a.sid,a.serial#) in (select a.sid,a.serial# from v$session a, v$process b where a.paddr=b.addr and b.spid = &spid )
order by a.sid,a.serial#,c.piece;
現象:在執行expdp或者是impdp時,往往會出現導入表成功,但是在Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX或者其他地方掛起
處理方法:
1、檢查alert日誌
2、檢查主機資源 top(內存) + df -h
3、查看錶空間使用率
4、確定等待事件
select sid,serial#,username,program,sql_id,event,p1,p2,p3 from v$session s, dba_datapump_sessions d where s.saddr = d.saddr;
依據等待事件進一步分析
常見的等待事件:
1)、statement suspended, wait error to be cleared
一般是由表空間不足,此時增加datafile,等待事件消失,但是仍然會報錯。
解決方法是:重新導入
2)、Streams AQ: enqueue blocked on low memory 與wait for unread message on broadcast channel等待
通過調整streams_pool_size解決(該參數爲SGA動態調整,但在執行expdp時,未能變化,默認爲0,導致內存不足而掛起)
SQL> show parameter streams
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
streams_pool_size big integer 0
SQL> alter system set streams_pool_size=200M scope=memory;
expdp/impdp涉及到一個參數:
SQL> SELECT SESSION_ID, STATUS, TIMEOUT, SUSPEND_TIME, RESUME_TIME, ERROR_NUMBER from DBA_RESUMABLE;
SESSION_ID STATUS TIMEOUT SUSPEND_TIME RESUME_TIME ERROR_NUMBER
---------- --------- ---------- -------------------- -------------------- ------------
2140 SUSPENDED 7200 03/06/12 14:07:17 1659
1999 NORMAL 7200 0
查看resumable特性:
在dba_resumable表中可以查詢到resumable_timeout的值
SQL> show parameter timeout
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
ddl_lock_timeout integer 0
distributed_lock_timeout integer 60
log_checkpoint_timeout integer 1800
resumable_timeout integer 0
雖然查看到timeout=0,但是在視圖中可以看到還是7200
SQL> SELECT SESSION_ID, STATUS, TIMEOUT, SUSPEND_TIME, RESUME_TIME, ERROR_NUMBER from DBA_RESUMABLE;
SESSION_ID STATUS TIMEOUT SUSPEND_TIME RESUME_TIME ERROR_NUMBER
---------- --------- ---------- -------------------- -------------------- ------------
2140 NORMAL 7200 03/06/12 14:15:02 0
1999 NORMAL 7200
10g導入的時候,有可能造成system表空間不足,Bug發生在導入表的統計信息處,解決bug可能很困難,繞過bug,使用EXCLUDE=TABLE_STATISTICIS
select * from dba_datapump_jobs t where t.owner_name like 'XXXX' and t.state='EXECUTING';
STATE:正常導入的狀態是executing,而掛起是的狀態是DEFINING
查詢導入導出進程
select dds.owner_name,dds.job_name,dds.saddr,dds.session_type,vs.sid,vs.serial#,vp.spid from dba_datapump_sessions dds,v$session vs,v$process vp where dds.saddr=vs.saddr and vs.paddr=vp.addr;
如果狀態全爲not running則可以直接drop;如果狀態不爲not running,則需要找出相應的操作系統進程 ,並進行kill;
SQL> drop table SYS_EXPORT_SCHEMA_01 purge;
如果系統還有非LOCAL=NO的連接,且時間都超過幾天了,一般都是異常的進程,建議查清楚後KILL掉
ps -ef | grep oracleprod | grep -v LOCAL=NO | grep -v grep
查詢對應的sql
select a.username,a.sid,a.serial#,c.piece,c.sql_text
from v$session a,v$sqltext c
where a.sql_address = c.address
and a.sql_hash_value = c.hash_value
and (a.sid,a.serial#) in (select a.sid,a.serial# from v$session a, v$process b where a.paddr=b.addr and b.spid = &spid )
order by a.sid,a.serial#,c.piece;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.