数据库异常关闭后无法启动问题处理
生活随笔
收集整理的這篇文章主要介紹了
数据库异常关闭后无法启动问题处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
某系統突然掉電,系統啟動后發現Oracle無法啟動。啟動時報如下錯誤: <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
?
ORA-01102 cannot mount database in EXCLUSIVE mode ??
出現1102錯誤可能有以下幾種可能:?
一、在HA系統中,已經有其他節點啟動了實例,將雙機共享的資源(如磁盤陣列上的裸設備)占用了;?
??
二、說明Oracle被異常關閉時,有資源沒有被釋放,一般有以下幾種可能,?
1、 Oracle的共享內存段或信號量沒有被釋放;?
2、 Oracle的后臺進程(如SMON、PMON、DBWn等)沒有被關閉;?
3、 用于鎖內存的文件lk<sid>和sgadef<sid>.dbf文件沒有被刪除。?
首先,雖然我們的系統是HA系統,但是備節點的實例始終處在關閉狀態,這點通過在備節點上查數據庫狀態可以證實。?
其次、是因系統掉電引起數據庫宕機的,系統在接電后被重啟,因此我們排除了第二種可能種的1、2點。最可疑的就是第3點了。 查$ORACLE_HOME/dbs目錄: $ cd $ORACLE_HOME/dbs $ ls sgadef* sgadef* not found $ ls lk* lkORA92 ? 果然,lk<sid>文件沒有被刪除。將它刪除掉?
$ rm lk* ? 再啟動數據庫,成功。?
如果懷疑是共享內存沒有被釋放,可以用以下命令查看:?
$ipcs -mop IPC status from /dev/kmem as of Thu Jul? 6 14:41:43 2006 T????? ID???? KEY??????? MODE??????? OWNER???? GROUP NATTCH? CPID? LPID Shared Memory: m?????? 0 0x411c29d6 --rw-rw-rw-????? root????? root????? 0?? 899?? 899 m?????? 1 0x4e0c0002 --rw-rw-rw-????? root????? root????? 2?? 899?? 901 m?????? 2 0x4120007a --rw-rw-rw-????? root????? root????? 2?? 899?? 901 m? 458755 0x0c6629c9 --rw-r-----????? root?????? sys????? 2? 9113 17065 m?????? 4 0x06347849 --rw-rw-rw-????? root????? root????? 1? 1661? 9150 m?? 65541 0xffffffff --rw-r--r--????? root????? root????? 0? 1659? 1659 m? 524294 0x5e100011 --rw-------????? root????? root????? 1? 1811? 1811 m? 851975 0x5fe48aa4 --rw-r-----??? oracle? oinstall???? 66? 2017 25076 ? 然后它ID號清除共享內存段:?
$ipcrm –m 851975 ? 對于信號量,可以用以下命令查看:?
$ ipcs -sop IPC status from /dev/kmem as of Thu Jul? 6 14:44:16 2006 T????? ID???? KEY??????? MODE??????? OWNER???? GROUP Semaphores: s?????? 0 0x4f1c0139 --ra-------????? root????? root ... ... s????? 14 0x6c200ad8 --ra-ra-ra-????? root????? root s????? 15 0x6d200ad8 --ra-ra-ra-????? root????? root s????? 16 0x6f200ad8 --ra-ra-ra-????? root????? root s????? 17 0xffffffff --ra-r--r--????? root????? root s????? 18 0x410c05c7 --ra-ra-ra-????? root????? root s????? 19 0x00446f6e --ra-r--r--????? root????? root s????? 20 0x00446f6d --ra-r--r--????? root????? root s????? 21 0x00000001 --ra-ra-ra-????? root????? root s?? 45078 0x67e72b58 --ra-r-----??? oracle? oinstall ??
根據信號量ID,用以下命令清除信號量:?
$ipcrm -s 45078 ? 如果是Oracle進程沒有關閉,用以下命令查出存在的oracle進程:?
$ ps -ef|grep ora ? oracle 29976???? 1? 0? Jun 22? ????????? 0:52 ora_dbw0_ora92 ? oracle 29978???? 1? 0? Jun 22? ????????? 0:51 ora_dbw1_ora92 ? oracle? 5128???? 1? 0? Jul? 5? ????????? 0:00 oracleora92 (LOCAL=NO) ... ... ? 然后用kill -9命令殺掉進程?
$kill -9 <PID> ? 總結:?
當發生1102錯誤時,可以按照以下流程檢查、排錯:?
如果是HA系統,檢查其他節點是否已經啟動實例; 檢查Oracle進程是否存在,如果存在則殺掉進程; 檢查信號量是否存在,如果存在,則清除信號量; 檢查共享內存段是否存在,如果存在,則清除共享內存段; 檢查鎖內存文件lk<sid>和sgadef<sid>.dbf是否存在,如果存在,則刪除。轉載于:https://blog.51cto.com/baochangjun/200581
總結
以上是生活随笔為你收集整理的数据库异常关闭后无法启动问题处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux常用的脚本、命令
- 下一篇: linux cmake编译源码,linu