Cause: The maximum number of active connections to remote databases per user login has been reached. Action: If the user has no open cursors, the current SQL statement accesses more than the maximum allowed remote databases. Otherwise, the user may free remote database connections by closing all cursors that access the databases. If this occurs often, consider increasing the value of the initialization parameter OPEN_LINKS, which controls the maximum number of concurrent open connections to remote databases per user process.
原因:最大活動串連的數超過設定 動作:如果使用者沒有使用遊標,則正在啟動並執行sql命令,使用的資料庫連接超過允許的的最大數, 如果使用者使用了遊標,使用者可以通過關閉訪問的資料庫的所有遊標,來釋放遠端資料庫串連, 如果此問題經常發生,考慮增加open_links參數,該參數控制每個使用者進程允許開啟的最大遠端資料庫串連數
百度給出的解答, SQL> show parameter open_links;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ open_links integer 10 open_links_per_instance integer 4 Oracle預設是4:
SQL> alter system set open_links=10 scope=spfile;
重啟下資料庫就好了。
問題,使用者並不一定有許可權去操作,上述方式僅僅使用了第二種處理方式,關閉遠端資料庫串連的方式沒有涉及 其實解決很簡單。 對於活動的串連,commit或復原就會斷開活動的串連 SQL> select * from v$dblink;
DB_LINK OWNER_ID LOGGED_ON HETEROGENEOUS PROTOCOL OPEN_CURSORS IN_TRANSACTION UPDATE_SENT COMMIT_POINT_STRENGTH
-------------------------------------------------------------------------------- ---------- --------- ------------- -------- ------------ -------------- ----------- ---------------------
LNK_YYBCV1
使用命令關閉開啟的遠端資料庫串連,資料庫連接不用加單引號 SQL> alter session close DATABASE LINK lnk_yybcv1;
Session altered
如果在預存程序中,資料庫連接需要加單引號-字串。 dbms_session.close_database_link(' lnk_yybcv1');
抱怨一句,百度出來的東西真不好用。