c# - Closing a database link in .NET, ORA-02080 -
i have code uses database link needs closed when it's done with. call dbms_session.close_database_link
gives me error, ora-02080, though link no longer in use.
when tried in sql*plus, worked great , closed after ran commit
. in .net, if run commit doesn't close.
using (var con = new oracle.dataaccess.client.oracleconnection(@"data source=firefly8;user id=user;password=pwd;pooling=false;")) { con.open(); var c = con.createcommand(); c.commandtext = "select tnoam@link_2"; using (var r = c.executereader()) { r.read(); } c.dispose(); var c2 = con.createcommand(); c2.commandtext = "begin commit; dbms_session.close_database_link ('link_2');end;"; c2.executenonquery(); }
i'm pretty stuck one. please help
based on comment @ben tried following, didn't work well:
using (var con = new oracle.dataaccess.client.oracleconnection(@"data source=firefly8;user id=milk_new;password=milk_new;pooling=false;")) { con.open(); var t = con.begintransaction(); var c = con.createcommand(); c.transaction = t; c.commandtext = "select tnoam@link_2"; using (var r = c.executereader()) { r.read(); } t.commit(); c.dispose(); var c2 = con.createcommand(); c2.commandtext = "begin commit; dbms_session.close_database_link ('link_2');end;"; c2.executenonquery(); }
thanks @luke, got on way , found solution.
it seems default oracle caches cursors , keeps them open. , if cursor open, can't close database link.
the flag in connection string controls cursor cache is:
statement cache size
you can manually clear cache calling purgestatementcache
cache method of oracleconnection class
Comments
Post a Comment