ORA-01102的解決辦法


啟動數據庫時報錯了!

SQL> startup mount        

ORACLE instance started.

 

Total System Global Area  608174080 bytes

Fixed Size                 1220844 bytes

Variable Size            176164628 bytes

Database Buffers      427819008 bytes

Redo Buffers             2969600 bytes

ORA-01102: cannot mount database in EXCLUSIVE mode

 

解決辦法:

1、重啟系統,有坑能是第一次起庫,而11g自動管理sga和pga的機制沒有調節好導致的。reboot就可以了

2、重啟解決不了,按照以下的操作進行。

 

分析原因:

一、在HA系統中,已經有其他節點啟動了實例,將雙機共享的資源(如磁盤陣列上的裸設備)占用了;

 

二、說明Oracle被異常關閉時,有資源沒有被釋放,一般有以下幾種可能,

1、 Oracle的共享內存段或信號量沒有被釋放;

2、 Oracle的后台進程(如SMON、PMON、DBWn等)沒有被關閉;

3、 用於鎖內存的文件lk<sid>和sgadef<sid>.dbf文件沒有被刪除。

 

解決思路:

當發生1102錯誤時,可以按照以下流程檢查、排錯:

如果是HA系統,檢查其他節點是否已經啟動實例檢查Oracle進程是否存在,如果存在則殺掉進程檢查信號量是否存在,如果存在,則清除信號量檢查共享內存段是否存在,如果存在,則清除共享內存段檢查鎖內存文件lk<sid>和sgadef<sid>.dbf是否存在,如果存在,則刪除。

 

具體做法:

首先,雖然我們的系統是HA系統,但是備節點的實例始終處在關閉狀態,這點通過在備節點上查數據庫狀態可以證實。

其次、是因系統掉電引起數據庫宕機的,系統在接電后被重啟,因此我們排除了第二種可能種的1、2點。最可疑的就是第3點了。

查$ORACLE_HOME/dbs目錄:

$ cd $ORACLE_HOME/dbs

$ ls sgadef*

sgadef* not found

$ ls lk*

/opt/oracle/product/ 10.2.0/db_1/dbs/lkSIMPLY

lkSIMPLY

果然,lk<sid>文件沒有被刪除。將它刪除掉

$ rm lk*

 

再次啟動時又遇到下面的錯誤,不過別擔心,繼續后面的操作就搞定

SQL> startup mount

ORACLE instance started.

 

Total System Global Area  608174080 bytes

Fixed Size    1220844 bytes

Variable Size     176164628 bytes

Database Buffers      427819008 bytes

Redo Buffers    2969600 bytes

ORA-00205: error in identifying control file, check alert log for more info   : (

 

查看共享內存段

[root@simply bdump]# ipcs -map

 

------ Shared Memory Creator/Last-op --------

shmid   owner  cpid    lpid

786444  root    6490   6438

819213  root    6549   6438

1409040 oracle   31502  16728

根據ID號清楚共享內存段

ipcrm –m 1409040

我這里操作是沒有成功的,不過執行了下面的操作就ok了!

 

查看信號量

[root@simply bdump]# ipcs -s

 

key       semid      owner   perms    nsems

0x17ff6454 360448     oracle    640     154

 

清除oracle的信號量

[root@simply bdump]# ipcrm -s 360448

 

再次查詢確認

[root@simply bdump]# ipcs -s

 

------ Semaphore Arrays --------

key  semid  owner  perms   nsems

 

再查詢共享內存段也ok了!

[root@simply bdump]# ipcs -m

 

如果是Oracle進程沒有關閉,

$kill -9 <PID>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM