ora-01102問題的解決

ora-01102問題的解決
server掉電關機,今早數據庫不能正式打開,提示ora-01102錯誤
SQL> startup
ORACLE instance started.
Total System Global Area  252776884 bytes
Fixed Size                   450996 bytes
Variable Size             218103808 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
ORA-01102: cannot mount database in EXCLUSIVE mode
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> exit
經檢查發現用於鎖內存的文件lk<sid>文件沒有被刪除,刪除後,數據庫成功open。
另:
出現1102錯誤可能有以下幾種可能:
一、在HA系統中,已經有其他節點啓動了實例,將雙機共享的資源(如磁盤陣列上的裸設備)佔用了;
二、說明Oracle被異常關閉時,有資源沒有被釋放,一般有以下幾種可能,
1、 Oracle的共享內存段或信號量沒有被釋放;
2、 Oracle的後臺進程(如SMON、PMON、DBWn等)沒有被關閉;
3、 用於鎖內存的文件lk<sid>和sgadef<sid>.dbf文件沒有被刪除。
如果懷疑是共享內存沒有被釋放,可以用以下命令查看:
[oracle@ ~]$ ipcs - s
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 0          oracle    640        4194304    17       
0x00000000 32769      oracle    640        33554432   17       
0x00000000 65538      oracle    640        33554432   17       
0x00000000 98307      oracle    640        33554432   17       
0x00000000 131076     oracle    640        33554432   17
0xd0dccdb8 425987     oracle10g 640        154   
然後它ID號清除共享內存段:
$ipcrm –m 425987
 對於信號量,可以用以下命令查看:
------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0x1466c384 98304      oracle    640        162
0x1466c385 131073     oracle    640        162
0x1466c386 163842     oracle    640        162
0xd0dccdb8 425987     oracle10g 640        154
0xebf842f8 950276     oracle    640        162
0xebf842f9 983045     oracle    640        162
0xebf842fa 1015814    oracle    640        162
根據信號量ID,用以下命令清除信號量:
$ipcrm -s 425987
如果是Oracle進程沒有關閉,用以下命令查出存在的oracle進程:
ps -ef|grep ora
然後 kill -9 <PID>
當發生1102錯誤時,可以按照以下流程檢查、排錯:
1.如果是HA系統,檢查其他節點是否已經啓動實例;
2.檢查Oracle進程是否存在,如果存在則殺掉進程;
3.檢查信號量是否存在,如果存在,則清除信號量;
4.檢查共享內存段是否存在,如果存在,則清除共享內存段;
5.檢查鎖內存文件lk<sid>和sgadef<sid>.dbf是否存在,如果存在,則刪除。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章