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

时间: 2024-07-30 11:03:13

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

[20170302]正常关闭数据库日志丢失3.txt

[20170302]正常关闭数据库日志丢失3.txt --//上午写了一篇[20170302]什么是fuzzy.txt ,链接 http://blog.itpub.net/267265/viewspace-2134551/ --//到最后恢复结束时fuzzy=NO,这时scn=13276966782.也就是将只有恢复到结束,oracle才会认为数据文件一致的. --//我本来想删除日志文件看看是否能open resetlogs的,结果报错. --//下午重新探究看看: 1.环境: SYS@boo

[20170210]关于dblink.txt

[20170210]关于dblink.txt --昨天朋友要求建立的数据库关闭全部dblink.实际上很简单设置open_links,open_links_per_instance为0就ok了. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -----------------------

Oracle shutdown immediate无法关闭数据库解决方法

在测试服务器上使用shutdown immediate命令关闭数据库时,长时间无法关闭数据库,如下所示 1: [oracle@DB-Server admin]$ sqlplus / as sysdba 2:  3: SQL*Plus: Release 10.2.0.4.0 - Production on Thu Nov 21 13:55:13 2013 4:  5: Copyright (c) 1982, 2007, Oracle. All Rights Reserved. 6:  7:  8:

oracle启动和关闭数据库方法介绍

unix关闭顺序,先关闭数据库,然后是操作系统,最后下电 只有具备sysdba和sysoper系统特权的用户才能启动和关闭数据库. 在启动数据库之前应该启动监听程序,否则就不能利用命令方式来管理数据库,包括启动和关闭数据库. 虽然数据库正常运行,但如果没有启动监听程序,客户端就不能连接到数据库,在服务器端就不能使用oem和isqlplus工具. 启动监听程序 lsnrctl start          关闭监听程序lsnrctl stop 查询监听程序状态lsnrctl status 启动数据

[20120927]11GR2下建立dblink.txt

[20120927]11GR2下建立dblink.txt SQL> select * from v$version ; BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionPL/SQL Release 11.2.0.1.0 -

oralce正常关闭数据库sequence cache不为0 sequence不跳跃

  在Oracle中sequence使用很频繁,而大部分使用都配合了cache一起使用,那在sequence+cache一起使用的过程中,如果数据库正常关闭sequence.nextval如果变化,如果数据库异常关闭sequence.nextval又如何变化?这里通过试验进行了证明,结论为:在有cache的sequence中,正常关闭数据库sequence不会出现跳跃,异常关闭数据库很可能导致sequence出现跳跃 创建sequence测试 [oracle@localhost ~]$ sqlp

启动- 关闭数据库的时候报错误了, ORA-01507:????是怎么回事?

问题描述 关闭数据库的时候报错误了, ORA-01507:????是怎么回事? 关闭数据库的时候报错误了, ORA-01507:???????? 然后再启动数据库,就启动不了了,报ORA-00205. 解决方案 OK, 这个消息写的很明显,你的ctl file找不到或者损坏了,ORA-01507就是DATABASE没办法mount,数据库启动时有start,mount,open三个步骤,mount需要读取control file,恢复control 文件就是把备份的control copy回去,

[20140221]执行计划以及dblink.txt

[20140221]执行计划以及dblink.txt --昨天我调整一个sql语句,忽略一个细节,sql里面使用了视图,视图里面使用dblink.我正是关注逻辑读不大,让我忽视了优化. --举一些例子来说明问题. 1.建立测试环境: SCOTT@test> @ver BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterpri

重建控制文件,并且不干净的关闭数据库测试

重建控制文件,并且不干净的关闭数据库测试: 数据库SHUTDOWN ABORT,删除CONTROLFILE SQL> startup nomount;ORACLE instance started. Total System Global Area  419430400 bytesFixed Size                  2021248 bytesVariable Size             171968640 bytesDatabase Buffers          2