CQC注册的问题被隐式删除

时间:2013-02-15 18:29:20

标签: c++ oracle oci query-notifications

使用自定义C ++ OCI包装器,我可以成功注册基于CQN C ++回调的注册,但似乎不知何故立即删除了订阅,在我背后。我没有回复简单的DML。如果我尝试取消注册该订阅,对于哪个register()工作正常,我得到 ORA-29970:指定的注册ID不存在

我正在运行本地11.2.0.1.0 Oracle Server的Win7(64位)盒子上运行此测试,并且我连接了一个针对运行于的Instantclient-11.2.0.2.0构建的C ++客户端应用程序那台机器。

  • 我尝试将 OCI_ATTR_SUBSCR_TIMEOUT 明确设置为0,但无济于事。
  • 我检查了 job_queue_processes 实例参数,以确保它不是0(它是1000)。
  • 当然,我正在连接的用户/架构已被授予更改通知

我对这个问题的想法已经不多了,我会很感激我可以尝试或检查的其他一些见解。

我开始怀疑CQN是否需要以某种方式激活。我的DBA技能几乎不存在,这是使用安装程序在Windows上进行11gR1的库存安装,根本没有特殊配置或自定义。

谢谢, - DD

更新#1

一位同事成功运行了同样的测试,并使用服务器提供的oci.dll运行它。我尝试过(我使用instantclient构建,但在运行时强制使用PATH:在VS Property Page> Debugging> Environment中Path=D:\oracle\product\11.2.0\dbhome_1\BIN;$(Path)),实际上CQN测试正常工作!我们还没有弄清楚是否客户端和服务器之间的轻微版本差异,或使用instantclient(顺便说一句 Light 变体)与完整客户端vs服务器安装是真正的罪魁祸首。

但是较新的 instantclient不支持CQN是坏消息......

更新#2

我在版本12.2.0中尝试了所有6种instantclient Light (65 MB)或 Normal (150 MB)的组合。(1 | 2 | 3)在Win64上的.0,并没有一个工作。尚未测试完整客户端,我们还没有在Linux上测试过。

Environment_var cqn_env = Environment::create(OCI_EVENTS + OCI_OBJECT);
Connection_var cqn_conn = Connection::logon2(...);
Subscription sub(cqn_conn, "cqn_test", OCI_SUBSCR_NAMESPACE_DBCHANGE);
sub.set<attr::SUBSCR_CALLBACK>( &cqn_callback_func );
sub.set<attr::SUBSCR_CQ_QOSFLAGS>( OCI_SUBSCR_CQ_QOS_QUERY );

try {
    sub.register_self();
} catch (const OracleException& ex) {
    BOOST_REQUIRE(ex.error_code && *ex.error_code == 29972);
    cerr << "\nSKIPPED: test requires CHANGE NOTIFICATION privilege" << endl;
    return;
}

0 个答案:

没有答案