错误现象:
ORA-02020: 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.
再查看参数:
SQL> show parameter open_links;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_links integer 4
open_links_per_instance integer 4
可以使用下面的方法解决该问题:
1、 修改实例启动参数open_links
Alter system set open_links=10 scope=spfile;
然后重启数据库:
shutdown immediate
startup
这种方法不好的地方就是需要重启数据库实例,对于重新发布生产系统是比较麻烦的。
2、 使用COMMIT
根据ORACLE技术文档的解释,open_links参数限制的是在一个会话中使用dblink(不限于)的个数,可以使用commit语句关闭当前会话中打开的dblink避免ORA-02020错误。这样做的坏处在于commit之后如果需要再次使用该数据库链接则需要重新打开,这样会带来一定的性能上的损耗。
总的来说这两种方法都存在一定的问题,个人倾向于使用第一种方法。另外如果能够在数据库设计之初有所考虑并且使用一个合适的open_links参数值,就能从最大的程度上避免上述问题。