一次儲存故障引起的資料庫啟動錯誤

anycall2010發表於2009-04-19

論壇一篇文章,我們可能經常遇到這樣的錯誤,收藏起來.

 今天一早很多資料庫收到I/O錯誤報警,差不多都是以下格式,都是ORA-27072錯誤

ORA-00345: redo log write error block 72123 count 59
ORA-00312: online log 1 thread 1: '/mnt/dmp/backup2/redo1b.log'
ORA-27072: skgfdisp: I/O error

第一反應是儲存出現問題,立即讓負責這個儲存的工程師檢查,檢查下來確定是儲存的一個模組出現了問題

儲存怎麼解決問題的,這裡就不詳說。我想說的是儲存問題解決以後,資料庫重啟時出現的問題以及怎樣解決它,雖然最後無奈的使用重啟伺服器的方法來解決的,但以下方法也是一種解決問題的思路

在儲存問題解決以後,I/O已經不出現報錯了,這時候資料庫已經不能使用shutdown immediate的方式關閉了,只能使用abort的方式關閉

SQL> shutdown abort
ORACLE instance shut down.
SQL> startup nomount
ORACLE instance started.

Total System Global Area  797513464 bytes
Fixed Size                   452344 bytes
Variable Size             251658240 bytes
Database Buffers          536870912 bytes
Redo Buffers                8531968 bytes
SQL> alter database mount
  2  ;
alter database mount
*
ERROR at line 1:
ORA-01102: cannot mount database in EXCLUSIVE mode

我從網上查到出現ORA-01102錯誤一般是由以下原因引起的
Oracle的共享記憶體段或訊號量沒有被釋放;
Oracle的後臺程式沒有被關閉
用於鎖記憶體的檔案lk和sgadef.dbf檔案沒有被刪除


刪除lkDMP檔案

