ALTER PACKAGE "PROC_BUSINESS" COMPILE REUSE 和 ORA-07445: exception encountered: core dump
IMP-00017: following statement failed with ORACLE error 3113:
"ALTER PACKAGE "PROC_BUSINESS" COMPILE REUSE SETTINGS TIMESTAMP '2012-04-23:"
"11:58:58'"
IMP-00003: ORACLE error 3113 encountered
ORA-03113: end-of-file on communication channel
IMP-00000: Import terminated unsuccessfully
问题描述:
exp数据库: oracle 10.2.0.1 for linux
Imp 数据库: oracle 10.2.0.4 for windows 7
Client : oracle 10.2.0.1 for windows 7
操作步骤:从client机器上执行 EXP 导出用户,然后在client 机器上IMP 导入用户。但是报错很郁闷的ORA-3113
因为这个报错原因太多了,需要一点一点解决。但是报错前面出现了一个包的名字 很扎眼啊。
解决问题思路:
1、 版本问题。我想了一想从低版本EXP 到高版本IMP一般都是没有问题的。为什么我会出现这个问题呢。
2、 Create table。是不是这个问题呢,然后尝试了多次不是这个问题。(尝试删除用户cascade 重新导入,ignore参数等的使用)
3、 编译问题。因为IMP的过程中会重新编译所有的程序包包,储存过程,函数。如果有错误也会导致IMP失败。
基本思路是这样样子,但是由于本人对EXP ,IMP 还不是十分了解很多参数也不是十分了解。所以解决问题的时候只有边做边学习了。
对于exp 不了解,直接EXP HELP=Y 看了一看,基本了解。
对于imp不了解,直接IMP HELP=Y看了一看,基本了解。
实施解决问题:
1、 仔细的按照自己的想法从低版本到高版本操作。
结果:失败。
2、尝试使用IGNORE参数,多次导入。
结果:失败。
3、导入忽略编译compile=y,成功导入,但是有警告。
结果:成功。
看样是我们有些程序包,编译过程出现了错误,导致我们IMP失败。没有关系了数据导入进入,程序包,我们看样慢慢解决。导入成功后,看了一下有几个程序包是无效的,看了一看是因为导入用户没有这些表的权限。然后把查看这些表的权限给了这个用户。我们的程序包也看样使用。
总结:我们这次遇到的问题主要是因为IMP需要对程序包,储存过程,函数重新编译,如果由于某种原因不能编译,最后也导致我们导入失败。
而且这个IMP 编译失败,导致IMP失败,还是很有趣。让我们在alert 日志中看到了:
ORA-07445: exception encountered: core dump [ACCESS_VIOLATION] [ptmak+420] [PC:0x622EBF4] [ADDR:0x10] [UNABLE_TO_READ] []
ORA-07445: exception encountered: core dump这个也是一个问题:
07445, 00000, "exception encountered: core dump [%s] [%s] [%s] [%s] [%s] [%s]"
// *Cause: An OS exception occurred which should result in the creation of a
// core file. This is an internal error.
// *Action: Contact your customer support representative.
07445,00000,“例外遇到:核心转储[%][%][%][%][%][%S]”
/ /*原因:操作系统异常发生,这将导致在创造一个
//核心文件。这是一个内部错误。
/ / *操作:联系您的客户支持代表。
没有问题我们明确的解决方式:回想了一些我们的操作我们只是IMP,而且这个错误只是出现了我们导入的时间内出现这个错误。所以指定这个问题可能是由于我们IMP导入出现的。我们IMP错误的根本原因是编译错误。所以这个错误也有可能是编译时候出现的错误。
总结:IMP的编译错误也会导致 ORA-7445错误。有时候我们遇到像ORA-600 ,ORA-7445这样的问题不要慌,找找原因,想想数据库的操作。oracle 给我们提示错误,不一定就是根本原因。所以问题要综合考虑!