Oracle_連接時ORA-12519錯誤


Oracle_連接時ORA-12519錯誤

業務系統試運行期間,后台一直報12519異常,詳情參見下圖:

問題:系統在運行時出現了ORA-12519的錯誤,無法連接數據庫(並不是Oracle數據庫、或者監聽連接不了),客戶端連接間歇性失敗,報錯ORA-12519。

  報錯:OERR: ORA-12519 TNS:no appropriate service handler found => 沒有找到合適的服務處理程序。

  有時候連得上數據庫,有時候又連不上;可能是數據庫上當前的連接數目已經超過了它能夠處理的最大值。注意:盡管可能並沒有多少人使用系統

 解決: 修改Oracle最大連接數 。


 

1、檢查process和session使用情況

首先檢查process和session的使用情況,在sqlplus里面查看。

  • processes的官方解析:

    • PROCESSES specifies the maximum number of operating system user processes that can simultaneously connect to Oracle. Its value should allow for all background processes such as locks, job queue processes, and parallel execution processes.
       ​
       The default values of the SESSIONS and TRANSACTIONS parameters are derived from this parameter. Therefore, if you change the value of PROCESSES, you should evaluate whether to adjust the values of those derived parameters.

       

      processes指定了可以同時連接到oracle的最大操作系統用戶數,os層面。它的值應該大於或等於所有的后台進程例如鎖、作業、並行處理程序的總數。其中sessions和transactions參數的默認值都是由這個參數所派生出來的。所以,你要改變processes的時候,要考慮一下派生出來的值是否需要調整。

      processes和sessions的數量關系:sessions>=(processes值+后台process數量)*1.4~1.5

  • sessions:

    • session指定了在系統中可以建立的session的最大數目。因為每個登陸都需要請求一個session,這個參數影響了在系統中的最大並發用戶數。然后后面就是建議怎么設置session數的問題了。數量=(可能的連接數+后台進程數)*1.1。

 

  個人的見解:由於session 由 process所建立,所以process相當於session的基礎,而處理多少session的能力要看process,即process決定了session,所以當日常用戶的並發數為120的時候,此時應當設置相應的process的值為120以確保當並發用戶數達到或者超過session上限時,有足夠的process可以處理session。

show parameter processes;
show parameter session;

-- 查看當前進程數(當前的數據庫連接數)
select count(*) from v$process;

-- 查看當前會話數
select count(*) from v$session;

-- 查看進程最大值(數據庫允許的最大連接數)
select value from v$parameter where name = 'processes';

-- 查看會話最大值
select value from v$parameter where name = 'sessions';
 
-- 並發連接數
Select count(*) from v$session where status='ACTIVE';

-- 最重要的腳本:分別查看進程,會話的歷史最大數和最大數:
select resource_name,max_utilization,limit_value from v$resource_limit where resource_name in('processes','sessions');

 

2、以sysdba權限登錄:

SQL> show parameter processes;

NAME
------------------------------------
TYPE                                         VALUE
-------------------------------------------- ------------------------------
aq_tm_processes
integer                                      1
db_writer_processes
integer                                      2
gcs_server_processes
integer                                      0
global_txn_processes
integer                                      1
job_queue_processes

NAME
------------------------------------
TYPE                                         VALUE
-------------------------------------------- ------------------------------
integer                                      10
log_archive_max_processes
integer                                      4
processes
integer                                      300

-- 數據庫允許的最大連接數(我已修改)
SQL> select value from v$parameter where name = 'processes';

VALUE
--------------------------------------------------------------------------------
300

-- 當前的數據庫連接數
SQL> select count(*) from v$process;

  COUNT(*)
----------
        49

SQL>

 

3、修改最大連接數

SQL> alter system set processes = 300 scope = spfile;
alter system set processes = 300 scope = spfile
*
ERROR at line 1:
ORA-32001: write to SPFILE requested but no SPFILE is in use

 

在執行該命令時出現下列錯誤;解決:

-- 查看spfile
SQL> show parameter spfile;

NAME
------------------------------------
TYPE                                         VALUE
-------------------------------------------- ------------------------------
spfile
string

-- 創建spfile
SQL> create spfile from pfile;

File created.

-- 關閉/重啟數據庫
SQL> shutdown immediate;
SQL> startup;

-- 查看spfile
SQL> show parameter spfile;

NAME
------------------------------------
TYPE                                         VALUE
-------------------------------------------- ------------------------------
spfile
string                                       /u01/app/oracle/product/12.1.0
                                             /dbhome_1/dbs/spfileagile9.ora

 

再次執行命令: alter system set processes = 300 scope = spfile; --修改最大連接數:

通常完成以上操作后即可完成最大連接數的修改。注意一定要重啟數據庫。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM