ORA-12518: TNS:listener could not hand off client connection


一、ORA-12518: TNS:listener could not hand off client connection

在團隊成員增多時,常常出現“無法分發client連接”等問題。在網上搜索一番后,終於攻克了該問題,現將解決方式總結例如以下,以供參考和以后備用。

更改SPFILEORCL.ORA文件里的process

F:\oracle\product\10.2.0\db_1\database\SPFILEORCL.ORA

原因:團隊成員增多,原有數據庫設置不夠用,導致連接plsql和啟動tomcat時常常拋出“無法分發client連接”的異常。

解決方式:

第一步:調整process和session值

1. 檢查process和session是否夠用。

a)使用plsql連接到oracle,查看process進程數:

select count(*) from v$process; --取得數據庫眼下的進程數。
select value from v$parameter where name = 'processes';     --取得進程數的上限。
b)查看session會話數:

select count(*) from v$session; --取得數據庫眼下的會話數。
select value from v$parameter where name = 'sessions'; --取得會話數的上限。
查看當前process和sessions是否接近上限值。若接近,能夠將其增大。

2. 調整這兩個參數值大小。

系統進程數process和系統會話數session之間存在一個關系:

process數=session數*1.1+5

我們在配置時參考該規律進行設定。

a)  改動process值

alter system set processes=1000 scope=spfile;   --將process值改為1000

b)  改動session值

alter system set sessions=1105 scope=spfile;    --將sessions值改為1105

3. 備份pfile,重新啟動oracle

a) 改動完畢后,備份pfile

create pfile from spfile;   --從spfile(執行時配置)創建pfile(系統配置)

c)  重新啟動oracle

重新啟動的方法有非常多種,能夠重新啟動oracle服務,或者重新啟動數據庫。Windows下能夠直接重新啟動服務。


第二步:改動dispatchers個數

假設第一步解決不了問題。能夠進行第二步的操作。

1.查看當前dispatchers個數,和dispatchers使用率

select name,busy,status,accept,idle from v$dispatcher;  --查看當前dispatchers個數和部分信息。一般默認安裝的庫僅僅有一個。

select name,(busy/(busy+idle))*100 "busy rate%" from v$dispatcher; --查看dispatchers使用率

假設使用率大於50%,則要考慮添加dispatchers個數。

2.調整dispatchers個數

alter system set dispatchers='(protocol=tcp)(dispatchers=3)(service=youroracleservicenameXDB)';

--改動dispatchers個數為3.

3. 重新啟動oracle。


當重新啟動服務的時候,出現沒有監聽程序的錯誤


二.ORA-12541: TNS:無監聽程序

1:F:\oracle\product\10.2.0\db_1\network\admin\listener.ora 中加入例如以下代碼:

 (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = F:\oracle\product\10.2.0\db_1)
      (PROGRAM = extproc)
    )    

# listener.ora Network Configuration File: F:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
	 (SID_DESC =
    (GLOBAL_DBNAME = orcl)
    (ORACLE_HOME = F:\oracle\product\10.2.0\db_1)
    (SID_NAME = orcl)
    ) 	
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = F:\oracle\product\10.2.0\db_1)
      (PROGRAM = extproc)
    )    
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = wl-fe65b9e18e24)(PORT = 1521))
    )
  )
注意:重新啟動  listener 和service  


因為上述更改了spfileorcl.ora,可能導致此文件丟失,導致 oracle 不可用

三、oralce不可用

創建SPFILEORCL.ORA文件,注意:SPFILEORCL,ORCL是實例的名字

F:\oracle\product\10.2.0\db_1\database\SPFILEORCL.ORA

cmd中執行:

sqlplus /nolog
conn / as sysdba;
create spfile='F:\oracle\product\10.2.0\db_1\database\SPFILEORCL.ORA' from pfile='F:\oracle\product\10.2.0\admin\orcl\pfile\init.ora.7292014151052'; 

故當出現此錯誤的是,先創建SPFILEORCL.ORA文件,然后更改監聽錯誤,重新啟動監聽和服務就可以


免責聲明!

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



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