今天大黃蜂同學重啟虛擬機之后再鏈接數據庫就報了這個錯,先查看了一下監聽的狀態
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_HOME
或ORACLE_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 個處理程序...
命令執行成功
參考鏈接: