如何调用Oracle的olog()?

How to call Oracle's olog()?

我有一个简单的实用程序,它使用 "old" olog() 方法连接到 Oracle 数据库。我按照 here.

中的描述使用它

这在 Oracle 客户端 8 上工作得很好,但在与客户端版本 11 和 12 一起使用时 崩溃 SIGSEGV)。服务器运行 11c,是在所有情况下都相同。

崩溃在 Oracle 的 libclntsh 深处。

代码是根据客户端 8 附带的演示编写的,但客户端 12 附带的唯一演示根本没有使用 olog()——显然,OCIEnvCreate() 和朋友是 "wave of the future".

我不想重写我的实用程序 -- 是否有一些简单的方法可以通过简单地在初始化中添加一两个步骤来继续使用 olog()

Update:我在调用 olog() 之前添加了一个调用 opinit(OCI_EV_DEF);,现在程序没有崩溃,而是挂在了后者中......

更新 2:挂起是由于 OCI 试图操作(并锁定!)~/oradiag_foo 下的东西,这恰好是一个 NFS 共享。配置后,通过 ~/.sqlnet.ora 改为使用 /tmp/,我很快又崩溃了。

我只能鼓励您使用 OCI8 API(在 1998 年左右引入)重写。 OCI8 周围有更新的包装器,可以使简单的任务更容易。参见 Oracle 的 https://oracle.github.io/odpi/ and Vincent Rogier's https://github.com/vrogier/ocilib

好的,事实证明,我遇到的内存损坏是在我的代码中的其他地方(感谢 valgrind!)

我很高兴地报告,旧方法继续正常工作,无需重写。我在问题中引用的 example 仍然有效。