Oracle起動庫時1102報錯處理

anycall2010發表於2009-03-16
一、提出問題
  實際過程中有時我們會遇到這樣的問題,當你用startup試圖啟動資料庫時會遇到ORA-01102的報錯。我們可以在Unix下切換到Oracle的使用者,執行一下oerr ora 1102便會看到有關1102的簡短的描述,如下:
  rp2$[/home/ora2]oerr ora 1102
  01102, 00000, "cannot mount database in EXCLUSIVE mode"
  // *Cause: Some other instance has the database mounted exclusive or shared.
  // *Action: Shutdown other instance or mount in a compatible mode
  看了這個1102的簡短的解釋你一定有些迷惑,因為它有一些的誤導性。如下我便來分析一下問題產生的原因,並給出解決的辦法。
  二、分析原因
  當你啟動資料庫遇到1102報錯時,之前的資料庫的down操作一般都不是正常完成的,或由於一些異常使Oracle在作業系統中殘留一些記憶體結構,Pmon等一幾個程式依然存在等原因使Oracle誤認為Instance依然在執行著,所以庫就沒有啟動,具體說來大體原因有如下幾個:
  1、pmon、smon、lwgw及dbwr這些後臺程式依然存在著
  2、Oracle開闢的共享記憶體沒有釋放掉
  3、"lk" and "sgadef.dbf"這兩個用於鎖記憶體的檔案存在著。
  三、解決問題
  知道了原因,解決起來就簡單多了,辦法如下:
  1、看一下"lk" and "sgadef.dbf"這兩個檔案是不是存在著,如果存在將其刪掉。
  oracle$cd $ORACLE_HOME/dbs
  oracle$ls -l sgadef.dbf
  如果存在刪掉它
  oracle$rm sgadef.dbf
  oracle$ls -l lk
  如果存在刪掉它
  oracle$rm lk
  2、看是不是有後臺程式存在了
  oracle$ps -ef | grep ora_ | grep $ORACLE_SID
  如果有pmon這些後臺程式的殘留,kill -9掉它
  oracle$kill -9 pid
  3、看一下oracle的共享記憶體段及訊號集(semaphores)是不是還存在著
  1)清共享記憶體段
  oracle$ipcs -m --顯示一下,看owner是Oracle使用者的
  oracle$ipcrm -m
  2)清訊號集
  oracle$ipcs -s --顯示一下,看owner是Oracle使用者的
  oracle$ipcrm -s
  四、應該沒問題了,再試一下吧^-^

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8334342/viewspace-567478/,如需轉載,請註明出處,否則將追究法律責任。

相關文章