最近客戶郵件描述無法從用戶端串連到資料庫,其錯誤號碼為ORA-12537: TNS:connection closed,串連被關閉。直接通過tnsping沒有任何問題。listener日誌中出現TNS-12518: TNS:listener could not hand off client connection。即Listener無法分發用戶端串連。下面是具體的錯誤資訊、分析與解決的過程。
1、前端錯誤資訊
C:\Program Files\VMware\VMware vSphere CLI>sqlplus robinson@sywgmrSQL*Plus: Release 10.2.0.1.0 - Production on Thu Mar 27 10:49:00 2014Copyright (c) 1982, 2005, Oracle. All rights reserved.Enter password:ERROR:ORA-12537: TNS:connection closed
2、故障分析
oracle@SZDB:/users/oracle/OraHome10g/network/log> tail listener_sywgmr.log TNS-12547: TNS:lost contact TNS-12560: TNS:protocol adapter error TNS-00517: Lost contact Linux Error: 32: Broken pipe27-MAR-2014 11:02:38 * (CONNECT_DATA=(SID=SYWGMR)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) * (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=63561)) * establish * SYWGMR * 12518TNS-12518: TNS:listener could not hand off client connection TNS-12547: TNS:lost contact TNS-12560: TNS:protocol adapter error TNS-00517: Lost contact Linux Error: 32: Broken pipeoracle@SZDB:~> oerr ora 1253712537, 00000, "TNS:connection closed"// *Cause: "End of file" condition has been reached; partner has disconnected.// *Action: None needed; this is an information message.oracle@SZDB:~> oerr ora 1251812518, 00000, "TNS:listener could not hand off client connection"// *Cause: The process of handing off a client connection to another process// failed.// *Action: Turn on listener tracing and re-execute the operation. Verify// that the listener and database instance are properly configured for// direct handoff. If problem persists, call Oracle Support.// *Comment: The problem can be worked around by configuring dispatcher(s)// to specifically handle the desired presentation(s), and connecting// directly to the dispatcher, bypassing the listener.#根據上面的2個error no,沒有獲得太多的有用資訊#ora-12518建議作一個trace.其comment說明可以通過配置disaptcher來解決,而當前我們的資料庫使用的是dedicate方式#關於如何配置監聽器trace,可參考: http://blog.csdn.net/leshami/article/details/8254720#此處不做trace,筆者嘗試reload以及restart 監聽,故障依舊#下面查看alert log 日誌#下面的日誌裡表明無法建立m000進程,m000進程是SMON進程的奴隸進程oracle@SZDB:/users/oracle> tail /u02/database/SYWGMR/bdump/alert_SYWGMR.logThu Mar 27 11:00:28 2014ksvcreate: Process(m000) creation failedThu Mar 27 11:01:29 2014Process m000 died, see its trace fileThu Mar 27 11:01:29 2014ksvcreate: Process(m000) creation failedThu Mar 27 11:02:30 2014Process m000 died, see its trace fileThu Mar 27 11:02:30 2014ksvcreate: Process(m000) creation failed#在06:19:02 2014時有一個Error,無法衍生job 奴隸進程Thu Mar 27 06:19:02 2014Process J000 died, see its trace fileThu Mar 27 06:19:02 2014kkjcre1p: unable to spawn jobq slave processThu Mar 27 06:19:02 2014Errors in file /u02/database/SYWGMR/bdump/sywgmr_cjq0_7780.trc:#從上面的alert log可以看出執行個體無法建立新的進程,推斷有可能是由於超出了執行個體設定進程的最大值oracle@SZDB:~> export ORACLE_SID=SYWGMRoracle@SZDB:~> sqlplus / as sysdbaSQL*Plus: Release 11.2.0.3.0 Production on Thu Mar 27 10:56:27 2014Copyright (c) 1982, 2011, Oracle. All rights reserved.Connected to:Oracle Database 10g Release 10.2.0.3.0 - 64bit Production-- Author : Leshami-- Blog : http://blog.csdn.net/leshamiSQL> col RESOURCE_NAME for a20SQL> col LIMIT_VALUE for a20SQL> select resource_name,MAX_UTILIZATION,LIMIT_VALUE from v$resource_limit where resource_name in ('processes','sessions');RESOURCE_NAME MAX_UTILIZATION LIMIT_VALUE-------------------- --------------- --------------------processes 1000 1000sessions 1004 1105#上面的查詢結果果然如此
3、故障解決
#找到了引起故障的原因,就好處理了。下面是關於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參數,如下,不支援memory的修改,因此需要加scopesys> alter system set processes=1500;alter system set processes=1500 *ERROR at line 1:ORA-02095: specified initialization parameter cannot be modifiedsys> alter system set processes=1500 scope=spfile;System altered.#下面是修改並重啟後的結果,如果你使用的是pfile參數,則直接修改pfile中processes的值再重啟即可。sys> show parameter processesNAME TYPE VALUE------------------------------------ ----------- ------------------------------processes integer 1500sys> show parameter session;NAME TYPE VALUE------------------------------------ ----------- ------------------------------sessions integer 1655
更多參考
有關Oracle RAC請參考
使用crs_setperm修改RAC資源的所有者及許可權
使用crs_profile管理RAC資源設定檔
RAC 資料庫的啟動與關閉
再說 Oracle RAC services
Services in Oracle Database 10g
Migrate datbase from single instance to Oracle RAC
Oracle RAC 串連到指定執行個體
Oracle RAC 負載平衡測試(結合伺服器端與用戶端)
Oracle RAC 伺服器端串連負載平衡(Load Balance)
Oracle RAC 用戶端串連負載平衡(Load Balance)
ORACLE RAC 下非預設連接埠監聽配置(listener.ora tnsnames.ora)
ORACLE RAC 監聽配置 (listener.ora tnsnames.ora)
配置 RAC 負載平衡與容錯移轉
CRS-1006 , CRS-0215 故障一例
基於Linux (RHEL 5.5) 安裝Oracle 10g RAC
使用 runcluvfy 校正Oracle RAC安裝環境
有關Oracle 網路設定相關基礎以及概念性的問題請參考:
配置非預設連接埠的動態服務註冊
配置sqlnet.ora限制IP訪問Oracle
Oracle 監聽器日誌配置與管理
設定 Oracle 監聽器密碼(LISTENER)
配置ORACLE 用戶端串連到資料庫
有關基於使用者管理的備份和備份恢複的概念請參考
Oracle 冷備份
Oracle 熱備份
Oracle 備份恢複概念
Oracle 執行個體恢複
Oracle 基於使用者管理恢複的處理
SYSTEM 資料表空間管理及備份恢複
SYSAUX資料表空間管理及恢複
Oracle 基於備份控制檔案的恢複(unsing backup controlfile)
有關RMAN的備份恢複與管理請參考
RMAN 概述及其體繫結構
RMAN 配置、監控與管理
RMAN 備份詳解
RMAN 還原與恢複
RMAN catalog 的建立和使用
基於catalog 建立RMAN儲存指令碼
基於catalog 的RMAN 備份與恢複
RMAN 備份路徑困惑
使用RMAN實現異機備份恢複(WIN平台)
使用RMAN遷移檔案系統資料庫到ASM
linux 下RMAN備份shell指令碼
使用RMAN遷移資料庫到異機
有關ORACLE體繫結構請參考
Oracle 資料表空間與資料檔案
Oracle 密碼檔案
Oracle 參數檔案
Oracle 聯機重做記錄檔(ONLINE LOG FILE)
Oracle 控制檔案(CONTROLFILE)
Oracle 歸檔日誌
Oracle 復原(ROLLBACK)和撤銷(UNDO)
Oracle 資料庫執行個體啟動關閉過程
Oracle 10g SGA 的自動化管理
Oracle 執行個體和Oracle資料庫(Oracle體繫結構)