測試環境中oracle數據庫這臺服務器不知因何原因異常關機了。重新開機之後嘗試恢複相關應用發現啓動數據庫失敗。期間翻山越嶺走了段曲折小路。先把處理流程梳理一下以便後期遇到此類可以快速解決。
begin↓
一、數據庫
1.機器啓動之後登錄服務器使用sqlplus / as sysdba 登錄數據庫發現數據庫並沒有啓動之前把數據庫服務添加過開機自啓動
2.使用startup命令啓動數據庫報錯了
SYS@orcl>startup;
ORACLE 例程已經啓動。
Total System Global Area 2471931904 bytes
Fixed Size 2255752 bytes
Variable Size 671089784 bytes
Database Buffers 1778384896 bytes
Redo Buffers 20201472 bytes
ORA-01102: cannot mount database in EXCLUSIVE mode
3.關掉實例嘗試一步步啓動啓動到mount階段時還是報同樣的錯
4.網絡上搜索了一下 ORA-01102找到了解決方法
這個錯誤主要是lk<SID>文件造成的該文件位於ORALCE_HOME下的dbs目錄下,
這個lk<SID>的主要作用是說明DATABASE MOUNT上了,不用在MOUNT了.DATABASE UNMOUNT 後會刪除掉,如果DATABASE確實沒有MOUNT,這個文件在你也MOUNT上,只有手工刪除
5.談到具體解決方法引入另外一個命令/sbin/fuser
/sbin/fuser的主要功能是使用文件或者套接字來表示識別進程。常把它用來查看相關進程和殺死相關進程。此處用來清除lk<SID>文件
/sbin/fuser -u /u01/app/oracle/product/11.2.0/db_1/dbs/lkHSDB 查詢佔用該臨時文件的進程pid和username
/sbin/fuser -k /u01/app/oracle/product/11.2.0/db_1/dbs/lkHSDB 直接kill相關pid釋放文件lk<SID>文件
/sbin/fuser -u /u01/app/oracle/product/11.2.0/db_1/dbs/lkHSDB 再次查看發現已經沒有那些進程了
6.再次啓動數據庫一切ok