合 在Oracle中,如何彻底停止expdp或impdp进程?
Tags: Oracle故障处理数据泵杀会话expdpimpdp杀进程
许多同事在使用expdp或impdp命令时,不小心按了CTRL+C组合键,然后又输入exit命令(或者网络中断等异常现象),导致expdp或impdp进程不存在,但Oracle数据库的会话仍存在,所以dmp文件也一直在增长(或数据一直在导入到数据库中)。
处理过程
在这种情况下的处理办法如下所示:
1、检查expdp进程是否还在
1 2 | ps -ef | grep expdp ps -ef | grep impdp |
若存在,则可用kill -9 process命令杀掉expdp或impdp的进程。
2、杀会话、删表
检查会话是否仍存在,若存在则把相关的会话杀掉(注意:先使用命令“ALTER SYSTEM KILL SESSION '22,33' immediate;”在数据库级别杀掉会话,然后在OS级别使用kill -9杀掉进程),如无杀会话的权限则可以将相关的表DROP掉,表名可以使用如下的SQL来查询:
1 2 3 4 5 6 7 8 9 10 | -- pdb或非cdb SELECT * FROM DBA_DATAPUMP_SESSIONS; SELECT * FROM DBA_DATAPUMP_JOBS; SELECT 'drop table '||d.OWNER_NAME||'.'||JOB_NAME||' purge;' FROM DBA_DATAPUMP_JOBS d where STATE='NOT RUNNING'; -- cdb查询 SELECT * FROM CDB_DATAPUMP_SESSIONS; SELECT * FROM CDB_DATAPUMP_JOBS; |
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | SYS@orclasm > SELECT * FROM DBA_DATAPUMP_SESSIONS; OWNER_NAME JOB_NAME INST_ID SADDR SESSION_TYPE ---------- ------------------------- ---------- ---------------- -------------- LHR SYS_EXPORT_SCHEMA_04 1 00000000A8B71D98 MASTER LHR SYS_EXPORT_SCHEMA_04 1 00000000AB98AFC8 WORKER SYS@orclasm > DROP TABLE LHR.SYS_EXPORT_SCHEMA_04 PURGE; Table dropped. SYS@orclasm > SELECT * FROM DBA_DATAPUMP_SESSIONS; no rows selected SYS@orclasm > SELECT * FROM DBA_DATAPUMP_JOBS; no rows selected |
使用相同的办法也删除从视图DBA_DATAPUMP_JOBS中查询出来的表,直到2个视图无记录。
3、删除导出的dmp文件。
如不删除,则重新执行expdp命令时,会报dmp文件已存在。
使用kill_job停止
如果没有退出expdp或impdp会话,则可以输入kill_job来直接停止导出导入进程也是可以的。