問題1:ORA-12154: TNS: 無法解析指定的連接標識符
在一台服務器上部署了Oracle客戶端,使用IP/SID的方式訪問,老是報ORA-12154錯誤,而使用tnsnames訪問卻沒有問題,對比了我本機的配置並查閱了一下資料,Easy Connect Naming Method這個東西是Oracle 10g推出的,需要在sqlnet.ora文件中添加EZCONNECT,如下:
# sqlnet.ora Network Configuration File: C:\app\Administrator\product\11.2.0\client_1\network\admin\sqlnet.ora # Generated by Oracle configuration tools. # This file is actually generated by netca. But if customers choose to # install "Software Only", this file wont exist and without the native # authentication, they will not be able to connect to the database on NT. SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
問題2:ORA-12514: TNS: 監聽程序當前無法識別連接描述符中請求的服務
1、通過重啟服務的方式啟動數據庫和監聽服務,再次連接仍無法連接服務器。
2、考慮檢查監聽listener.ora文件的配置
監聽配置文件listener.ora中可以不必指定監聽的服務名(安裝Oracle10g后也是沒有指定的)。正常情況下一般只要數據庫啟動,客戶端連接數據庫也沒有什么問題,但是有時重復啟動關閉也會出現ORA-12514錯誤。
既然listener.ora中沒有指定監聽,我們可以在listener.ora文件中指定監聽的實例名,這樣該問題應該可以連接。
# listener.ora Network Configuration File: D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:C:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll") ) (SID_DESC =
(GLOBAL_DBNAME = ora11r2)
(SID_NAME = ora11r2)
)
) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.101)(PORT = 1521)) ) ) ADR_BASE_LISTENER = C:\app\Administrator
對應的正確配置截圖如下:
問題3:ORA-12516 TNS監聽程序找不到符合協議堆棧要求的可用處理程序
近期客戶在正常使用系統過程中,經常遇到報錯:監聽程序找不到符合協議堆棧要求的可用處理程序,但是間隔幾秒后又恢復正常
1、查看一下數據庫現有的進程數,是否已經達到或接近參數processes的閾值:
select t1.*, t2.CurrentValue from (select t.NAME, t.VALUE from v$parameter t where t.name in ('processes', 'sessions') ) t1 join ( select 'processes' as name, count(1) as CurrentValue from v$process union all select 'sessions' as name, count(1) as CurrentValue from v$session ) t2 on t1.name = t2.name
2、修改oracle的process和session值,加大他們最大連接數,修改完后重啟Oracle服務:
SQL> alter system set processes=1000 scope=spfile; SQL> alter system set sessions=1200 scope=spfile;
3、重啟數據庫,使更改生效
SQL> shutdown immediate; SQL> startup; SQL> show parameter processes;