DBlink不使用的原因和关闭方法

图木舒克 2019-10-14 11:45:08
对于单纯的导数据,经验证,比impdp命令还快。 但是,一般企业禁用dblink方式。 主要原因是: 1、一般开发不会关会话,使用后不关闭导致session过多而影响系统 2、dblink没有详细的日志记录,出了问题不易排查,一般的操作都是有现成的同步方式或工具的,所以为了节省问题处理时间,采用现成的更可靠。 对于关闭dblink产生的session,有如下文章可参考。 抄自:http://blog.itpub.net/9932141/viewspace-631509/ db-link session在基于连接池的管理中可能会引起目标管理系统的Session泛滥,从而消耗进程资源。 最近出现一个关于db-link session的问题,在A数据库建立了一个DBLINK,其他有三台服务器利用DBLINK连接到A数据库,但是在应用中利用了连接池进行 session管理,当使用DBLINK时,在A数据库出现session快速增长,达到了顶峰从而导致进程资源消耗连接出现中断。 方式一: 使用命令 alter sesssion close database link ; 使用系统包 DBMS_SESSION.CLOSE_DATABASE_LINK(dblink_name); 此种方式需要用在应用程式当中,ORACLE文档说明,此方式只对当前session起作用,所以管理员SYS去关闭也是不成功的。 SQL> conn / as sysdba Connected. SQL> alter session close database link test; ERROR: ORA-02081: database link is not open 注意,在使用此方式的命令之前需要用commit命令首先提交,否则会出现ora-02080错误。 --eg:實現關閉dblink declare v varchar2(50); CURSOR r IS select first_name from t1@test; begin open r; loop fetch r into v; exit when r%NOTFOUND; end loop; close r; commit; execute immediate 'alter session close database link test'; end; / 方式二: SQLNET.ORA文件中的参数设定(针对PROFILE的建立,限制用户资源使用) SQLNET.EXPIRE_TIME= 注:用此方式会导致用户的会话都受到影响,除非DBLINK是单独使用一个用户。 方式三: 用SELECT查询并形成命令 select sid, serial#, username, osuser, machine, 'alter system kill session ' || '''' || sid || ',' || serial# || ''' immediate;' session_level from v$session where machine in ('DB01', 'DB02', 'DB03'); 注意每个命令后面后加的immediate,没有加此关键字则v$session中的STATUS列会变为KILLED,但是资源并未释放。 利用方式三可以做成JOB定时kill session,但这样存在很大的风险。 总之,在使用DBLINK时一定要注意session的回收,在应用程序中使用 commit; alter sesssion close database link ;
...全文
1486 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhdz_bj 2019-10-21
  • 打赏
  • 举报
回复
其实,所有事情都不是绝对的,关键是会用。
minsic78 2019-10-16
  • 打赏
  • 举报
回复
impdp本身就能借助dblink导数据。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