五.如何查找坏块所含的数据表名称和数据的rowid
5.1. 首先肯定知道那个数据文件坏了,查出该文件的file_id,relative_fno,tablespace_name
利用dba_data_files可以查询file_id(整个数据库唯一序号),RELATIVE_FNO(相对一个表空间内的序号)
5.2. 找到坏块的ID(可以运行dbverify实现),假设找到的坏块ID为1234。
5.3.运行下面的查询,根据,坏块的file_id,block id查找该块对应的owner,segment_type,
segment_name等信息
select owner,file_id,segment_name, segment_type, block_id, blocks
from dba_extents
where file_id=13 and block_id<=1234 and (block_id + blocks- 1) >= 1234;
5.4. 根据坏块的file_id,owner,segment_name,block_id,如果是数据表的话,用下面的查询来得到对应坏块的rowid
假设owner : DAVE
segment_name: BL
file_id : 13
block_id : 162
运行下面的查询来获得该块所含的rowid(如果没有索引,可能就不能用下面的方式了):
select /*+ index(DAVE, i_test)?*/ rowid
from DAVE.BL
where dbms_rowid.rowid_to_absolute_fno(rowid,'DAVE','BL')=13
5.1. 首先肯定知道那个数据文件坏了,查出该文件的file_id,relative_fno,tablespace_name
利用dba_data_files可以查询file_id(整个数据库唯一序号),RELATIVE_FNO(相对一个表空间内的序号)
5.2. 找到坏块的ID(可以运行dbverify实现),假设找到的坏块ID为1234。
5.3.运行下面的查询,根据,坏块的file_id,block id查找该块对应的owner,segment_type,
segment_name等信息
select owner,file_id,segment_name, segment_type, block_id, blocks
from dba_extents
where file_id=13 and block_id<=1234 and (block_id + blocks- 1) >= 1234;
5.4. 根据坏块的file_id,owner,segment_name,block_id,如果是数据表的话,用下面的查询来得到对应坏块的rowid
假设owner : DAVE
segment_name: BL
file_id : 13
block_id : 162
运行下面的查询来获得该块所含的rowid(如果没有索引,可能就不能用下面的方式了):
select /*+ index(DAVE, i_test)?*/ rowid
from DAVE.BL
where dbms_rowid.rowid_to_absolute_fno(rowid,'DAVE','BL')=13
and dbms_rowid.rowid_block_number(rowid)=162;
http://biancheng.dnbcw.info/oracle/254270.html