ddevienne
ddevienne

Reputation: 1882

Issue with CQN registration getting dropped implictly

Using custom C++ OCI wrappers, I can successful register a CQN C++ callback-based registration, but it appears that somehow the subscription is dropped right away, behind my back. I get no call back on simple DMLs. If I try to unregister that subscription, for which register() worked just fine, I get ORA-29970: Specified registration id does not exist.

I'm running this test on a Win7 (64-bit) box, running a local 11.2.0.1.0 Oracle Server, and I connect with a C++ client app built against instantclient-11.2.0.2.0 that runs on that same machine.

I'm running out of ideas on this issue, and I would appreciate some insights on what else I could try or check.

I'm starting to wonder if CQN needs to be activated somehow. My DBA skills are close to nonexistent, this is a stock install of 11gR1 on Windows using the installer, with no special configurations or customization done at all.

Thanks, --DD

Update #1

A colleague successfully ran that same test, and he ran it using the server-provided oci.dll. I tried that (I build using instantclient, but forced the PATH at runtime: Path=D:\oracle\product\11.2.0\dbhome_1\BIN;$(Path) in VS Property Page> Debugging> Environment), and indeed the CQN test works! We still haven't figured out whether the slight version difference between client and server, or using instantclient (the Light variant by the way) vs a full client vs a server install is the real culprit.

But it is bad news that a newer instantclient does not support CQN...

Update #2

I've tried all 6 combinations of instantclient Light (65 MB) or Normal (150 MB) in versions 12.2.0.(1|2|3).0 on Win64, and none of them worked. Haven't tested the Full Client yet, nor have we tested on Linux just yet.

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;
}

Upvotes: 1

Views: 428

Answers (1)

Martin M&#252;ller
Martin M&#252;ller

Reputation: 1

I recently came across a similar issue described in my post "Not getting OCI change notification callback for CQN over Instant Client (11gR2)". I do not have an answer to your post yet, since I am still looking for a solution myself. However, the descriptions in my post may give you an additional perspective to the problem.

Upvotes: 0

Related Questions