oracle ora 02020,ORA-02020 too many database links in use再现
ORA-02020 too many database links in use重現
在A庫上建DB_link,更新B庫。報ORA-2020 too many database links in use,是要設置OPEN_LINKS和OPEN_LINKS_PER_INSTANCE兩個參數,它們的默認值都是4。
alter system set open_links=200 scope=both;
alter system set open_links_per_instance=200 scope=both;
問題來了,是修改A庫中的參數還是B庫,是修改A庫的。
修改這類參數數據庫要重啟。
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.
OPEN_LINKS specifies the maximum number of concurrent open connections to remote databases in one session.
OPEN_LINKS_PER_INSTANCE specifies the maximum number of migratable open connections globally for each database instance.
OPEN_LINKS_PER_INSTANCE is different from OPEN_LINKS, which indicates the number of connections from a session. The OPEN_LINKS parameter is not applicable to XA applications.
OPEN_LINKS_PER_INSTANCE跟OPEN_LINKS的區別是,前者是對于XA事務的。
做個試驗重現一下:
在A庫上:
SQL> show parameter open_link
NAME ? ? ? ? ? ? ? ? ? ? ? ? ?TYPE ? ? ? ?VALUE
----------------------------- ----------- --------
open_links ? ? ? ? ? ? ? ? ? ?integer ? ? ?4
open_links_per_instance ? ? ? integer ? ? ?4
create database link DBLINK_1
connect to TEST IDENTIFIED BY test
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.15.150)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)';
--按照同種方式建5個dblink
SQL> set serveroutput on
SQL> ?declare
2 ? ? ? v_i number;
3 ? ? ? v_sql varchar(500);
4 ? ?begin
5 ? ? ?for i in 1..5
6 ? ? ? loop
7 ? ? ? ?v_sql:='select count(*) from dual@DBLINK_'||i;
8 ? ? ? ?execute immediate v_sql into v_i;
9 ? ? ? ?dbms_output.put_line('DBLINK_'||i);
10 ? ? ? ?commit;
11 ? ? ? end loop;
12 ? ?end;
13 ?/
DBLINK_1
DBLINK_2
DBLINK_3
DBLINK_4
DBLINK_5
PL/SQL procedure successfully completed
SQL>
SQL> ?declare
2 ? ? ? v_i number;
3 ? ? ? v_sql varchar(500);
4 ? ?begin
5 ? ? ?for i in 1..5
6 ? ? ? loop
7 ? ? ? ?v_sql:='select count(*) from dual@DBLINK_'||i;
8 ? ? ? ?execute immediate v_sql into v_i;
9 ? ? ? ?dbms_output.put_line('DBLINK_'||i);
10 ? ? ? ?--commit;
11 ? ? ? end loop;
12 ? ?end;
13 ?/
DBLINK_1
DBLINK_2
DBLINK_3
DBLINK_4
declare
v_i number;
v_sql varchar(500);
begin
for i in 1..5
loop
v_sql:='select count(*) from dual@DBLINK_'||i;
execute immediate v_sql into v_i;
dbms_output.put_line('DBLINK_'||i);
--commit;
end loop;
end;
ORA-02020: 過多的數據庫鏈接在使用中
ORA-06512: 在 line 9
SQL> ? declare
2 ? ? ? v_i number;
3 ? ? ? v_sql varchar(500);
4 ? ?begin
5 ? ? ?for i in 1..4
6 ? ? ? loop
7 ? ? ? ?v_sql:='select count(*) from dual@DBLINK_'||i;
8 ? ? ? ?execute immediate v_sql into v_i;
9 ? ? ? ?dbms_output.put_line('DBLINK_'||i);
10 ? ? ? ?--commit;
11 ? ? ? end loop;
12 ? ?end;
13 ?/
DBLINK_1
DBLINK_2
DBLINK_3
DBLINK_4
PL/SQL procedure successfully completed
SQL> commit;
Commit complete
--分兩次執行
SQL> declare
2 ? ? ? v_i number;
3 ? ? ? v_sql varchar(500);
4 ? ?begin
5 ? ? for i in 1..3
6 ? ? ? loop
7 ? ? ? ?v_sql:='select count(*) from dual@DBLINK_'||i;
8 ? ? ? ?execute immediate v_sql into v_i;
9 ? ? ? ?dbms_output.put_line('DBLINK_'||i);
10 ? ? ? ?--commit;
11 ? ? ? end loop;
12 ? ?end;
13 ?/
DBLINK_1
DBLINK_2
DBLINK_3
PL/SQL procedure successfully completed
SQL> ? declare
2 ? ? ? v_i number;
3 ? ? ? v_sql varchar(500);
4 ? ?begin
5 ? ? for i in 4..5
6 ? ? ? loop
7 ? ? ? ?v_sql:='select count(*) from dual@DBLINK_'||i;
8 ? ? ? ?execute immediate v_sql into v_i;
9 ? ? ? ?dbms_output.put_line('DBLINK_'||i);
10 ? ? ? ?--commit;
11 ? ? ? end loop;
12 ? ?end;
13 ?/
DBLINK_4
declare
v_i number;
v_sql varchar(500);
begin
for i in 4..5
loop
v_sql:='select count(*) from dual@DBLINK_'||i;
execute immediate v_sql into v_i;
dbms_output.put_line('DBLINK_'||i);
--commit;
end loop;
end;
ORA-02020: 過多的數據庫鏈接在使用中
ORA-06512: 在 line 9
總結
以上是生活随笔為你收集整理的oracle ora 02020,ORA-02020 too many database links in use再现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rds oracle utl file,
- 下一篇: php7的稳定性,探索PHP7(一)--