如何重新编译使用 Oracle 10g 的 Wrap 实用程序加密的无效 PLSQL 包?
Posted
技术标签:
【中文标题】如何重新编译使用 Oracle 10g 的 Wrap 实用程序加密的无效 PLSQL 包?【英文标题】:How to recompile invalid PLSQL packages that have been encrypted using Oracle 10g's Wrap utility? 【发布时间】:2011-10-24 11:03:04 【问题描述】:所以我从 Oracle 10g 模式中导出(使用数据泵),其中所有 PLSQL 包都使用 Oracle 的 Wrap 实用程序加密。问题是当我将它导入新模式时,我的所有包都无效,并且尝试手动编译不起作用。
SQL> ALTER PACKAGE mypackage compile;
Warning: Package altered with compilation errors.
SQL> show errors
Errors for PACKAGE MYPACKAGE:
LINE/COL ERROR
-------- -----------------------------------------------------------------
36/2 PLS-00103: Encountered the symbol "2"
那么重新编译所有这些无效包的解决方案是什么?
【问题讨论】:
导入的数据库是否与源数据库不同? @tbone 是的,我相信这是一个略有不同的版本,但我的一位同事告诉我,它也发生在同一个版本之间。事实上,显然这是 Oracle 中的一个已知错误。虽然仍然没有给我一个解决方案。 :-( 我认为 wrap 不向下兼容(即,不能从较高级别导出并导入较低级别的版本)。这就是为什么我还是问了。此外,我认为 10g 中存在与包装包和数据泵相关的已知错误。你有最新的补丁吗? @tbone 谢谢你。不,我们没有此特定系统的最新补丁。 【参考方案1】:尝试使用系统DBMS_UTILITY.COMPILE_SCHEMA
过程来编译您的架构对象。此过程将确定编译对象的顺序,甚至处理循环依赖关系。在脚本模式构建之后,调用清理是一个很好的过程。
BEGIN
DBMS_UTILITY.COMPILE_SCHEMA('MYSCHEMA');
END;
/
我很想知道它处理包裹对象的能力。
【讨论】:
@BrianFenton:感谢您的反馈,很高兴知道。我很好奇它是否能解决这个问题。【参考方案2】:因此,对于这个问题似乎没有“修复”,只有变通办法,没有一个是理想的。
-
使用旧的 exp 和 imp 程序(而不是数据泵)重做导出和导入
如果您有包含包定义的 .SQL 文件,您可以在 SQL*Plus 中手动编译它们(可能有数千个文件,这很重要)。
您可以修补数据库(请参阅 Metalink 文章 460267.1)
【讨论】:
以上是关于如何重新编译使用 Oracle 10g 的 Wrap 实用程序加密的无效 PLSQL 包?的主要内容,如果未能解决你的问题,请参考以下文章