我们在 11.1.0.7 数据库上使用 Oracle 的 ORDCOM 基础架构与 COM 对象进行交互。COM 对象不对数据库做任何事情。这个过程已经运行了好几年。
今天,我创建了一个 Oracle Wallet 并为 sys 添加了凭据,以便我拥有的脚本可以使用“/@coredev as sysdba”登录,而不是以明文形式存储用户名和密码。
问题是,只要我将“SQLNET.WALLET_OVERRIDE = TRUE”行添加到 sqlnet.ora 文件,ORDCOM OACreate 调用就会引发 ORA-28578:从外部过程回调期间的协议错误。我在数据库之外有一个程序可以测试 COM 对象并继续正常工作。一旦我在 sqlnet.ora 中注释掉该行,一切正常,但我当然不能再使用钱包了。
Oracle 通过内部测试用例重现了这个问题,并为此创建了一个错误。解决方法是为钱包使用单独的 sqlnet.ora/tnsnames.ora,将 TNS_ADMIN 环境变量设置为备用文件的路径。