使用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,不說也罷了。筆者最開始修理硬碟時,常常是什麼軟體都亂用一通,結...