我有一个简单的实用程序,它使用连接到Oracle数据库的“旧”olog()方法。如here所述,我使用它。
这在Oracle 8中非常好,但是当与客户端版本11和12一起使用时会崩溃( SIGSEGV)。服务器运行11c,在所有情况下都是相同的。
这起坠机事件在甲骨文的libclntsh内部很深。
代码是基于client-8附带的演示编写的,但是客户机12中包含的唯一演示程序根本不使用olog() --显然,OCIEnvCreate()和朋友是“未来的浪潮”。
我不想重写我的实用程序--有什么简单的方法可以通过在初始化中添加一两个步骤来继续使用olog()吗?
更新:我在调用opinit(OCI_EV_DEF);之前添加了一个调用olog(),而不是崩溃,程序现在挂在后者中.
更新2:挂起是由于OCI试图操作(并锁定!)~/oradiag_foo下的东西,这恰好是NFS的份额。在配置它之后,通过~/.sqlnet.ora使用/tmp/代替,很快就会崩溃。
发布于 2018-04-03 18:33:03
好的,原来我碰到的内存损坏是在我的代码中的其他地方(谢谢,val差尔!)
我很高兴地报告,旧的方法仍然很好,不需要重写。我在问题中引用的example仍然有效。
发布于 2018-02-27 02:01:13
我只能鼓励您使用OCI8 API重写(该API是在1998年左右引入的)。OCI8上有新的包装器,可以使简单的任务变得更容易。见甲骨文的https://oracle.github.io/odpi/和文森特·罗吉尔的https://github.com/vrogier/ocilib
https://stackoverflow.com/questions/48999084
复制相似问题