ITPub博客

首页 > 数据库 > Oracle > 关于dblink的ora-02020报错

关于dblink的ora-02020报错

原创 Oracle 作者:wyq_0712 时间:2016-08-24 15:48:25 0 删除 编辑
1、在xxxx上进行使用dblink查询表空间的时候,
遇到:ora-02020,导致无法再次使用dblink查询。


oracle $ oerr ora 2020
02020, 00000, "too many database links in use"
// *Cause: The current session has exceeded the INIT.ORA open_links maximum.
// *Action: Increase the open_links limit, or free up some open links by
//         committing or rolling back the transaction and canceling open
//         cursors that reference remote databases.


报错说明很明显:dblink使用太多,已达到open_links的限制。


2、下面就开始查询这个值:
show parameter open_links
-----------------------------
open_links 4
open_links_per_instance 4


最大值是4.


3、查看当前使用的dblink:
select db_link from v$dblink;
------------------------------
DBL_YXGG
DBL_HNYYK_SO3
DBL_HNYYK_SO2
DBL_BHGG


确实已经达到了4个。
所以再次使用dblink查询的时候,就会报Ora-02020错误。


4、怎么解决这问题?
其实在,Action中就说明的很清楚,
(1)修改参数open_links
查询这个参数的修改是否需要重启实例:
select name,issys_modifiable,isinstance_modifiable,isses_modifibal from v$parameter where name='open_links';
----------------------------------------------------
open_links false false false


结果显示,这个参数为静态参数,需要 重启实例才能生效,修改命令如下:
alter system set open_links=(0-255) scope=sfpile;
重启实例。


(2)当session退出时:
select count(*) from v$dblink;
count(*)
-----------
0
(3)使用commit 或者 rollback


当前使用的dblink:
select db_link from v$dblink;
--------------
DBL_YXGG
DBL_HNYYK_SO3
DBL_HNYYK_SO2
DBL_BHGG


执行一次commit或者rollback,再次进行使用dblink查询,无报错,查询结果如下:
查询如下:
select db_link from v$dblink;
---------------
DBL_YXGG
DBL_HNYYK_SO3
DBL_HNYYK_SO2
DBL_HNYYK_SO4


发现显示的dblink名称,之后最后一个在改变,(进行多次,现象是一样的)。


总结:
在使用dblink的情况下,查询和DML操作都会造成分布式事务,长查询和没有及时提交或回滚事务都很容易造成ORA-02020报错。
因此应特别注意使用dblink的事务需及时提交或回滚事务,避免长查询。
在设置open_links时应了解应用开发商方面使用dblink的查询语句执行时间和查询密度,才能做出最有效的调整。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29677883/viewspace-2123975/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Weblogic调优--总结
请登录后发表评论 登录
全部评论

注册时间:2014-05-26

  • 博文量
    27
  • 访问量
    35687