导出 Oracle 数据库,将其导入其他用户,存储过程不起作用

Posted

技术标签:

【中文标题】导出 Oracle 数据库,将其导入其他用户,存储过程不起作用【英文标题】:Export an Oracle database, import it to a different user, stored procedures don't work 【发布时间】:2010-01-06 15:43:32 【问题描述】:

我使用

导出一个预言机“模式”
exp userid=/ file=pt.dmp log=pt.log owner=FOO buffer=10000000 statistics=NONE direct=Y

然后使用

将其导入到同一 SID 上同一 oracle 实例上的不同模式中
imp userid=/ file=pt.dmp fromuser=FOO touser=paul

当我尝试使用新用户访问存储过程时,我得到了

ORA-29541: class PAUL.ESMQOracleStoredProc could not be resolved

知道为什么一个用户可以解决这个问题而另一个用户不能吗?

【问题讨论】:

此错误消息表示缺少或无法访问 JAVA 存储过程。快速浏览一下您的命令行似乎表明您正在使用正确的参数(exp 为 owner,imp 为 fromuser)。由于该消息抱怨目标用户的对象,因此它也不是硬编码的限定过程名称。我唯一能想到的是,不知何故,保罗没有创建 java 存储过程的特权,但是我猜你在使用 imp 时会注意到.. @Roland,我确保用户 PAUL 是使用“授予 PAUL 的创建过程”创建的,事实上,我使用了与创建 FOO 相同的脚本。 在用户 FOO 中检查是否有任何存储过程不属于 FOO。公共同义词很容易产生这种效果。 【参考方案1】:

错误消息表明这是一个java 存储过程。所以它需要java权限。 CREATE PROCEDURE 特权不会涵盖它。对于初学者来说,FOO 也需要JAVAUSERPRIV,所以也许这就是 PAUL 所缺乏的?

此外,如果该 JSP 做了任何深奥的事情,它将需要通过 dbms_java.grant_permission() 授予的额外权限。您可以通过使用the DBA_JAVA_POLICY view 比较 PAUL 和 FOO 的授予权限来发现这一点。

【讨论】:

DBA 告诉我 Java 存储过程在“FOO”用户下编译,而不是在“PAUL”用户下编译。幸运的是,我们已经消除了对 Java 存储过程的需求,所以我没有进一步研究它。

以上是关于导出 Oracle 数据库,将其导入其他用户,存储过程不起作用的主要内容,如果未能解决你的问题,请参考以下文章

oracle怎么把数据导入导出啊

oracle 导入数据库

oracle创建用户授权导入导出命令总结

6数据泵导入导出操作

oracle 导入DMP文件时IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件

oracle 仅导出和导入用户及其角色