如何调用Oracle的olog()?

时间:2018-02-27 00:06:14

标签: c oracle oci

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

这与Oracle客户端8完全正常,但与客户端版本11和12一起使用时,崩溃(带SIGSEGV)。服务器运行11c并且在所有情况下都相同。

崩溃深入Oracle的libclntsh

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

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

更新:我在调用opinit(OCI_EV_DEF);之前添加了一个电话olog(),而不是崩溃,程序现在挂在后者内部......

Update 2 :挂起是由于OCI试图在~/oradiag_foo下运行(和锁定!)的东西,这恰好是一个NFS共享。配置后,通过~/.sqlnet.ora使用/tmp/代替,快速恢复崩溃。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:-1)

我只能鼓励你使用OCI8 API(1998年或之后推出)进行重写。 OCI8周围有更新的包装器,可以简化任务。请参阅Oracle的https://oracle.github.io/odpi/和Vincent Rogier的https://github.com/vrogier/ocilib