首页 > 数据库 > Oracle > 坏块的处理思维(用程序制作坏块不如用系统)
--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;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9879835/viewspace-1057287/ ,如需转载,请注明出处,否则将追究法律责任。