存储过程关闭dblink连接

存储过程中经常有使用dblink的场景,本文探讨下dblink连接关闭的问题。

第一种方法,调用oracle存储过程

如果通过dblink和同义词访问目标表时,会在目标表的数据库产生新的session,新的session会占用一定的内存空间,而且tcp连接一直占用着,虽然下次会复用连接,但是连接被占用很耗资源,建议手动关闭(oracle会关,但是不靠谱。。。)。

为什么要手动关,必须在一个事务里面才能关,管理员都难关(大神不在考虑范围内)。

使用关闭dbms_session.close_database_link(‘你的dblink名称’);dblink连接
我本地连接另外一个数据库,已测;
示例如下

create or replace package body test_pck is

PROCEDURE test_pro(xxx IN varchar2)IS
  v_sql VARCHAR2(500);
  BEGIN
    v_sql := 'SELECT * FROM sys_org@TEST_LINK';
    EXECUTE IMMEDIATE v_sql;
  COMMIT;
  dbms_session.close_database_link('TEST_LINK');
  COMMIT;
END test_pro;

end test_pck;

第二种方法,alter session close database link…

alter session close database link ‘你的dblink名称’;

这样是和写到程序里面例如java,而且第一种适合存储过程使用,因为他是调用oracle本身固有的存储过程去做,直接写上就行,第二种需要定义sql执行sql。

示例如下

v_sql := 'alter session close database link TEST_LINK';
EXECUTE IMMEDIATE v_sql;
commit;

最后注意事项

建议把有dblink的同步写到一个存储过程里面,在最后关了,然后在exception里面也写一份关闭,这样就万无一失了;
程序员谨记,先测试,再上线。
谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值