嗨 我们有一个基于 Oracle 的第三方应用程序,附带预编译的二进制(包装)包。 但是当我在 Oracle SQL Developer 中编译它们时(右键单击 -> 全部编译),它们就会失效。
重新编译是一个安全的操作,没有副作用吗?
最佳答案
主要的副作用是,如果您编译另一个包所依赖的包,则您可能会面临使任何现有 session 的依赖包无效的风险 - 即使编译没有错误。这对于 session 生命周期较短的应用程序来说很好,但对于 session 生命周期较长的应用程序来说这是一个问题。如果您在 JDBC 中使用连接池,则缓存的 session 将长期存在并且可能会失效。您必须刷新缓存的 session 以避免错误。
您要查找的错误是“ORA-04068:包的现有状态已被丢弃”。
参见here了解更多信息。
特别是对于 SQL Developer - 它不能很好地处理包装包的重新编译。如果您要重新编译它们,请尝试其他工具,例如 TOAD 或 PL/SQL Developer,或在 SQL Plus 命令行中使用“alter package”命令。
关于oracle - 重新编译 Oracle Packages 安全吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3823932/