[20160818]关闭数据库会话的dblink.txt

[20160818]关闭数据库会话的dblink.txt

--昨天在跟别人聊天提到说对方的数据库出现session长时间存在事务无法提交的情况,问我什么回事。
--实际上很简单,问题很有可能出在使用dblink的情况,通过测试说明问题并且学习如何关闭链接。

1.环境:
SCOTT@book> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

create public database link "loopback"
connect to scott
identified by "book"
using '127.0.0.1/BOOK';

--我以前提到,这样可以dblink的测试,满足dblink的测试需求。

2.测试:
SCOTT@book> select count(*) from v$session where username='SCOTT';
  COUNT(*)
----------
         1
--注意测试前仅仅1个会话username='SCOTT'。

SCOTT@book> select * from dept@loopback;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SCOTT@book> column XIDUSN_XIDSLOT_XIDSQN format a30
SCOTT@book> select dbms_transaction.local_transaction_id()   XIDUSN_XIDSLOT_XIDSQN from dual ;
XIDUSN_XIDSLOT_XIDSQN
------------------------------
10.11.1182

SCOTT@book> @ &r/xid
XIDUSN_XIDSLOT_XIDSQN
------------------------------
10.11.1182

    XIDUSN    XIDSLOT     XIDSQN     UBAFIL     UBABLK     UBASQN     UBAREC STATUS            USED_UBLK  USED_UREC XID              ADDR             START_DATE          C70
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- ---------- ---------- ---------------- ---------------- ------------------- ----------------------------------------------------------------------
        10         11       1182          0          0          0          0 ACTIVE                    1          1 0A000B009E040000 000000008194F210 2016-08-19 09:43:27 ALTER SYSTEM DUMP UNDO BLOCK '_SYSSMU10_1197734989$' XID 10 11 1182;
                                                                                                                                                                          ALTER SYSTEM DUMP UNDO HEADER '_SYSSMU10_1197734989$';
                                                                                                                                                                          ALTER SYSTEM DUMP DATAFILE 0 BLOCK 0;
--很明显执行dblink,会产生事务。

SCOTT@book> select count(*) from v$session where username='SCOTT';
  COUNT(*)
----------
         2
--现在变成了2个username='SCOTT'。        

--如果这个时候执行如下:
SCOTT@book> alter session close database link loopback;
ERROR:
ORA-02080: database link is in use

--必须要先commit。
SCOTT@book> commit ;
Commit complete.

SCOTT@book> select count(*) from v$session where username='SCOTT';
  COUNT(*)
----------
         2

SCOTT@book> alter session close database link loopback;
Session altered.

SCOTT@book> select count(*) from v$session where username='SCOTT';
  COUNT(*)
----------
         1

--要发一个commit,在执行后面的语句才能关闭alter session close database link loopback;。

总结:
1.使用dblink会执行事务。
2.如果应用大量使用dblink访问数据库,消耗的连接会很可观,即使你commit,dblink的连接也没有断开,要关闭必须执行:
  commit或者rollback,才能执行alter session close database link loopback;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/267265/viewspace-2123710/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/267265/viewspace-2123710/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值