ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 一次存储故障引起的数据库启动错误

一次存储故障引起的数据库启动错误

原创 Linux操作系统 作者:jason_wang2002 时间:2009-04-19 17:53:44 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的共享内存段不能被清除,后台进程也不能被杀掉,在这种情况下,我只有重启这台服务器来解决问题
重启数据库后,一切正常

有什么更好的方式清除Oracle共享内存段和杀掉后台进程?

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8745319/viewspace-590952/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-03-05

  • 博文量
    35
  • 访问量
    40745