Oracle逻辑坏块

作者简介:孙显鹏,Oracle 十年从业经验,拥有11G ocp认证,精通内部原理,擅长调优,解决疑难问题,致力于帮助客户解决生产过程过出现的性能问题,提高生产效率!爱好书法!

逻辑坏块:数据块头下面错误表示逻辑坏块。如事务层错误,数据层错误。avsp是数据层的一个标志位,avsp标志位存在错误属于逻辑坏块。下面的测试通过修改数据块中数据层的avsp (可用空间值)达到模拟逻辑坏块,使用SYS用户操作。

操作步骤:

建立测试表

修改134号块,先dump 134 块,备份该数据文件。

查询数据:

备份数据文件:

BBED 修改数据块AVSP:

bbed LIST 文件内容如下:

转换为十进制,注意linux是小字节

修改avsp:

验证和修复坏块

使用rman 验证:

默认只验证物理坏块,没有发现坏块。

验证逻辑坏块:

查看trace文件:

测试操作该文件和表:

没有报错,正常备份。

没有报错,正常查询。注意修改该数据块时会报错的。因为读数据块只是检测,而修改数据块会检查数据块此时会报错。

上面模拟了逻辑坏块,可以标记逻辑坏块为软坏块。

此时我们可以通过下面方式标记该块为软坏块,也即是下次读该块时也报ora-1578,不再允许操作该块,标记为软坏块的目的就是防止再次操作该块造成其他问题。

  • 设置db_block_checking为true
  • 通过dbms_repair.fix_corrupt_blocks标记逻辑坏块为软坏块

我们通过方法2标记该块为软坏块:

  •  建立REPAIR_TABLE

  •  CHECK 该表

  • 标记坏块

再次查询报错:存在坏块

使用RMAN 验证修复:

报错了,看看详细信息:

哦,SYS 用户下的表无法修复!

system,sysaux,或者SYS用户下的表无法恢复,也不会通过rman标记。所以不要把用户数据建立在SYS表空间下。

跳过该坏块:

再次查询表OK!

接下来需要重建表,删除存在坏块的表。

其实上面虽然报错,但是可以通过BLOCKRECOVER恢复的,继续测试:

再次检查没有坏块!

 

 

未经允许不得转载:Oracle一体机用户组 » Oracle逻辑坏块

相关推荐