ORA-01102錯誤分析

xinxinhg發表於2004-11-10

STARTUP時的錯誤!

[@more@]

檢查本機是否有兩個Oracle 服務,啟動時可以制定那一個啟動.
c:>Set Oracle_sid=test1
c:>sqlplus /nolog
sql>conn / as sysdba
sql>startup mount pfile='fullpath'

補充:

作者Blog:http://blog.csdn.net/hrb_qiuyb/

Oracle起動庫時1102報錯處理  

一、提出問題

 

實際過程中有時我們會遇到這樣的問題,當你用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依然在執行著,所以庫就沒有啟動,具體說來大體原因有如下幾個:

 

1pmonsmonlwgwdbwr這些後臺程式依然存在著

2Oracle開闢的共享記憶體沒有釋放掉

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   --顯示一下,ownerOracle使用者的

oracle$ipcrm -m

 

2)清訊號集

 

oracle$ipcs -s   --顯示一下,ownerOracle使用者的

oracle$ipcrm -s

 

四、應該沒問題了,再試一下吧^-^

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