【正确答案】(1)坏块的简介 Oracle数据文件的坏块可以分为物理坏块和逻辑坏块。物理坏块指的是块格式本身已经损坏,块内的数据没有任何意义。逻辑坏块指的是块内的数据在逻辑上存在问题,比如说索引块的索引值没有按顺序排列导致的逻辑坏块。物理坏块一般是由于内存问题、OS问题、I/O子系统问题或硬件引起的,逻辑坏块一般是由Oracle系统Bug等原因引起的。
坏块通常是通过Oracle的ORA-01578错误报告出来的,详细的损坏描述会在告警日志中打印出来,“oerr ora”对该错误的解释如下:

可能的报错如下:

那么何时进行数据块的一致性检查呢?当一个数据块被读或写的时候,将对块进行一致性检查,检查的内容包括块的版本、块在Block Buffer中的数据块地址,然后根据要求进行校验(checksum)。
块的一致性检查由DB_BLOCK_CHECKSUM和DB_BLOCK_CHECKING两个初始化参数控制。DB_BLOCK_CHECKSUM是一种物理检查,只有在写入(DBWn常规写或用户进程直接路径写入)数据文件时,根据一个CHECKSUM算法计算数据块的校验和,然后写入数据块的一个特定位置,在读取块时再进行检验,主要是为了防止I/O硬件和I/O子系统的错误。DB_BLOCK_CHECKrNG参数主要用于数据块的逻辑一致性检查,但只是在块内,不包括块间的逻辑检查,用于防止在内存中损坏或数据损坏。
(2)坏块的检测方法坏块的检测方法见下表。
坏块的检测方法 
(3)BMR恢复坏块 如果数据库只有很少的数据块被破坏,那么使用块介质恢复(Block Media Recovery, BMR)是较好的块恢复方法。BMR只能用于恢复物理损坏(Physical Corruptions),在数据文件联机时即可恢复相关坏块。BMR主要使用BLOCKRECOVER命令进行恢复坏块,该命令有以下三种使用方式:
1)使用“BLOCKRECOVER CORRUPTION LIST;”命令恢复在V$DATABASE_BLOCK_CORRUPTION视图中报告的所有块。
2)使用“BLOCKRECOVER DATAFILE 1 BLOCK IO;”命令恢复单个块,需要指定文件号和块号。
3)使用“BLOCKRECOVER TABLESPACE TS_USER DBA XXX;”命令恢复某个表空间的坏块,需要指定表空间和数据块地址。
下面给出几个恢复示例:
1)恢复3个数据文件的损坏块:

2)从数据文件复制中恢复一系列块:

3)从指定的TAG备份中恢复块:

4)从用于恢复数据到两天以前的备份中还原、恢复SYSTEM表空间中的两个块:

5)运行备份验证数据库,修复在V$DATABASE_BLOCK_CORRUPTION中记录的所有损坏块:

(4)如何确定坏块的对象名根据绝对文件号和块号确定数据块对象的SQL语句如下:

如下的SQL可以确定段占用的数据块:
