用ORACLE8i修复数据库坏块的三种方法
2007-05-08 12:11:35 来源:WEB开发网核心提示: dbms_repair.admin_tables('REPAIR_TABLE',DBMS_REPAIR.REPAIR_TABLE,DBMS_REPAIR.CREATE_ACTION,'temp_data');2.DBMS_REPAIR.CHECK_OBJEC
dbms_repair.admin_tables('REPAIR_TABLE',DBMS_REPAIR.REPAIR_TABLE,
DBMS_REPAIR.CREATE_ACTION,'temp_data');
2.DBMS_REPAIR.CHECK_OBJECT检查表、索引、分区中的块损坏。其中OBJECT_TYPE为:TABLE_OBJECT(表),INDEX_OBJECT(索引), REPAIR_TABLE_NAME(用于存储损坏块信息的表)。例:
dbms_repair.check_object('ORATRAIN','LOCATIONS',corrupt_count=>:cc);
3.使用以下语句查询块损坏信息:
SELECT object_name, relative_file_no, block_id, marked_corrupt,
corrupt_description, repair_description FROM repair_table;
4.将块标志为损坏的:
dbms_repair.fix_corrupt_blocks('ORATRAIN','LOCATIONS',fix_count=>:fc);
5.跳过损坏块:
dbms_repair.skip_corrupt_blocks('ORATRAIN', 'LOCATIONS');
其中OBJECT_TYPE为:TABLE_OBJECT(表),CLUSTER_OBJECT(索引)。
6.使用REBUILD_FREELISTS重建损坏的空闲列表:DBMS_REPAIR.rebuild_freelists
7.使用以下方法查找指向损坏块的索引:
(1)创建存放指向坏块索引的表
(2)dbms_repair.dump_orphan_keys('ORATRAIN','LOC_PK',
orphan_table_name=>'ORPHAN_TAB1',key_count=>:kc);
(3)SELECT index_name, count(*) FROM orphan_key_table
WHERE table_name = 'CLASSES' GROUP BY index_name;
(4)重建具有orphan keys的索引
限制:不能分析Index-organized tables 与 LOB indexes,DUMP_ORPHAN_KEYS不能对bitmap与 function-based indexes操作。
(三)使用SQL命令ANALYZE TABLE|INDEX … VALIDATE STRUCTURE
utlvalid.sql.创建含有损坏块信息的INVALID_ROWS表,ANALYZE TABLE VALIDATE STRUCTURE CASCADE同时校验表与索引。
(四)使用DBVERIFY
DBVERIFY是一个外部工具,所以对数据库影响很小。可用于在将备份文件拷贝回原位置前检验备份文件的完好性,并定位数据块损坏。命令如下:
dbv /opt/oracle/db02/oradata/data01.dbf start=1 end=500 logfile=dbv.log
更多精彩
赞助商链接