ORA-12518: TNS:listener could not hand off client connection,ora-12518tns
一、ORA-12518: TNS:listener could not hand off client connection
在團隊成員增多時,經常出現“無法分發用戶端串連”等問題。在網上搜尋一番後,最終解決了該問題,現將解決方案總結如下,以供參考和以後備用。
更改SPFILEORCL.ORA檔案中的process
<span style="font-size: 14px; ">F:\oracle\product\10.2.0\db_1\database\SPFILEORCL.ORA</span>
原因:團隊成員增多,原有資料庫設定不夠用,導致串連plsql和啟動tomcat時經常拋出“無法分發用戶端串連”的異常。
解決方案:
第一步:調整process和session值
1. 檢查process和session是否夠用。
a)使用plsql串連到oracle,查看process進程數:
<span style="font-family:Comic Sans MS;font-size:14px;">select count(*) from v$process; --取得資料庫目前的進程數。select value from v$parameter where name = 'processes'; --取得進程數的上限。</span>
b)查看session會話數:
<span style="font-family:Comic Sans MS;font-size:14px;">select count(*) from v$session; --取得資料庫目前的會話數。select value from v$parameter where name = 'sessions'; --取得會話數的上限。</span>
查看當前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是執行個體的名字
<span style="font-size:14px;">F:\oracle\product\10.2.0\db_1\database\SPFILEORCL.ORA</span>
cmd中運行:
<span style="font-size:14px;">sqlplus /nologconn / 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'; </span>
故當出現此錯誤的是,先建立SPFILEORCL.ORA檔案,然後更改監聽錯誤,重啟監聽和服務即可
oracle的串連問題,各位大大幫忙解決
檢查一下Oracle主目錄下network/admin目錄下tnsnames.ora的內容,是否和你在
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1522:oracle1", "scott", "tiger");中描述的一致,尤其是1522,看看是否真的放在這個連接埠了。
tnsname 可以自行制定 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 資料庫服務IP地址)(PORT = 連接埠號碼))
)
(CONNECT_DATA =
(SERVICE_NAME = 執行個體名稱)
)
)
ORACLE11g安裝在windows 2003 32位作業系統,串連數到120個就不可以串連?