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

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

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

目录
相关文章
|
2月前
|
Shell 数据库
GBase8a 数据库新集群第一次创建dblink
GBase8a 数据库新集群第一次创建dblink
|
6月前
|
SQL Oracle 关系型数据库
关系型数据库Oracle结束 RMAN 会话:
【7月更文挑战第25天】
125 1
|
6月前
|
SQL Oracle 关系型数据库
|
7月前
|
存储 缓存 数据库
基于数据库后端的会话
【6月更文挑战第15天】基于数据库后端的会话。
27 4
|
8月前
|
SQL Oracle 关系型数据库
Oracle SQL*Plus的SET命令:你的数据库会话“调色板”
【4月更文挑战第19天】Oracle SQL*Plus的SET命令是数据库会话的“调色板”,用于设置输出格式、反馈信息和各种偏好。它能调整PAGESIZE和LINESIZE以优化显示,控制ECHO和FEEDBACK开关以定制反馈,以及统计命令执行时间(TIMING)和调试SQL(VERIFY)。更高级的选项如HEADING和COLSEP可改善输出的可读性。通过灵活运用SET命令,能提升工作效率和体验,是数据库管理员和开发者的必备工具。
|
运维 druid 前端开发
数据库很多异常的会话
数据库很多异常的会话
210 0
数据库很多异常的会话
|
数据库
LeetCode(数据库)- 制作会话柱状图
LeetCode(数据库)- 制作会话柱状图
97 0
|
SQL Oracle 关系型数据库
Oracle 技巧篇-快速批量删除当前数据库连接的用户,一键清空所有session会话方法
Oracle 技巧篇-快速批量删除当前数据库连接的用户,一键清空所有session会话方法
786 0
Oracle 技巧篇-快速批量删除当前数据库连接的用户,一键清空所有session会话方法
|
关系型数据库 数据库连接 数据库
删除 PostgresSql 数据库 报错:有 N 个其它会话正在使用数据库 的解决方案
遇到的问题 在PostgreSQL 9.2 及以上版本,执行下面的语句: postgres=# drop database dbtest; # 执行删除指定数据库的时候,报以下错误 ERROR: database "dbtest" is being accessed by other users DETAIL: There is 2 other session using the database. 或者使用 Navicat 等第三方数据库连接工具,删除指定数据库的时候报错,说明此时有两个客户端在连接此数据库,此时不能删除数据库。
1947 0
|
关系型数据库 MySQL 分布式数据库
云数据库POLARDB优势解读系列文章之⑤——会话读一致性
POLARDB架构 我们知道,POLARDB是一个由多个节点构成的数据库集群,一个主节点,多个读节点。对外默认提供两个地址,一个是集群地址,一个是主地址,推荐使用集群地址,因为它具备读写分离功能可以把所有节点的资源整合到一起对外提供服务。
8547 0
下一篇
开通oss服务