这个问题有解决方案,我参考了其他文章后写了一个手记,放在itpub上了,但是这次操作的时候,发现上次漏掉了一点,特别容易导致执行catpathc.sql失败!
原因是要在执行catpatch.sql文件的时候,要放大oracle的参数:java_pool_size和share_pool_size,太小容易在执行过程中发生错误,会提示你java_pool_size过小导致错误,虽然当时继续执行,可是执行是不完全的,exp最终还是不能使用。
我放大了参数,原来指定的java_pool_size是50M,现在放到150M,总可以了吧。重新执行catpathc.sql,还是同样错误?
Why??
查了半天资料,都说放大参数就可以了啊,真奇怪!
我改的是init.ora,为什么不行那?在看dbs目录下的参数文件的时候,突然发现有个spfile的文件,打开一看,二进制的,但是部分参数还可以看到,结果发现java_pool_size还是50M,原来如此啊!
查资料才知道9i现在开始用spfile做参数文件了,是由init.ora生成的,安装数据库的时候指定的参数自动生成spfile,以后只更改init.ora是无效的。
我参考了Itpub的电子杂志的一篇文章,eygle写的,很详细的介绍了spfile的使用,非常喜欢,收藏了起来。在这里我放在资源中心了,mht格式的。
可以在启动后更改spfile的参数值,但是sga的值不能变,只有启动前更改。我用的是先改init.ora,然后重新生成spfile的办法,然后重新执行catpathc.sql,虽然很费时间,最后总算正常结束了,测试exp,OK了!
改参数的时候,容易出现一个错误,就是放的太大,结果不让启动数据库,原因是linux的核心kernel有个shmmax参数,装9i的时候要放大的,一般我内存512M的时候,我设置成512M,oracle的sga最大不能超过时间shmmax的值,所以在配sga的时候,要均衡考虑一下内存的分配。