[oracle@s1dmp04 ~]# cd $ORACLE_HOME/dbs
[oracle@s1dmp04 ~/dbs]# ls -l
total 6540
lrwxrwxrwx    1 oracle   oinstall       39 Jun 28  2004 initdmp.ora -> /opt/oracle/admin/dmp/pfile/initdmp.ora
lrwxrwxrwx    1 oracle   oinstall       39 Jun  3  2004 initdmp.ora.old -> /opt/oracle/admin/dmp/pfile/initdmp.ora
-rw-r--r--    1 oracle   oinstall    12920 Mar  9  2002 initdw.ora
-rw-r--r--    1 oracle   oinstall     8385 Mar  9  2002 init.ora
-rw-rw----    1 oracle   oinstall       24 Apr 11 08:54 lkDMP
-rwSr-----    1 oracle   oinstall     1536 Jan 14  2008 orapwdmp
-rw-r-----    1 oracle   oinstall  6643712 Apr 18 12:05 snapcf_dmp.f
-rw-r-----    1 oracle   oinstall     3584 Apr 19 09:53 spfiledmp.ora
[oracle@s1dmp04 ~/dbs]# rm lk*
rm: remove `lkDMP'? y

SQL> alter database mount;
alter database mount
*
ERROR at line 1:
ORA-00205: error in identifying controlfile, check alert log for more info

再檢查Oracle共享記憶體段和後臺程式

[root@s1dmp04 ~]# ps -ef  | grep ora_
oracle    3271     1  0  2008 ?        00:02:29 ora_lgwr_dmp
oracle    3273     1  0  2008 ?        00:08:59 ora_ckpt_dmp
oracle    5405  5097  0 13:11 pts/2    00:00:00 grep ora_
[root@s1dmp04 ~]# ipcs

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x01055a52 32769      root      764        1024       0                       
0x01055a56 65538      root      764        44         2                       
0x01055a57 98307      root      764        25         2                       
0x01055a58 131076     root      764        25         2                       
0x01055a4e 163845     root      764        532        1                       
0x01055a55 196614     root      764        3780       1                       
0x01055a59 229383     root      764        4          1                       
0x01055a5d 294921     root      764        100        1                       
0x01055a60 327690     root      764        480        1                       
0x00000000 458764     oracle    640        801112064  15         dest         

------ Semaphore Arrays --------
key        semid      owner      perms      nsems      status      

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages   

[root@s1dmp04 root]# ipcrm shm 458764
resource(s) deleted
[root@s1dmp04 root]# ipcs

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000064 0          root      600        1712       2379                    
0x01055a52 32769      root      764        1024       0                       
0x01055a56 65538      root      764        44         2                       
0x01055a57 98307      root      764        25         2                       
0x01055a58 131076     root      764        25         2                       
0x01055a4e 163845     root      764        532        1                       
0x01055a55 196614     root      764        3780       1                       
0x01055a59 229383     root      764        4          1                       
0x7a058eeb 262152     root      660        4          1                       
0x01055a5d 294921     root      764        100        1                       
0x01055a60 327690     root      764        480        1                       
0x7a051606 360459     root      660        8          1                       
0x00000000 458764     oracle    640        801112064  15         dest         

------ Semaphore Arrays --------
key        semid      owner      perms      nsems      status      
0x00000000 65537      root      600        1         
0x00000000 360450     root      600        1         
0x00000000 425987     root      600        1         
0x00000000 491525     root      600        1         
0x00000000 524294     root      600        1         
0x00000000 622599     root      600        1         

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages   
0x6d0559a1 0          root       660        0            0           
今天一早很多資料庫收到I/O錯誤報警,差不多都是以下格式,都是ORA-27072錯誤

ORA-00345: redo log write error block 72123 count 59
ORA-00312: online log 1 thread 1: '/mnt/dmp/backup2/redo1b.log'
ORA-27072: skgfdisp: I/O error

第一反應是儲存出現問題,立即讓負責這個儲存的工程師檢查,檢查下來確定是儲存的一個模組出現了問題

儲存怎麼解決問題的,這裡就不詳說。我想說的是儲存問題解決以後,資料庫重啟時出現的問題以及怎樣解決它,雖然最後無奈的使用重啟伺服器的方法來解決的,但以下方法也是一種解決問題的思路

在儲存問題解決以後,I/O已經不出現報錯了,這時候資料庫已經不能使用shutdown immediate的方式關閉了,只能使用abort的方式關閉

SQL> shutdown abort
ORACLE instance shut down.
SQL> startup nomount
ORACLE instance started.

Total System Global Area  797513464 bytes
Fixed Size                   452344 bytes
Variable Size             251658240 bytes
Database Buffers          536870912 bytes
Redo Buffers                8531968 bytes
SQL> alter database mount
  2  ;
alter database mount
*
ERROR at line 1:
ORA-01102: cannot mount database in EXCLUSIVE mode

我從網上查到出現ORA-01102錯誤一般是由以下原因引起的
Oracle的共享記憶體段或訊號量沒有被釋放;
Oracle的後臺程式沒有被關閉
用於鎖記憶體的檔案lk和sgadef.dbf檔案沒有被刪除


刪除lkDMP檔案

[oracle@s1dmp04 ~]# cd $ORACLE_HOME/dbs
[oracle@s1dmp04 ~/dbs]# ls -l
total 6540
lrwxrwxrwx    1 oracle   oinstall       39 Jun 28  2004 initdmp.ora -> /opt/oracle/admin/dmp/pfile/initdmp.ora
lrwxrwxrwx    1 oracle   oinstall       39 Jun  3  2004 initdmp.ora.old -> /opt/oracle/admin/dmp/pfile/initdmp.ora
-rw-r--r--    1 oracle   oinstall    12920 Mar  9  2002 initdw.ora
-rw-r--r--    1 oracle   oinstall     8385 Mar  9  2002 init.ora
-rw-rw----    1 oracle   oinstall       24 Apr 11 08:54 lkDMP
-rwSr-----    1 oracle   oinstall     1536 Jan 14  2008 orapwdmp
-rw-r-----    1 oracle   oinstall  6643712 Apr 18 12:05 snapcf_dmp.f
-rw-r-----    1 oracle   oinstall     3584 Apr 19 09:53 spfiledmp.ora
[oracle@s1dmp04 ~/dbs]# rm lk*
rm: remove `lkDMP'? y

SQL> alter database mount;
alter database mount
*
ERROR at line 1:
ORA-00205: error in identifying controlfile, check alert log for more info

再檢查Oracle共享記憶體段和後臺程式

