IMP导入时遭遇oracle等待事件single-task message

朋友在进行IMP导入时,遇到这样的情况,在表及数据导入完成的位置,imp导入工具停止响应.等了半小时以上,所以无奈之下只好强行结束.结果发现,存储过程已经被导入了,但触发器和包都没有被导入.
此前,我们也遇到过类似现象.大多是由imp工具与目标库版本不匹配所致.所以,先从这方面检查,dmp文件是由11.2版本的exp导出的,使用的imp也是11.2的,目的库版本11.2.0.1,所以,这方面没问题.
一筹莫展之时,只好使用带ignore=y rows=n参数的imp重新再导入,导入停止响应的同时,查看等待事件.
查看的结果是,等待事件single-task message
对于这个等待事件,oracle的解释是:
When running single task, this event indicates that the session waits for the client side of the executable.
而现在imp操作,就是在服务器本机进行的.并没有服务端/客户端的嫌疑.
按等待事件,查阅网上相关资源来看,遭遇此等待事件多数是在编译无效对象的时候,而且是无效对象中包含数据库链接的使用.
这个线索给了我们启发.恰好,我们导出的原始环境也建有数据库链接,而且存储过程中使用了链接.所以联想到imp导入表和数据之后,正是需要对对象进行编译.
所以,先把目的数据库链接删除,然后,再进行带ignore=y rows=n参数的imp操作,结果发现,还是会停止响应,再去看数据库链接,又被建上了.
最终的解决,就是导入的过程中,用另一个会话连上库,将刚导入创建上的数据库链接予以删除,使imp导入过程继续向下进行.这样导入成功.
请使用浏览器的分享功能分享到微信等