导出 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 数据库,将其导入其他用户,存储过程不起作用的主要内容,如果未能解决你的问题,请参考以下文章