oracle 中dblink的session不能自动释放

Oracle跨数据库连接dblink的session不能自动释放。

环境: 远数据库A  目标数据库B
目的:在B上建立dblink 连接到A,在B中创建视图,查询A的数据.
问题: 由于B上的应用程序有很多用户在查询,造成dblink的session很多,而且一直无法释放.
想到的解决办法:将B的视图改为物化视图,然后再根据此物化视图创建一个普通视图.不知道这样能否解决session过多的问题.
或者大家有什么更好的办法?

查询B自己的视图和表也是很多session不释放吗?还是只是dblink过来的session不释放哦?先找清楚这个吧,如果都不释放,是否你的应用本身就有问题?如果应用本身的问题,你做了物化视图以后还是会出现内似问题。


若希望在原会话中关掉已打开的远程会话,则需要使用一下命令:
Alter session close database link DBLINKNAME;

Oracle中dblink所产生远程会话的一些表现
http://www.oracledatabase12g.com... A1%A8%E7%8E%B0.html


只需要在一个远程查询结束后 发出一个commit或者rollback 然后执行alter session close databaselink db_link_name就可以释放资源。


Oracle中dblink所产生远程会话的一些表现

September9, 2009By Maclean Liu1Comment

惯性思维总是 令我们离大师们 有着一定的距离,这种差距 在知识广袤的领域尤其明显。

Oracle领域被称为Oracle的世界,当之无愧;一丁点的想当然就让我们偏离于事实。

以dblink的表现为例,我一直认为dblink的远程连接session仅在操作(select,dml)发生时短期存在,在操作完成后依据一定条件保留或退出。

而事实并非如此,随便使用一个远程查询语句如下:

SQL>select * from help@LZ;       –LZ 为dblink名

在远程数据库端观察session,可以发现:

selectsid,username,machine,program,module from v$session where module=’ORACLE.EXE’

 

SID

USERNAME

MACHINE

PROGRAM

MODULE

1

526

SYSTEM

WIN_DESK1

ORACLE.EXE

ORACLE.EXE

且该远程会话一直保留直到原会话退出为止,无论是成功退出还是程序失败。

若希望在原会话中关掉已打开的远程会话,则需要使用一下命令:
Alter session close database link DBLINKNAME;

这里要注意,需要先执行commit后以上关闭远程session SQL方会成功,即便是Select操作也是如此;

若没有执行commit,会出现:

ORA-02080:数据库链接正在使用中

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值