expdp/impdp 挂起处理

来源:互联网 发布:域名代理商哪个好 编辑:程序博客网 时间:2024/06/05 04:40

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;

 

 

 

0 0