一、现象描述:
在测试环境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 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博客 ” ,链接:http://blog.itpub.net/354732/viewspace-621579/,如需转载,请注明出处,否则将追究法律责任。