模拟坏块

来源:互联网 发布:新淘宝店如何推广 编辑:程序博客网 时间:2024/04/28 07:58
 

create tablespace repair datafile '$ORACLE_BASE/oradata/orcl/repair01.dbf' size 1M;
select file_id,RELATIVE_FNO,file_name from dba_data_files;
create table tt tablespace repair as select * from dba_objects where rownum<2000;
select file_id,block_id,blocks from dba_extents where segment_name='TT';
dd of=repair01.dbf bs=4096 seek=24 conv=notrunc <<EOF
CORRUPT
EOF

1.
begin
 dbms_repair.admin_tables(
 table_name=>'REPAIR_TABLE',
 table_type=>DBMS_REPAIR.REPAIR_TABLE,
 action=>DBMS_REPAIR.CREATE_ACTION,
 tablespace=>'USERS');
end;
/

2.
set serveroutput on
DECLARE
   num_corrupt INT;
BEGIN
   num_corrupt := 0;
   DBMS_REPAIR.CHECK_OBJECT (
   SCHEMA_NAME => 'HSJ',
   OBJECT_NAME => 'T2',
   REPAIR_TABLE_NAME => 'REPAIR_TABLE',
   CORRUPT_COUNT => num_corrupt);
   DBMS_OUTPUT.PUT_LINE('number corrupt: ' || TO_CHAR (num_corrupt));
END;
/

3.
SET SERVEROUTPUT ON
DECLARE
   num_fix INT;
BEGIN
   num_fix := 0;
   DBMS_REPAIR.FIX_CORRUPT_BLOCKS(
   SCHEMA_NAME => 'HSJ',
   OBJECT_NAME => 'T2',
   OBJECT_TYPE => DBMS_REPAIR.TABLE_OBJECT,
   REPAIR_TABLE_NAME => 'REPAIR_TABLE',
   FIX_COUNT => num_fix);
   DBMS_OUTPUT.PUT_LINE('number fix: ' || TO_CHAR (num_fix));
END;
/
number fix: 0
从fix数量为0也已经可以看出,这一步可以不用做的。

4.
BEGIN
   DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (
   SCHEMA_NAME => 'HSJ',
   OBJECT_NAME => 'T2',
   OBJECT_TYPE => dbms_repair.table_object,
   FLAGS => dbms_repair.skip_flag);
END;
/

 

原创粉丝点击