当前位置:数据分析 > 12 oracle数据库坏块--物理坏块-ORA-01578/ORA-01110

12 oracle数据库坏块--物理坏块-ORA-01578/ORA-01110

  • 发布:2023-10-08 16:24

-->

oracle数据库坏块--物理坏块

数据坏块的类型
物理坏块:通常是由磁盘异常、内存问题、存储链问题、IO问题、文件系统问题、Oracle本身等硬件损坏引起的。
逻辑坏块:可能是软件问题引起的,一般是Oracle bug引起的,比如数据块和索引块数据不一致
第三方软件或硬件造成的物理损坏
物理数据坏块的场景
常见的物理块损坏(Physical Block Corruptions)包括块头和块尾信息不一致(Fractured/Incomplete)、校验和值无效、所有数据块信息为0等,
并可能伴有错误ORA-1578和ORA-1110

1.错误标头 - 块的开头(缓存标头)已被无效值损坏

2.块已损坏/不完整 - 块的页眉和页脚不匹配

3.块校验和无效

4.方块放错位置了

5.清零块/ORA-8103模拟

物理坏块模拟——分别模拟5种情况
1。错误标头 - 块的开头(缓存标头)已被无效值损坏

创建表空间 yhqt 数据文件 '/u01/app/oracle/oradata/orcl/yhqt01.dbf' 大小 50M;
创建由 yhqt 默认表空间 yhqt 标识的用户 yhqt;
授予 yhqt dba 权限;
SYS@ orcl >conn yhqt/***
已连接。
YHQT@ orcl >创建表 yhqtest_1(id int,name varchar2(100));
表已创建。 YHQT@ orcl >插入 yhqtest_1 值(1,'yhq');
已创建 1 行。 YHQT@ orcl >提交;
提交完成。 YHQT@ orcl >选择
dbms_rowid.rowid_relative_fno(rowid) rel_fno,
dbms_rowid.rowid_block_number(rowid) 块号
来自 yhqtest_1; 2 3 4 REL_FNO BLOCKNO
---------- ----------
10 135

--使用bbed,手动修改数据块

BBED> 设置文件 10 块 135
文件#10
区块#135 BBED> 地图 /v
文件:/u01/app/oracle/oradata/orcl/yhqt01.dbf (10)
块:135 Dba:0x02800087
-------------------------------------------------- ----------
BBED-00400:无效的块类型 (00)
YHQT@ orcl >改变系统刷新buffer_cache; 系统已更改。
BBED> 设置文件 10 块 135
文件#10
区块#135 BBED> 地图 /v
文件:/u01/app/oracle/oradata/orcl/yhqt01.dbf (10)
块:135 Dba:0x02800087
-------------------------------------------------- ----------
BBED> p kcbh
结构体kcbh,20字节@0
ub1 type_kcbh @0 0x06
ub1 frmt_kcbh @1 0xa2
ub1 备用1_kcbh @2 0x00
ub1 备用2_kcbh @3 0x00
ub4 rdba_kcbh @4 0x02800087
ub4 bas_kcbh @8 0x009e4d78
ub2 wrp_kcbh @12 0x0000
ub1 seq_kcbh @14 0x01 >>01 修改为ff
ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV)
ub2 chkval_kcbh @16 0xf4f8
ub2 备用3_kcbh @18 0x0000
BBED> 修改 /x ff 偏移 14
警告:之前的 BIFILE 内容将会丢失。继续? (是/否)y
文件:/u01/app/oracle/oradata/orcl/yhqt01.dbf (10)
块:135 偏移量:14 至 525 Dba:0x02800087
-------------------------------------------------- ----------------------
ff06f8f4 00000100 00003d59 0100764d 9e000000 000002f8 32008000 80020500
BBED> 总和适用
检查文件 10、块 135 的值:
当前 = 0xf406,必需 = 0xf406

--重启db,并查询

SYS@ orcl >conn yhqt/***
已连接。
YHQT@ orcl >select * from yhqtest_1;
从 yhqtest_1 中选择*
*
第 1 行错误:
ORA-01578: ORACLE 数据块已损坏(文件#10,块#135)
ORA-01110: 数据文件 10: '/u01/app/oracle/oradata/orcl/yhqt01.dbf'
--报错ORA-01578: ORACLE 数据块已损坏
[oracle@DSI ~]$ tail -n 20 /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
坏块数据:
类型:6 格式:2 rdba:0x02800087
最后更改 scn:0x0000.009e4d78 seq:0xff flg:0x06
备用1:0x0 备用2:0x0 备用3:0x0
尾部一致性值:0x4d780601
检查块头中的值:0xf406
计算块校验和:0x0
重读blocknum=135,file=/u01/app/oracle/oradata/orcl/yhqt01.dbf。发现相同的损坏数据
重读blocknum=135,file=/u01/app/oracle/oradata/orcl/yhqt01.dbf。发现相同的损坏数据
重读blocknum=135,file=/u01/app/oracle/oradata/orcl/yhqt01.dbf。发现相同的损坏数据
重读blocknum=135,file=/u01/app/oracle/oradata/orcl/yhqt01.dbf。发现相同的损坏数据
重读blocknum=135,file=/u01/app/oracle/oradata/orcl/yhqt01.dbf。发现相同的损坏数据
检查器运行发现 1 个新的持久数据故障
2019 年 7 月 12 日星期五 10:46:57
正在将诊断数据转储到目录=[cdmp_20190712104657]中,请求者为(实例=1,osid=2812),摘要=[事件=63755]。
正在目录=[cdmp_20190712104658]中转储诊断数据,请求者为(实例=1,osid=2812),摘要=[事件=63756]。
2019 年 7 月 12 日星期五 10:47:16
扫一扫[inc][]:已完成
扫[inc2][]:已完成
扫荡[inc2][]:已完成 YHQT@ orcl >插入 yhqtest_1 值(1,'yhq');
插入 yhqtest_1 值(1,'yhq')
*
第 1 行错误:
ORA-01578: ORACLE 数据块已损坏(文件#10,块#135)
ORA-01110: 数据文件 10: '/u01/app/oracle/oradata/orcl/yhqt01.dbf'
[oracle@DSI ~]$ dbv 文件=/u01/app/oracle/oradata/orcl/yhqt01.dbf DBVERIFY:发布 11.2.0.4.0 - 于 2019 年 7 月 12 日星期五 10:50:42 发布版权所有 (c) 1982、2011,Oracle 和/或其附属公司。版权所有。 DBVERIFY - 验证开始:FILE = /u01/app/oracle/oradata/orcl/yhqt01.dbf
第 135 页大量涌入 - 很可能媒体已损坏
损坏的块相对 dba:0x02800087(文件 10,块 135)
dbv期间发​​现断裂块:
坏块数据:
类型:6 格式:2 rdba:0x02800087
最后更改 scn:0x0000.009e4d78 seq:0xff flg:0x06
备用1:0x0 备用2:0x0 备用3:0x0
尾部一致性值:0x4d780601
检查块头中的值:0xf406
计算块校验和:0x0 DBVERIFY - 验证完成 检查总页数:6400
处理的总页数(数据):4
失败总页数(数据):0
已处理总页数(索引):0
失败总页数(索引):0
处理的总页数(其他):130
处理的总页数(段):0
失败总页数(段):0
总页数为空:6265
标记为损坏的总页数:1
总页面流入量:1
加密总页数:0
最高区块SCN:10374518 (0.10374518)
YHQT@ orcl >select * from v$database_block_corruption; 文件#块#块CORRUPTION_CHANGE#CORRUPTIO
---------- ---------- ---------- ------------------ -- -------
10 135 1 0 FRACTURED ##发现数据块物理损坏。 我用rman恢复发现没有datafile=10的备份,无法恢复
RMAN> 运行 {blockrecover 数据文件 10 块 135;} 2019 年 7 月 12 日开始恢复
开始完全重新同步恢复目录
完全重新同步完成
分配的通道:ORA_DISK_1
通道 ORA_DISK_1: SID=142 设备类型=DISK RMAN-00571:================================================== =============
RMAN-00569: =============== 错误消息堆栈如下 ===============
RMAN-00571:================================================== =============
RMAN-03002:2019 年 7 月 12 日 10:52:22
恢复命令失败 RMAN-06026:未找到某些目标 - 正在中止恢复
RMAN-06023:找不到要恢复的数据文件 10 的备份或副本 -- 跳过坏块的修复,但是坏的数据丢失了
YHQT@ orcl >alter session set db_file_multiblock_read_count=1;
会话已更改。
YHQT@ orcl >执行 DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('YHQT','YHQTEST_1');
BEGIN DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('YHQT','YHQTEST_1');结尾; *
第 1 行错误:
ORA-06550: 第 1 行,第 7 列:
PLS-00201:必须声明标识符“DBMS_REPAIR.SKIP_CORRUPT_BLOCKS”
ORA-06550: 第 1 行,第 7 列:
PL/SQL:语句被忽略 YHQT@ orcl >conn / as sysdba
已连接。
SYS@ orcl >执行 DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('YHQT','YHQTEST_1'); PL/SQL 过程成功完成。 SYS@ orcl >创建表 YHQT.yhqtest_1_new as select * from YHQT.yhqtest_1;
表已创建。 SYS@ orcl >conn yhqt/***
已连接。
YHQT@ orcl >select * from yhqtest_1_new;
未选择行 YHQT@ orcl >select * from yhqtest_1;
未选择行

2.块已损坏/不完整 - 块的页眉和页脚不匹配

YHQT@ orcl >创建表 yhqtest_2(id int,name varchar2(100));
表已创建。
YHQT@ orcl >插入 yhqtest_2 值(1,'yhq');
已创建 1 行。
YHQT@ orcl >提交;
提交完成。
YHQT@ orcl >改变系统刷新buffer_cache; 系统变了。 YHQT@ orcl >选择
dbms_rowid.rowid_relative_fno(rowid) rel_fno,
dbms_rowid.rowid_block_number(rowid) 块编号
来自 yhqtest_2; 2 3 4 REL_FNO BLOCKNO
---------- ----------
10143
BBED> 设置文件 10 块 143;
文件#10
区块#143 BBED> dump /v 偏移 8188
文件:/u01/app/oracle/oradata/orcl/yhqt01.dbf (10)
块:143 偏移量:8188 至 8191 Dba:0x0280008f
-------------------------------------------------- -----
0106f553升.. <16 bytes per line> BBED> 修改 /x 0106f554
警告:之前的 BIFILE 内容将会丢失。继续? (是/否)y
文件:/u01/app/oracle/oradata/orcl/yhqt01.dbf (10)
块:143 偏移量:8188 至 8191 Dba:0x0280008f
-------------------------------------------------- ----------------------
0106f554 <32 bytes per line> BBED> 总和适用
检查文件 10、块 143 的值:
当前 = 0x46ca,必需 = 0x46ca
--刷新并查询
YHQT@ orcl >改变系统刷新buffer_cache; 系统变了。 YHQT@ orcl >select * from yhqtest_2;
从 yhqtest_2 中选择*
*
第 1 行错误:
ORA-01578: ORACLE 数据块已损坏(文件#10,块#143)
ORA-01110: 数据文件 10: '/u01/app/oracle/oradata/orcl/yhqt01.dbf'
--报错01578 >>>断裂块
更改系统:刷新缓冲区高速缓存
跟踪文件 /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_2890.trc 中的(文件 10,块 143)的十六进制转储
损坏的块相对 dba:0x0280008f(文件 10,块 143)
多块缓冲区读取期间发现损坏的块
坏块数据:
类型:6 格式:2 rdba:0x0280008f
最后更改 scn: 0x0000.009e53f5 seq: 0x1 flg: 0x06
备用1:0x0 备用2:0x0 备用3:0x0
尾部一致性值:0x54f50601
检查块头中的值:0x46ca
计算块校验和:0x0

3.块校验和无效

Checksum是Oracle写入后其他外部因素导致块校验和发生变化的情况
校验和仅由DBWR进程写入,或者直接从磁盘读取

YHQT@ orcl >创建表 yhqtest_3(id int,name varchar2(100)); 表已创建。 YHQT@ orcl >插入 yhqtest_3 值(1,'yhq33333'); 已创建 1 行。 YHQT@ orcl >提交; 提交完成。 YHQT@ orcl >选择
dbms_rowid.rowid_relative_fno(rowid) rel_fno,
dbms_rowid.rowid_block_number(rowid) 块号
来自 yhqtest_3; 2 3 4 REL_FNO BLOCKNO
---------- ----------
10 151
YHQT@ orcl >改变系统刷新buffer_cache; 系统已更改。
BBED> 设置文件 10 块 151
文件#10
区块#151 BBED> p chkval_kcbh
ub2 chkval_kcbh @16 0xc428 BBED>总和
检查文件 10、块 151 的值:
current = 0xc428, required = 0xc428 ###当前校验和=0xc428,请求的校验和也=0xc428,它们一致
--使用dd命令导出10号文件的第151块
[oracle@DSI ~]$ dd if=/u01/app/oracle/oradata/orcl/yhqt01.dbf of=/tmp/yhqt01.dd count=1 跳过=151 bs=8192

1+0 条记录 1+0条记录出
复制 8192 字节 (8.2 kB),8.8344e-05 秒,92.7 MB/秒
[oracle@DSI ~]$ sz /tmp/yhqt01.dd
--sz 进入Windows,用editplus工具打开(十六进制) --用UE工具可以修改,但是editplus好像只能查看不能修改

现在我们将ID为1的记录的ID值从1更改为2,即C1 02更改为C1 03

YHQT@ orcl >从对偶中选择转储(1,16); 转储(1,16)
------------------
Typ=2 Len=2: c1,2--1十六复活对应c102
修改之后上传到linux,用dd
[oracle@DSI ~]$ dd if=/home/oracle/yhqt01.dd of=/u01/app/oracle/oradata/orcl/yhqt01.dbf bs=8192eek=151count=1 conv=notrunc

1+0 条记录 1+0条记录出
复制 8192 字节 (8.2 kB),0.000101711 秒,80.5 MB/秒
重启db
SYS@ orcl >conn yhqt/yhqt
已连接。
YHQT@ orcl >select * from yhqtest_3;
从 yhqtest_3 中选择*
*
第 1 行错误:
ORA-01578: ORACLE 数据块已损坏(文件#10,块#151)
ORA-01110: 数据文件 10: '/u01/app/oracle/oradata/orcl/yhqt01.dbf'
查看警报日志
跟踪文件 /u01/app/oracle/diag/rdbms/orcl/orcl/incident/incdir_64960/orcl_m000_3145_i64960_a.trc 中的(文件 10,块 151)的十六进制转储
损坏的块相对 dba:0x02800097(文件 10,块 151)
验证期间发现错误的检查值
坏块数据:
类型:6 格式:2 rdba:0x02800097
最后更改 scn: 0x0000.009e57b3 seq: 0x1 flg: 0x06
备用1:0x0 备用2:0x0 备用3:0x0
尾部一致性值:0x57b30601
块头中的校验值:0xc428 >>>块头中记录的校验和值为0xc428
计算块校验和:0x1 >>>oracle中异或运算后的校验和值为01
重读blocknum=151,file=/u01/app/oracle/oradata/orcl/yhqt01.dbf。发现相同的损坏数据
如何计算正确的校验和值(续..)
BBED> 设置文件 10 块 151
文件#10
区块#151 BBED> 验证
DBVERIFY - Verification starting
FILE = /u01/app/oracle/oradata/orcl/yhqt01.dbf
BLOCK = 151 Block 151 is corrupt
Corrupt block relative dba: 0x02800097 (file 0, block 151)
Bad check value found during verification
Data in bad block:
type: 6 format: 2 rdba: 0x02800097
last change scn: 0x0000.009e57b3 seq: 0x1 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x57b30601
check value in block header: 0xc428 ======>>>> a
computed block checksum: 0x1 =====>>>>>b DBVERIFY - Verification complete Total Blocks Examined : 1
Total Blocks Processed (Data) : 0
Total Blocks Failing (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing (Index): 0
Total Blocks Empty : 0
Total Blocks Marked Corrupt : 1
Total Blocks Influx : 0
Message 531 not found; product=RDBMS; facility=BBED
BBED> sum
Check value for File 10, Block 151:
current = 0xc428, required = 0xc429
BBED> p chkval_kcbh
ub2 chkval_kcbh @16 0xc428 这里的换算规则 ,上面如果a、b两个值不同,则异或结果为1,如果a、b两个值相同,异或结果为0
checksum=0xc428 XOR 0x1
0xc428=c 4 2 8 =1100 0100 0010 1000
0x1=1 =0001
上面两个值进行异或
1100 0100 0010 1001=c429 BBED> modify /x c429 offset 16 ###将current的checksum值直接修改到请求后的值0xc429
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
File: /u01/app/oracle/oradata/orcl/yhqt01.dbf (10)
Block: 151 Offsets: 16 to 527 Dba:0x02800097 BBED> sum apply
Check value for File 10, Block 151:
current = 0xc429, required = 0xc429 YHQT@ orcl >set pagesize 999
YHQT@ orcl >set linesize 999
YHQT@ orcl >select * from yhqtest_3; ID NAME
---------- ------------------
2 yhq33333 >>>这里的id值之前是1,修改到了2 ,即C1 02改成C1 03

数据坏块相关参数-db_block_checksum

YHQT@ orcl >show parameter db_block_checksum NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_checksum string TYPICAL
--OFF 关闭block checksum 机制,该参数即使设置为off,针对system表空间的block checksum机制也永远都是开启的,仅仅是针对非system表空间。
--TYPICAL 开启基本的block checksum机制,读取的时候检查checksum值,并在最后一个write时记录checksum值
--FULL 在typical模式的基础之上,在进行dml操作时候也会进行checksum比较,针对该block的操作,其对应的redo log在进行写入时也会进行checksum比较。
该参数注意是控制dbwn进程在将block写入到disk时,是否根据存储在block的byte大小进行估算一个checksum值,
并将其写入到data block的cache header中
该参数可以在很大程度上避免坏块的产生,但是会产生一定的额外资源消耗,
当设置typical时,会增加1~2%的资源消耗,当设置为full时,会增加4~5%的资源消耗

数据坏块相关参数- db_block_checking

YHQT@ orcl >show parameter db_block_checking NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_checking string FALSE
--OFF 关闭block checking机制(注意仅仅是关于非system表空间),对于system表空间的block checking机制,是由参数_db_always_check_system_ts控制的,默认是true.
--LOW 较低级别的block 校验检查,仅仅是block header.(注意是block 内容在内存中发生改变时)
--MEDIUM 除包含low级别的校验外,还包括其他的所有非IOT表 block,即我们普通的堆table 数据块.
--FULL 除包含medium级别的检查外,还包括所有的索引块
SQL> alter system set db_block_checking=FULL;
SQL> alter system set db_block_checksum=FULL;

4.The block is misplaced

行锁错位的模拟
BBED> set file 10 block 151
FILE# 10
BLOCK# 151 BBED> p *kdbr
rowdata[]
----------
ub1 rowdata[] @8173 0x2c BBED> x/ rnccc
rowdata[] @8173
----------
flag@8173: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8174: 0x01 --->>>行锁
cols@8175: 2 col 0[] @8176: 2 ---记录内容
col 1[] @8179: yhq33333
BBED> modify /x 00 offset 8174
File: /u01/app/oracle/oradata/orcl/yhqt01.dbf (10)
Block: 151 Offsets: 8174 to 8191 Dba:0x02800097
------------------------------------------------------------------------
000202c1 03087968 71333333 33330106 b357 <32 bytes per line> BBED> sum apply
Check value for File 10, Block 151:
current = 0xc428, required = 0xc428 BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app/oracle/oradata/orcl/yhqt01.dbf
BLOCK = 151 Block Checking: DBA = 41943191, Block Type = KTB-managed data block
data header at 0x926864
kdbchk: xaction header lock count mismatch -----报错
trans=1 ilk=1 nlo=0
Block 151 failed with check code 6108 DBVERIFY - Verification complete Total Blocks Examined : 1
Total Blocks Processed (Data) : 1
Total Blocks Failing (Data) : 1
Total Blocks Processed (Index): 0
Total Blocks Failing (Index): 0
Total Blocks Empty : 0
Total Blocks Marked Corrupt : 0
Total Blocks Influx : 0
Message 531 not found; product=RDBMS; facility=BBED

5.Zeroed out blocks/ORA-8103模拟

YHQT@ orcl >create table yhqtest_4(id int,name varchar2(100)); Table created. begin
for i in 1 .. 5000 loop
insert into yhqtest_4 values(i,'yhq'||i);
commit;
end loop;
end;
/
YHQT@ orcl >SELECT owner, segment_name, EXTENT_ID, FILE_ID, BLOCK_ID, BLOCKS
FROM dba_extents
WHERE segment_name='YHQTEST_4' AND owner='YHQT'; 2 3 OWNER SEGMENT_NAME EXTENT_ID FILE_ID BLOCK_ID BLOCKS
------------------------------ ------------------------------- ---------- ---------- ---------- ----------
YHQT YHQTEST_4 0 10 152 8
YHQT YHQTEST_4 1 10 160 8
YHQT@ orcl >SELECT DISTINCT dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) blk#
FROM YHQTEST_4 ORDER BY 1,2; 2 FILE# BLK#
---------- ----------
10 155
10 156
10 157
10 158
10 159
10 160
10 161
10 163
10 164
10 165
10 166
10 167 12 rows selected.
YHQT@ orcl >conn / as sysdba
Connected.
SYS@ orcl >shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
使用dd命令
[oracle@DSI ~]$ dd if=/dev/zero of=/u01/app/oracle/oradata/orcl/yhqt01.dbf bs=8192 seek=160 count=1 conv=notrunc
1+0 records in
1+0 records out
8192 bytes (8.2 kB) copied, 9.5966e-05 s, 85.4 MB/s
SYS@ orcl >startup
YHQT@ orcl >select count(*) from yhqtest_4;
select count(*) from yhqtest_4
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 10, block # 160)
ORA-01110: data file 10: '/u01/app/oracle/oradata/orcl/yhqt01.dbf' ---坏块检查
YHQT@ orcl >select * from v$database_block_corruption; FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
10 135 1 0 FRACTURED
10 143 1 0 FRACTURED
10 160 1 0 ALL ZERO
RMAN> backup validate datafile 10; Starting backup at 12-JUL-19
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=145 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00010 name=/u01/app/oracle/oradata/orcl/yhqt01.dbf
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
10 FAILED 0 6233 6400 10394764
File Name: /u01/app/oracle/oradata/orcl/yhqt01.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 2 27
Index 0 0
Other 1 140 validate found one or more corrupt blocks
See trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4271.trc for details
Finished backup at 12-JUL-19
[oracle@DSI ~]$ dbv file=/u01/app/oracle/oradata/orcl/yhqt01.dbf DBVERIFY: Release 11.2.0.4.0 - Production on Fri Jul 12 16:45:43 2019 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. DBVERIFY - Verification starting : FILE = /u01/app/oracle/oradata/orcl/yhqt01.dbf
Page 135 is influx - most likely media corrupt
Corrupt block relative dba: 0x02800087 (file 10, block 135)
Fractured block found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x02800087
last change scn: 0x0000.009e4d78 seq: 0xff flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x4d780601
check value in block header: 0xf406
computed block checksum: 0x0 Page 143 is influx - most likely media corrupt
Corrupt block relative dba: 0x0280008f (file 10, block 143)
Fractured block found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x0280008f
last change scn: 0x0000.009e53f5 seq: 0x1 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x54f50601
check value in block header: 0x46ca
computed block checksum: 0x0 Block Checking: DBA = 41943191, Block Type = KTB-managed data block
data header at 0x7fdde45ab064
kdbchk: xaction header lock count mismatch
trans=1 ilk=1 nlo=0
Page 151 failed with check code 6108
Page 160 is marked corrupt
Corrupt block relative dba: 0x028000a0 (file 10, block 160)
Completely zero block found during dbv: DBVERIFY - Verification complete Total Pages Examined : 6400
Total Pages Processed (Data) : 49
Total Pages Failing (Data) : 1
Total Pages Processed (Index): 0
Total Pages Failing (Index): 0
Total Pages Processed (Other): 145
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 6203
Total Pages Marked Corrupt : 3
Total Pages Influx : 2
Total Pages Encrypted : 0
Highest block SCN : 10396346 (0.10396346)
--rman修复,没有备份是不行的
RMAN> run {blockrecover datafile 10 block 143;} Starting recover at 12-JUL-19
using channel ORA_DISK_1 RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 07/12/2019 16:33:16
RMAN-06026: some targets not found - aborting restore
RMAN-06023: no backup or copy of datafile 10 found to restore
--修复
YHQT@ orcl >conn / as sysdba
Connected.
SYS@ orcl >alter session set db_file_multiblock_read_count=1; Session altered. SYS@ orcl >execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('YHQT','YHQTEST_4'); PL/SQL procedure successfully completed. SYS@ orcl >create table YHQT.YHQTEST_4_new as select * from YHQT.YHQTEST_4; Table created. SYS@ orcl >select count(*) from yhqt.yhqtest_4_new; COUNT(*)
----------
4573
SYS@ orcl >select count(*) from yhqt.yhqtest_4; COUNT(*)
----------
4573

下一篇介绍逻辑坏块以及坏块的恢复

-->

相关文章