ORA-01102: cannot mount database in EXCLUSIVE mode
說明 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 -mopIPC status from /dev/kmem as of Thu Jul 6 14:41:43 2006T ID KEY MODE OWNER GROUP NATTCH CPID LPIDShared Memory:m 0 0×411c29d6 –rw-rw-rw- root root 0 899 899m 1 0×4e0c0002 –rw-rw-rw- root root 2 899 901m 2 0×4120007a –rw-rw-rw- root root 2 899 901m 458755 0×0c6629c9 –rw-r—– root sys 2 9113 17065m 4 0×06347849 –rw-rw-rw- root root 1 1661 9150m 65541 0xffffffff –rw-r–r– root root 0 1659 1659m 524294 0×5e100011 –rw——- root root 1 1811 1811m 851975 0×5fe48aa4 –rw-r—– oracle oinstall 66 2017 25076然后它ID號清除共享內存段:$ipcrm –m 851975對于信號量,可以用以下命令查看:$ ipcs -sopIPC status from /dev/kmem as of Thu Jul 6 14:44:16 2006T ID KEY MODE OWNER GROUPSemaphores:s 0 0×4f1c0139 –ra——- root root… …s 14 0×6c200ad8 –ra-ra-ra- root roots 15 0×6d200ad8 –ra-ra-ra- root roots 16 0×6f200ad8 –ra-ra-ra- root roots 17 0xffffffff –ra-r–r– root roots 18 0×410c05c7 –ra-ra-ra- root roots 19 0×00446f6e –ra-r–r– root roots 20 0×00446f6d –ra-r–r– root roots 21 0×00000001 –ra-ra-ra- root roots 45078 0×67e72b58 –ra-r—– oracle oinstall根據信號量ID,用以下命令清除信號量:$ipcrm -s 45078如果是 oracle 進程沒有關閉,用以下命令查出存在的 oracle 進程:$ ps -ef|grep oraoracle 29976 1 0 Jun 22 ? 0:52 ora_dbw0_ora92oracle 29978 1 0 Jun 22 ? 0:51 ora_dbw1_ora92oracle 5128 1 0 Jul 5 ? 0:00 oracleora92 (LOCAL=NO)… …然后用kill -9命令殺掉進程$kill -9 <PID>總結:當發生1102錯誤時,可以按照以下流程檢查、排錯:1.如果是HA系統,檢查其他節點是否已經啟動實例;2.檢查 oracle 進程是否存在,如果存在則殺掉進程;3.檢查信號量是否存在,如果存在,則清除信號量;4.檢查共享內存段是否存在,如果存在,則清除共享內存段;5.檢查鎖內存文件lk<sid>和sgadef<sid>.dbf是否存在,如果存在,則刪除。 |
新聞熱點
疑難解答