我有一个简单的实用程序,它使用“旧” olog()方法连接到Oracle数据库。我按照here中所述使用它。

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

崩溃发生在Oracle的libclntsh内部。

该代码是根据client-8附带的演示编写的,但是客户端12附带的唯一演示根本不使用olog()-显然,OCIEnvCreate()和朋友是“未来的潮流”。

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

更新:我在调用opinit(OCI_EV_DEF);之前添加了一个调用olog(),并且该程序现在不再挂在后者内,而不会崩溃。

更新2:挂起是由于OCI尝试操作(和锁定!)~/oradiag_foo下的内容,而该内容恰好是NFS共享。配置完后,通过~/.sqlnet.ora改为使用/tmp/,很快就会崩溃。

最佳答案

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

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

关于c - 如何调用Oracle的olog()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48999084/

10-10 14:11