下午一位壓測的同事找到我說一套壓測的庫連接報錯,報錯如下圖:
要來ip和實例名登到服務器上看pmon進程還在
ps -ef |grep pmon
查看監聽情況也是正常的
lsnrctl status
這兩項都沒問題,嘗試登錄數據庫,如下圖:
熟悉Oracle的同學一看這個提示信息應該就能感覺到不對,不是正常庫連接的提示信息
查詢數據庫狀態,語句執行報錯如下
語句無法執行,然後轉站去看alert日誌
一直在報類似此種的信息,沒有找到有效的信息,順着日誌往前找到一個關鍵點,16:01:45曾嘗試shutdown數據庫
繼續跟壓測同事溝通,他們嘗試下午重啓數據庫但報權限不足。
感覺很奇怪,shutdown庫怎麼會沒有權限。
我也進行嘗試,shutdown immediate無法執行,shutdown abort也報權限不足
這個問題確定很奇怪,我是用sqlplus / as sysdba登錄的數據庫,怎麼會沒有權限,繼續往下查
查看用戶權限
這臺服務器上裝的是單實例,卻有grid用戶,感覺還是挺怪的。
從上面的輸出來看oracle用戶的權限和所屬組是沒有問題的
查看oracle文件的權限也沒有問題
至此找不到什麼問題了,於是轉站MOS,去查是否有相關文檔
找到一篇ORA-1031 While Starting An Instance As SYSDBA immediately After Applying A Patch (文檔 ID 1475357.1)但與這邊遇到的問題不太一致,文檔的最後有一篇參考文檔ORA-01031 DOING DATABASE STARTUP OR SHUTDOWN (文檔 ID 1008507.6)
裏面提到了TWO_TASK這個環境變量,以前數據庫出問題也跟這個變量有關,於是查看環境變量沒有配置這個變量
順着這個思路我查看了整個oracle用戶的環境變量找到了問題所在
原來oracle用戶中的PATH路徑配置了/u01/app/11.2.0/grid/bin這個路徑,權限不對
於是把.bash_profile中的PATH進行修改
重新登錄oracle用戶
再次sqlplus / as sysdba登錄數據庫,重啓,問題解決