ORA-12514:TNS:監聽程序當前無法識別連接描述符中請求的服務_監聽程序不支持服務


今天大黃蜂同學重啟虛擬機之后再鏈接數據庫就報了這個錯,先查看了一下監聽的狀態

C:> lsnrctl status
... ...
服務摘要..
服務 "CLRExtProc" 包含 1 個實例。
  實例 "CLRExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程序...
命令執行成功

監聽中的服務並沒有數據庫實例orcl,檢查了一下listener.ora文件,配置並沒有問題,
懷疑是數據庫啟動時出了問題,導致監聽並沒有找到數據庫服務,
為了連上數據庫,在listener.ora文件中強制添加orcl的監聽

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:D:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
    # 以下是添加部分
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)
      (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)  
      (SID_NAME = ORCL)
    )
  )

然后重啟監聽,讓監聽可以識別orcl服務

C:> lsnrctl stop
... ...

C:> lsnrctl start
... ...
服務 "ORCL" 包含 1 個實例。
  實例 "ORCL", 狀態 UNKNOWN, 包含此服務的 1 個處理程序...
命令執行成功

然后連接Oracle數據庫,嘗試重啟數據庫

C:> sqlplus sys/sys@127.0.0.1/orcl as sysdba
... ...

SQL> shutdown immediate;
ORA-01034 - Oracle not available
ORA-27101 - shared memory realm does not exist

網上大部分說是ORACL_HOMEORACLE_SID問題,可惜並不適用,
后找到一篇說查看日志,日志路徑位於ORACLE_HOME\database\ORADIM.LOG
日志中找到數據庫啟動時的報錯信息如下:

Tue Jun 21 15:10:17 2016
D:\app\Administrator\product\11.2.0\dbhome_1\bin\oradim.exe -startup -sid orcl -usrpwd *  -log oradim.log -nocheck 0 
Tue Jun 21 15:10:33 2016
ORA-00847: MEMORY_TARGET/MEMORY_MAX_TARGET and LOCK_SGA cannot be set together

繼續查詢報錯信息ORA-00847,看起來是數據庫系統參數設置的問題,先把pfile導出看一下

SQL> create pfile from spfile;

創建了之后寶寶傻眼了,不在ORACLE_HOME/dbs里啊!
后來經查才知原來Windows下pfile的默認生成路徑和linux下不一樣,位於$ORACLE_BASE\admin\db_name\pfile
然后打開pfile注釋掉MEMORY_TARGET參數的設置

...
# memory_target=898629632
...

然后從pfile啟動數據庫,根據pfile生成spfile

SQL> startup pfile='D:\app\Administrator\admin\orcl\pfile\init.ora.115201614250';

SQL> create spfile from pfile='D:\app\Administrator\admin\orcl\pfile\init.ora.115201614250';

然后便可以重啟數據庫了,最后將listener.ora還原,重啟服務器,再查看監聽狀態就可以看到orcl服務正常了

C:> lsnrctl status

... ...
服務摘要..
服務 "CLRExtProc" 包含 1 個實例。
  實例 "CLRExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程序...
服務 "ORCL" 包含 1 個實例。
  實例 "orcl", 狀態 READY, 包含此服務的 1 個處理程序...
服務 "orclXDB" 包含 1 個實例。
  實例 "orcl", 狀態 READY, 包含此服務的 1 個處理程序...
命令執行成功

參考鏈接:

  1. 連接本地Oracle 11g時 ORA-12514:TNS:監聽程序當前無法識別連接描述符中請求的服務
  2. 解決連接Oracle 11g報ORA-01034和ORA-27101的錯誤
  3. pfile和spfile全攻略
  4. oracle錯誤實踐之一:ora-00847


免責聲明!

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



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