ORA-01210: data file header is media corrupt

在现网环境中,启动数据库的时候,出现了报错ORA-01210: data file header is media corrupt。刚开始以为是datafile header块头坏了。但是经过bbed校验后,发现都是正确的文件格式。所以,我们考虑了另一种情况,是不是磁盘绑定,绑错位了。所以下面就是我们模拟该问题,并提供解决思路。当出现ORA-01210情况的时候,不一定就是数据文件头块坏了,还有其他的可能性。下面就是具体的模拟并解决过程。

问题现象

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01122: database file 6 failed verification check
ORA-01110: data file 6: ‘/dev/raw/raw1’
ORA-01210: data file header is media corrupt

模拟过程

说明下:现网环境用的还是raw,所以以下就以raw方式模拟

加盘 创建lv

[root@oracle11g ~]# pvcreate /dev/sdb
Physical volume “/dev/sdb” successfully created
[root@oracle11g ~]# vgcreate vg_app /dev/sdb
Volume group “vg_app” successfully created
[root@oracle11g ~]# lvcreate -L 50M -n lv_wahaha1 vg_app
Rounding up size to full physical extent 52.00 MiB
Logical volume “lv_wahaha1” created.
[root@oracle11g ~]# lvcreate -L 48m -n lv_wahaha2 vg_app
Logical volume “lv_wahaha2” created.
[root@oracle11g ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_wahaha1 vg_app -wi-a----- 52.00m
lv_wahaha2 vg_app -wi-a----- 48.00m
lv_root vg_system -wi-ao---- 47.80g
lv_swap vg_system -wi-ao---- 2.00g
[root@oracle11g ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg_app 1 2 0 wz–n- 100.00m 0
vg_system 1 2 0 wz–n- 49.80g 0

raw映射

[root@oracle11g ~]# raw /dev/raw/raw1 /dev/mapper/vg_app-lv_wahaha1
/dev/raw/raw1: bound to major 253, minor 2
[root@oracle11g ~]# raw /dev/raw/raw2 /dev/mapper/vg_app-lv_wahaha2
/dev/raw/raw2: bound to major 253, minor 3
查看raw的信息:
[root@oracle11g ~]# raw -qa
/dev/raw/raw1: bound to major 253, minor 2
/dev/raw/raw2: bound to major 253, minor 3
查看本机设备
[root@oracle11g ~]# ls -ltr /dev/mapper/vg_*
lrwxrwxrwx. 1 root root 7 Jul 31 14:55 /dev/mapper/vg_system-lv_swap -> …/dm-1
lrwxrwxrwx. 1 root root 7 Jul 31 14:55 /dev/mapper/vg_system-lv_root -> …/dm-0
lrwxrwxrwx. 1 root root 7 Jul 31 15:00 /dev/mapper/vg_app-lv_wahaha1 -> …/dm-2
lrwxrwxrwx. 1 root root 7 Jul 31 15:02 /dev/mapper/vg_app-lv_wahaha2 -> …/dm-3
[root@oracle11g ~]# ls -ltr /dev/dm-*
brw-rw----. 1 root disk 253, 1 Jul 31 14:55 /dev/dm-1
brw-rw----. 1 root disk 253, 0 Jul 31 14:55 /dev/dm-0
brw-rw----. 1 root disk 253, 2 Jul 31 15:00 /dev/dm-2
brw-rw----. 1 root disk 253, 3 Jul 31 15:02 /dev/dm-3
[root@oracle11g datafile]# ll /dev/raw/raw*
crw-rw----. 1 root disk 162, 1 Jul 31 15:11 /dev/raw/raw1
crw-rw----. 1 root disk 162, 2 Jul 31 15:11 /dev/raw/raw2
crw-rw----. 1 root disk 162, 0 Jul 31 14:55 /dev/raw/rawctl
修改raw权限
[root@oracle11g datafile]# chown oracle:oinstall /dev/raw/raw1
[root@oracle11g datafile]# chown oracle:oinstall /dev/raw/raw2
[root@oracle11g datafile]# ll /dev/raw/raw*
crw-rw----. 1 oracle oinstall 162, 1 Jul 31 15:21 /dev/raw/raw1
crw-rw----. 1 oracle oinstall 162, 2 Jul 31 15:11 /dev/raw/raw2
crw-rw----. 1 root disk 162, 0 Jul 31 14:55 /dev/raw/rawctl

在raw上面创建表空间

SQL> create tablespace tbs1 datafile ‘/dev/raw/raw1’ size 20M;

Tablespace created.

SQL> create tablespace tbs2 datafile ‘/dev/raw/raw2’ size 20M;

Tablespace created.

SQL> create table wahaha tablespace tbs1 as select * from dba_users;

Table created.

SQL> select name,file# from v$datafile;
SQL> set pages 1000 lines 1000
SQL> col name for a100

NAME FILE#


/u01/app/oracle/oradata/ZHUO/datafile/o1_mf_system_gxd20h14_.dbf 1
/u01/app/oracle/oradata/ZHUO/datafile/o1_mf_sysaux_gxd20k1y_.dbf 2
/u01/app/oracle/oradata/ZHUO/datafile/o1_mf_undotbs1_gxd20lnp_.dbf 3
/u01/app/oracle/oradata/ZHUO/datafile/o1_mf_users_gxd20pxk_.dbf 4
/u01/app/oracle/oradata/ZHUO/datafile/o1_mf_zhuo_gxdcfr5s_.dbf 5
/dev/raw/raw1 6
/dev/raw/raw2 7

7 rows selected.

模拟报错

模拟主机异常宕机
[root@oracle11g ~]# reboot

重新启动数据库
SQL> startup
ORACLE instance started.

Total System Global Area 521936896 bytes
Fixed Size 2254824 bytes
Variable Size 352323608 bytes
Database Buffers 163577856 bytes
Redo Buffers 3780608 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: ‘/dev/raw/raw1’
发现raw没有映射,手动重新映射。(这里模拟我们不知道lv和raw之间的对应关系,我们手动映射错了)
[root@oracle11g ~]# chown oracle:oinstall /dev/raw/raw1
[root@oracle11g ~]# chown oracle:oinstall /dev/raw/raw2
[root@oracle11g ~]# ls -tlr /dev/raw/*
crw-rw----. 1 root disk 162, 0 Jul 31 15:24 /dev/raw/rawctl
crw-rw----. 1 oracle oinstall 162, 1 Jul 31 15:38 /dev/raw/raw1
crw-rw----. 1 oracle oinstall 162, 2 Jul 31 15:38 /dev/raw/raw2
重启数据库
[oracle@oracle11g ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Fri Jul 31 15:39:09 2020

Copyright © 1982, 2013, Oracle. All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01122: database file 6 failed verification check
ORA-01110: data file 6: ‘/dev/raw/raw1’
ORA-01210: data file header is media corrupt
启动数据库报错:ORA-01210。

解决方案

既然是lv的对应关系绑定错位了,那就要知道正确的对应关系。
下面查看现在的绑定对应关系(由于我的是虚拟机,所以major和minor号,没在lv上面显示,在具体的磁盘上面显示)
[root@oracle11g ~]# raw -qa
/dev/raw/raw1: bound to major 253, minor 3
/dev/raw/raw2: bound to major 253, minor 2
[root@oracle11g ~]# ls -ltr /dev/raw/raw*
crw-rw----. 1 root disk 162, 0 Jul 31 15:24 /dev/raw/rawctl
crw-rw----. 1 oracle oinstall 162, 1 Jul 31 15:38 /dev/raw/raw1
crw-rw----. 1 oracle oinstall 162, 2 Jul 31 15:38 /dev/raw/raw2
[root@oracle11g ~]# ls -ltr /dev/mapper/
total 0
crw-rw----. 1 root root 10, 58 Jul 31 15:24 control
lrwxrwxrwx. 1 root root 7 Jul 31 15:24 vg_system-lv_swap -> …/dm-1
lrwxrwxrwx. 1 root root 7 Jul 31 15:24 vg_app-lv_wahaha2 -> …/dm-3
lrwxrwxrwx. 1 root root 7 Jul 31 15:24 vg_app-lv_wahaha1 -> …/dm-2
lrwxrwxrwx. 1 root root 7 Jul 31 15:24 vg_system-lv_root -> …/dm-0
[root@oracle11g ~]# ls -ltr /dev/dm*
brw-rw----. 1 root disk 253, 1 Jul 31 15:24 /dev/dm-1
brw-rw----. 1 root disk 253, 3 Jul 31 15:24 /dev/dm-3
brw-rw----. 1 root disk 253, 2 Jul 31 15:24 /dev/dm-2
brw-rw----. 1 root disk 253, 0 Jul 31 15:24 /dev/dm-0

现在虽然知道file# 6对应着/dev/raw/raw1;file# 7对应/dev/raw/raw2;(从v$datafile.name可以看出对应关系)。但是底层的设备绑定对应关系却是不知道的,即不知道/dev/raw/raw1绑定的vg_app-lv_wahaha2还是vg_app-lv_wahaha1.
有一种方法,因为datafile是存储在存储设备上的,真实存储在磁盘上面的内容是不会混乱的,我们可以直接查看设备上面存储的内容,来判断对应关系。
那么就需要我们知道这个设备上面存储的是file#为多少的文件。所以要定位这个数据文件datafile是几号文件。
所以问题的关键就变为了,存储设备上存储的数据文件的几号文件了,所以以下就是确定存储设备上面的file number了,下面演示集中方法:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值