修复处于recover状态的oracle数据文件
的有关信息介绍如下:修复处于recover状态的oracle数据文件
问题情景:oracle数据库部分数据文件存放在存储上,由于网络问题,导致存储处于read only 状态,从而导致数据库部分文件处于recover状态!
问题报错情况:
1:查询某张表报错
2:检测发现部分数据文件处于recover状态
3:最终原因是存储处于read only状态,网络引起的
解决步骤 :
1:关闭数据库
2:卸载挂载lvm
3:确定网络正常后激活VG
4:动挂载LVM
5:启动数据库
6:恢复处于recover状态的数据文件
7:online之前恢复后的数据文件
注意:
lvm具体参看可以参考我的百度经验:lvm inactive问题定位及解决
http://jingyan.baidu.com/article/e4d08ffd8f0c0d0fd3f60d55.html
1:查询某张表报错
SQL> select max(jgsj) from sa.clxsgj;
select max(jgsj) from sa.clxsgj
*
ERROR at line 1:
ORA-00376: file 11 cannot be read at this time
ORA-01110: data file 11: '/zxx_orcl/oradata/320db005.dbf'
ORA-00376: file 11 cannot be read at this time
2:检测发现部分数据文件处于recover状态
select * from dba_data_files;
3:最终原因是存储处于read only状态
[root@DB01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 897G 771G 80G 91% /
tmpfs 16G 0 16G 0% /dev/shm
/dev/mapper/OraBack-backupone
6.9T 3.8T 2.8T 58% /backup/oracle/orcl/fullbackup
/dev/mapper/OraBack-backuptwo
6.9T 1.5T 5.1T 23% /backup/oracle/orcl/archbackup
/dev/mapper/OraBack-backupthree
1008G 8.5G 949G 1% /backup/oracle/orcl/ctlbackup
/dev/mapper/OraBack-orcl
3.0T 1001G 1.9T 35% /zxx_orcl
[dbadmin@DB01 oradata]$ mkdir aaa
mkdir: cannot create directory `aaa': Read-only file system
1:关闭数据库
shutdown immediate
2:卸载挂载lvm
存储是通过iscsi映射到服务器上,然后通过创建vg ,再创建逻辑卷,挂载逻辑卷,将数据文件存放在逻辑卷上。
[root@DB01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 897G 771G 80G 91% /
tmpfs 16G 0 16G 0% /dev/shm
/dev/mapper/OraBack-backupone
6.9T 3.8T 2.8T 58% /backup/oracle/orcl/fullbackup
/dev/mapper/OraBack-backuptwo
6.9T 1.5T 5.1T 23% /backup/oracle/orcl/archbackup
/dev/mapper/OraBack-backupthree
1008G 8.5G 949G 1% /backup/oracle/orcl/ctlbackup
/dev/mapper/OraBack-orcl
3.0T 1001G 1.9T 35% /zxx_orcl
[root@DB01 ~]# umount /backup/oracle/orcl/fullbackup
[root@DB01 ~]# umount /backup/oracle/orcl/archbackup
[root@DB01 ~]# umount /backup/oracle/orcl/ctlbackup
[root@DB01 ~]# umount /zxx_orcl
3:确定网络正常后激活VG并手动挂载逻辑卷
确定服务器到存储的网络正常后,重启服务器
[root@DB01 ~]# reboot
Broadcast message from root (pts/2) (Thu Aug 27 10:26:17 2015):
The system is going down for reboot NOW!
重启服务器后可以看到:
[root@DB01 ~]# fdisk -l
Disk /dev/sda: 997.9 GB, 997998985216 bytes
255 heads, 63 sectors/track, 121333 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 120810 970406293+ 83 Linux
/dev/sda2 120811 121332 4192965 82 Linux swap / Solaris
Note: sector size is 4096 (not 512)
Disk /dev/sdb: 19993.0 GB, 19993039208448 bytes
255 heads, 63 sectors/track, 303835 cylinders
Units = cylinders of 16065 * 4096 = 65802240 bytes
存储挂载过来了。lvscan扫描逻辑卷,如果逻辑卷处于失活状态,这时候需要激活VG:
vgchange -ay /dev/OraBack
激活之后,lvscan扫描发现逻辑卷都处于active状态了。可以手动挂载了
4:动挂载LVM
mount lvm名称 挂载目录(一定要和之前的一一对应)
lvm名称通过lvscan扫描获取。挂载成功之后需要验证挂载目录是否可以正常读写
mount /dev/mapper/OraBack-backupone /backup/oracle/orcl/fullbackup
mount /dev/mapper/OraBack-backuptwo /backup/oracle/orcl/archbackup/
mount /dev/mapper/OraBack-backupthree /backup/oracle/orcl/ctlbackup/
mount /dev/mapper/OraBack-orcl /zxx_orcl/
[root@DB01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 897G 768G 83G 91% /
tmpfs 16G 0 16G 0% /dev/shm
/dev/mapper/OraBack-backupone
6.9T 3.8T 2.8T 58% /backup/oracle/orcl/fullbackup
/dev/mapper/OraBack-backuptwo
6.9T 1.5T 5.1T 23% /backup/oracle/orcl/archbackup
/dev/mapper/OraBack-backupthree
1008G 8.5G 949G 1% /backup/oracle/orcl/ctlbackup
/dev/mapper/OraBack-orcl
3.0T 1001G 1.9T 35% /zxx_orcl
[root@DB01 ~]# cd /zxx_orcl/
[root@DB01 zxx_orcl]# ls
aaaa awrrpt_1_28687_28688.html backup lost+found oradata
[root@DB01 zxx_orcl]# rm -rf awrrpt_1_28687_28688.html
[root@DB01 zxx_orcl]# cd aaaa/
挂载目录能够正常读写。
5:启动数据库
这时候我们发现/zxx_orcl的数据文件还是处于recover,再确定存储正常之后,就可以进行恢复工作了!
6:恢复处于recover状态的数据文件
recover datafile 11 ;
recover datafile 10 ;
recover datafile 9 ;
recover datafile 8 ;
recover datafile 7 ;
recover datafile 6 ;
recover datafile 31 ;
recover datafile 32 ;
recover datafile 33 ;
recover datafile 34 ;
recover datafile 35 ;
recover datafile 36 ;
recover datafile 37 ;
recover datafile 38 ;
recover datafile 39 ;
recover datafile 40 ;
recover datafile 41 ;
recover datafile 42 ;
recover datafile 43 ;
recover datafile 44 ;
recover datafile 45 ;
recover datafile 46 ;
recover datafile 47 ;
recover datafile 48 ;
数据文件恢复之后,会变成offline状态,这时候需要将数据文件online
7:online之前恢复后的数据文件
ALTER DATABASE DATAFILE 11 online;