一、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
三、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文件,然后更改監聽錯誤,重新啟動監聽和服務就可以