ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 存储坏道造成数据库hang住

存储坏道造成数据库hang住

原创 Linux操作系统 作者:yezhibin 时间:2009-12-02 16:49:27 0 删除 编辑
 一、现象描述: 

      在测试环境HP-UX 11.2平台上oracle 10.2.0.4,突然数据库hang住,使用SQLPLUS登入,登入界面hang住,没有显示任何出错信息,无法访问bdump下目录,使得不能读取alert.log日志文件。

 二、分析:

       1、最先怀疑是操作系统问题,机器重启后,问题依然存在

       2、查看系统日志,出现如下错误
             vmunix: SCSI: Write error -- dev: b 31 0x1b6300, errno: 126, resid: 8192
   
       3、使用exportvg和importvg后发现,原先的用于数据库数据文件的逻辑卷全部变成了lvol??的卷组名。

       4、初步诊断是EMC DMX800存储盘出问题,反馈厂家检查,发现同一个RAID5磁盘组中的两个磁盘出现了坏道。

      5、需要对数据库重新进行迁移到新的磁盘。

 三、数据库迁移
 
      1、mount 文件系统(包含udump等目录)出现如下错误
     
          $ mount /dev/xxxxx/lvol1 /home/xxxx
             system error "UX:vxfs mount: ERROR: V-3-21268: /dev/xxxxx/lvol1 is 
                                      corrupted. needs checking"
    
       2、修复该文件系统
        
         $fsck -F vxfs -o full, nolog /dev/xxxxxx/lvol1
         $mount /dev/xxxxx/lvol1 /home/xxxx

       3、因为lv的卷名已发生了变化,需要通过strings命令查看lv信息,确认逻辑卷是否可读,并定位该逻辑卷名可能属于的数据库表空间

       4、先恢复控制文件,导出控制文件信息,读取控制文件中数据文件信息
          SQL>alter database backup controlfile to trace

       5、将每个数据文件中的逻辑卷硬dd命令拷贝到新的磁盘中所创建的lv
         dd  if=/dev/xxxx/rlvolxx  f=/dev/xxx/rnewxxlv bs=4k

       6、dd完成后,重新按照控制文件中数据文件所指定的目录进行ln -s命令操作

       7、重新打开数据库成功

四、其他

 在查看alert.log文件中发现数据库损坏前出现如下错误:
 ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1,
                        osid 7789'
该问题解决可参看metelink 779552.1
从文档中知道与 Bug 7692631和Bug 7914003相关,解决办法如下:

1、If you want to avoid the kill of the blocker (background or 
   non-background process) you can set
   _kill_controlfile_enqueue_blocker=false.

2、In order to prevent a background blocker from being killed, you can
   set the following init.ora parameter to 1 (default is 3).
   _kill_enqueue_blocker=1


        
       

 

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

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

注册时间:2008-12-18

  • 博文量
    159
  • 访问量
    559681