使用dbms repair修復受損資料塊

2021-05-09 04:12:53 字數 3548 閱讀 2250

使用dbms_repair

修復受損資料塊1、

根據在全表掃瞄中出現的受損資料塊的絕對檔案號和資料塊號的提示確定受損物件:

select segment_name,segment_type,owner,tablespace_name,partition_name

from dba_extents

where file_id = &afn and &bl between block_id and block_id + blocks - 1;

2、使用

dbms_repair

包建立兩個資料表:

declare

begin

dbms_repair.admin_tables(table_name => 'repair_table',

table_type => dbms_repair.repair_table,

action=> dbms_repair.create_action,

tablespace => 'testdata');

end;

declare

begin

dbms_repair.admin_tables(table_type => dbms_repair.orphan_table,

action=> dbms_repair.create_action,

tablespace => 'testdata');

end;

3、檢查受損物件,並將檢查結果存入之前建立的表中:

set serveroutput on;

declare

rpr_count int;

begin

rpr_count := 0;

dbms_repair.check_object(schema_name=> 'test',

object_name=> 'b',

repair_table_name => 'repair_table',

corrupt_count=> rpr_count);

dbms_output.put_line('repair count:'||to_char(rpr_count));

end;

4、檢視檢查結果:

select t.object_name,

t.block_id,

t.corrupt_type,

t.marked_corrupt,

t.corrupt_description,

t.repair_description

from repair_table t;

5、如果受損資料塊還沒有被標記為「

software corrupt」,

使用dbms_repair

包將受損資料塊標記為

」software corrupt」:

set serveroutput on;

declare

fix_count int;

begin

fix_count := 0;

dbms_repair.fix_corrupt_blocks(schema_name=> 'test',

object_name=> 'b',

object_type=> dbms_repair.table_object,

repair_table_name => 'repair_table',

fix_count=> fix_count);

dbms_output.put_line('fix_count:' || to_char(fix_count));

end;

6、檢視有多少索引項指向了壞塊:

selectindex_name

fromdba_indexes

wheretable_namein(selectdistinctobject_namefromrepair_table);

set serveroutput on;

declare

key_countint;

begin

key_count := 0;

dbms_repair.dump_orphan_keys(schema_name =>

'test'

,object_name=>

'test_pk'

,object_type=> dbms_repair.index_object,

repair_table_name =>

'repair_table'

,orphan_table_name =>

'orphan_key_table'

,key_count=> key_count);

dbms_output.put_line(

'orphan key count:'

|| to_char(key_count));

end;

select index_name,count(1) from orphan_key_table group by index_name; 7、

使用dbms_repair

包將受損資料塊設定為

skip

,或使用

10231

事件,使在全表掃瞄中遮蔽

ora-1578

錯誤:

begin

dbms_repair.skip_corrupt_blocks(schema_name =>

'test'

,object_name =>

'b',

object_type => dbms_repair.table_object,

flags=> dbms_repair.skip_flag);

end; 8、

重建表和索引:

使用ctas

方法重建表,或者使用

dbms_repair

包重建物件的

freelists

declare

begin

dbms_repair.rebuild_freelists(schema_name =>

'test'

,object_name =>

'b',

object_type => dbms_repair.table_object);

end; 使用

alter index indexname rebuild online

命令重建索引

DBMS REPAIR 工具包的使用

dbms repair 工具包的使用 雖然dbms repair 是乙個程式包,它也是dba的乙個工具.通過執行dbms repair 包,oracle 給出關於損壞塊的詳細資訊,並告訴使用者如何修復他們 dbms repair 包記錄了關於損壞塊的全部詳細資訊,並在乙個稱為repair key的特...

使用python修復檔案亂碼

最近整理硬碟,硬碟裡有很多類似 壋彈壆晘偱桙偝傟傑偣傫偐 乣彮彈媧寣昉偺丄偍歲晘梀傃乣 的亂碼檔名 產生原因其實很簡單,我這個檔案本身是shift jis 日文 編碼的,在我的中文作業系統裡被當做gbk解碼就變成亂碼了。所以如果僅僅修復文名的話,只需要 str.encode gbk decode s...

硬碟修復軟體使用體會

出處 可愛酷酷 2004 07 16 經常對有 病 的硬碟進行小修小補,使用最多的是半專業的硬碟修復軟體。我試過很多這類的軟體,最後在我機子裡只留下hddreg mhdd fbdisk 以及一些原廠的dm工具,至於ms的scandisk,不說也罷了。筆者最開始修理硬碟時,常常是什麼軟體都亂用一通,結...