您好,登錄后才能下訂單哦!
今天啟動rac數據庫一個節點時報錯了!
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
Google了一下發現一個寫的非常好的帖子,詳細內如如下(被我修改過了!)
分析原因:
一、在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>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。