[root@s1dmp04 ~]# ps -ef  | grep ora_
oracle    3271     1  0  2008 ?        00:02:29 ora_lgwr_dmp
oracle    3273     1  0  2008 ?        00:08:59 ora_ckpt_dmp
oracle    5405  5097  0 13:11 pts/2    00:00:00 grep ora_
[root@s1dmp04 ~]# ipcs

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x01055a52 32769      root      764        1024       0                       
0x01055a56 65538      root      764        44         2                       
0x01055a57 98307      root      764        25         2                       
0x01055a58 131076     root      764        25         2                       
0x01055a4e 163845     root      764        532        1                       
0x01055a55 196614     root      764        3780       1                       
0x01055a59 229383     root      764        4          1                       
0x01055a5d 294921     root      764        100        1                       
0x01055a60 327690     root      764        480        1                       
0x00000000 458764     oracle    640        801112064  15         dest         

------ Semaphore Arrays --------
key        semid      owner      perms      nsems      status      

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages   

[root@s1dmp04 root]# ipcrm shm 458764
resource(s) deleted
[root@s1dmp04 root]# ipcs

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000064 0          root      600        1712       2379                    
0x01055a52 32769      root      764        1024       0                       
0x01055a56 65538      root      764        44         2                       
0x01055a57 98307      root      764        25         2                       
0x01055a58 131076     root      764        25         2                       
0x01055a4e 163845     root      764        532        1                       
0x01055a55 196614     root      764        3780       1                       
0x01055a59 229383     root      764        4          1                       
0x7a058eeb 262152     root      660        4          1                       
0x01055a5d 294921     root      764        100        1                       
0x01055a60 327690     root      764        480        1                       
0x7a051606 360459     root      660        8          1                       
0x00000000 458764     oracle    640        801112064  15         dest         

------ Semaphore Arrays --------
key        semid      owner      perms      nsems      status      
0x00000000 65537      root      600        1         
0x00000000 360450     root      600        1         
0x00000000 425987     root      600        1         
0x00000000 491525     root      600        1         
0x00000000 524294     root      600        1         
0x00000000 622599     root      600        1         

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages   
0x6d0559a1 0          root       660        0            0           

[root@s1dmp04 root]# ps -ef | grep ora_
oracle    3271     1  0  2008 ?        00:02:29 ora_lgwr_dmp
oracle    3273     1  0  2008 ?        00:08:59 ora_ckpt_dmp
root      5605  5552  0 13:13 pts/2    00:00:00 grep ora_
[root@s1dmp04 root]# kill -9 3271
[root@s1dmp04 root]# kill -9 3273
[root@s1dmp04 root]# ps -ef | grep ora_
oracle    3271     1  0  2008 ?        00:02:29 ora_lgwr_dmp
oracle    3273     1  0  2008 ?        00:08:59 ora_ckpt_dmp
root      5617  5552  0 13:13 pts/2    00:00:00 grep ora_


從上面的操作可以看出,Oracle的共享記憶體段不能被清除,後臺程式也不能被殺掉,在這種情況下,我只有重啟這臺伺服器來解決問題
重啟資料庫後,一切正常

[root@s1dmp04 root]# ps -ef | grep ora_
oracle    3271     1  0  2008 ?        00:02:29 ora_lgwr_dmp
oracle    3273     1  0  2008 ?        00:08:59 ora_ckpt_dmp
root      5605  5552  0 13:13 pts/2    00:00:00 grep ora_
[root@s1dmp04 root]# kill -9 3271
[root@s1dmp04 root]# kill -9 3273
[root@s1dmp04 root]# ps -ef | grep ora_
oracle    3271     1  0  2008 ?        00:02:29 ora_lgwr_dmp
oracle    3273     1  0  2008 ?        00:08:59 ora_ckpt_dmp
root      5617  5552  0 13:13 pts/2    00:00:00 grep ora_


從上面的操作可以看出,Oracle的共享記憶體段不能被清除,後臺程式也不能被殺掉,在這種情況下,我只有重啟這臺伺服器來解決問題
重啟資料庫後,一切正常

原地址:http://www.itpub.net/viewthread.php?tid=1153750&pid=13390240&page=1&extra=#pid13390240

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

相關文章