今天開啟oracle服務登陸oracle數據庫輸入用戶名和密碼莫名其妙的報錯:
ORA_01034:ORACLE not available
ORA_27101:shared memory realm does not exist

如圖所示Sqlplus連接時出現這個錯誤;在網上查了一下出現ORA-01034和ORA-27101的原因是多方面的:主要是oracle當前的服務不可用,shared memory realm does not exist,是因為oracle沒有啟動或沒有正常啟動,共享內存並沒有分配給當前實例.所以,通過設置實例名,再用操作系統身份驗證的方式,啟動數據庫。這樣數據庫就正常啟動了,就不會報ORA-01034和ORA-27101兩個啟動異常了。
還有就是可能是登錄數據庫后,不正常的退出,比如直接關掉窗口,而這時數據庫里有未完成的動作,再次登錄時就會提示“insufficient privileges”的報錯,SQL>shutdown immediate; SQL>startup;就恢復正常了。
比較一下啟動和沒啟動的內存大小:查看任務管理器下oracle.exe所占內存,正常oracle.exe所占內存如下:

當oracle.exe所占內存為幾十兆說明Oracle數據庫沒有啟動:

解決步驟:
1.先看oracle的監聽和oracle的服務是否都啟動了。啟動oracle監聽:cmd命令行窗口下,輸入lsnrctl start,回車即啟動監聽。
2 查看oracle的sid叫什么,比如創建數據庫的時候,實例名叫“orcl”,那么先手工設置一下oralce的orcl,cmd命令窗口中,set ORACLE_SID=orcl.
3.進入SQL:輸入sqlplus /nolog 回車或者輸入 conn / as sysdba;回車
提示:SQL> conn sys/123456 as sysdba
已連接到空閑例程。
4.再輸入startup,回車.這步是啟動oracle服務。如果startup啟動被告知已經啟動了,可以先輸入shutdown immediate;等shutdown結束之后,再輸入startup。
到這里之后又報錯:
SQL> startup
ORA-00119: invalid specification for system parameter LOCAL_LISTENE
ORA-00132: syntax error or unresolved network name 'LISTENER_ORCL'
alert log 中的錯誤如下:
USER (ospid: 17619): terminating the instance due to error 119
Instance terminated by USER, pid = 17619
5.這個報錯是因為檢查$ORACLE_HOME/network/admin/tnsnames.ora中的network name,發現沒有LISTENER_ORC的監聽名。
將本機的tnsnames.ora中的network name修改為LISTENER_ORCL,重啟解決。
LISTENER_ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
6.成功:
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 2566914048 bytes
Fixed Size 3048920 bytes
Variable Size 671091240 bytes
Database Buffers 1879048192 bytes
Redo Buffers 13725696 bytes
數據庫裝載完畢。
數據庫已經打開。
