壞塊的處理思維(用程式製作壞塊不如用系統)

imlihj2007發表於2012-02-06

--linux模擬壞塊測試
select * from dba_data_files;
create table dd as select * from dict
alter table dd move tablespace lihjtest
select dbms_rowid.rowid_relative_fno(t.rowid) || '_' ||
dbms_rowid.rowid_block_number(t.rowid),
t.*
from dd t;

--1
mv lihjtest.dbf lihjtest.dbfbak
dd if=lihjtest.dbfbak of=lihjtest.dbf bs=8192 count=70 --複製70個塊
dd if=lihjtest.dbfbak of=lihjtest.dbf bs=8192 skip=69 count=1 seek=70 --複製第70個塊到71塊上
dd if=lihjtest.dbfbak of=lihjtest.dbf bs=8192 skip=73 count=1 seek=70---------- 兩個結果都是第70個資料塊塊是壞的
dd if=lihjtest.dbfbak of=lihjtest.dbf bs=8192 skip=71 seek=71
--第70個是壞塊 搞得我 迷糊了
rm lihjtest.dbf
mv =lihjtest.dbfbak lihjtest.dbfbak


dd if=lihjtest.dbfbak of=lihjtest.dbf bs=8192 skip=73 count=1 seek=70

begin
dbms_repair.admin_tables(table_name => 'REPAIR_TABLE',
table_type => dbms_repair.repair_table,
action => dbms_repair.create_action,
tablespace => 'LIHJTEST');
end;

SELECT *
FROM REPAIR_TABLE

declare v_out_num_corrupt INT;
num_corrupt INT;
begin
num_corrupt := 0;
dbms_repair.check_object(schema_name => 'SYS',
object_name => 'DD',
repair_table_name => 'REPAIR_TABLE',
corrupt_count => v_out_num_corrupt);
end;

BEGIN
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(SCHEMA_NAME => 'SYS',
OBJECT_NAME => 'DD',
OBJECT_TYPE => dbms_repair.table_object,
FLAGS => dbms_repair.skip_flag);
END;

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9879835/viewspace-1057287/,如需轉載,請註明出處,否則將追究法律責任。

相關文章