Oracle幾個基礎配置問題:ORA-12154: TNS: 無法解析指定的連接標識符、ORA-12514: TNS: 監聽程序當前無法識別連接描述符中請求的服務、ORA-12516 TNS監聽程序找不到符合協議堆棧要求的可用處理程序


問題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

 

對應的正確配置截圖如下:

clip_image002

clip_image004

clip_image006

 

問題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;


免責聲明!

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



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