原創(chuàng)|其它|編輯:郝浩|2009-05-19 11:17:59.000|閱讀 401 次
概述:文章介紹了Oracle數(shù)據(jù)庫(kù)中數(shù)據(jù)塊損壞恢復(fù)的幾種方法,包括使用exp/imp,DBMS_REPAIR,Rman,bbed等方法。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在恢復(fù)前使用DBV命令檢查數(shù)據(jù)文件是否存在壞塊
dbv file=d:\oracle\oradata\mydb\RONLY.DBF blocksize=8192
查看數(shù)據(jù)壞塊所在數(shù)據(jù)文件號(hào)及塊號(hào)可以對(duì)表進(jìn)行一次全表掃描,如:
select count(*) from tablename;
1 沒(méi)有備份的情況下:
1.1、使用exp/imp恢復(fù)
在這種情況下肯定會(huì)造成數(shù)據(jù)的丟失,在這種情況下應(yīng)采取將數(shù)據(jù)導(dǎo)出然后重建表再進(jìn)行導(dǎo)入的方法,來(lái)盡量恢復(fù)損壞數(shù)據(jù)塊中的數(shù)據(jù),但是在有壞塊的情況下是不允許導(dǎo)出的,如下命令:
Exp test/test file=t.dmp tables=t;
導(dǎo)出命令在執(zhí)行中會(huì)報(bào)ORA-01578錯(cuò)誤,在這錯(cuò)誤提示中會(huì)提示那個(gè)文件號(hào)的文件以及這個(gè)文件中的哪個(gè)塊被損壞,如:ORA—01578:ORACLE 數(shù)據(jù)塊損壞(文件號(hào) 4,塊號(hào) 35)
針對(duì)以上的提示首先查詢那些對(duì)象被損壞:
Select tablespace_name,segment_type,owner,segment_name From dba_extents Where file_id=4 and 35 between block_id and block_id+blocks-1;
如果被損壞的塊是索引,通??梢酝ㄟ^(guò)索引重建來(lái)解決,如果損壞的是數(shù)據(jù)(segment_type為table),那么通過(guò)設(shè)置如下內(nèi)部事件使得Exp操作跳過(guò)壞塊。
Alter session set events=’10231 trace name context forever,level 10’;
然后重新執(zhí)行導(dǎo)出命令,導(dǎo)出相關(guān)的表,然后執(zhí)行Drop Table命令刪除相關(guān)表,之后重建表最后導(dǎo)入數(shù)據(jù)。
1.2、使用DBMS_REPAIR恢復(fù)
用DBMS_REPAIR當(dāng)然也會(huì)丟失數(shù)據(jù)。這里不做詳細(xì)的介紹,有興趣的可以查看oracle的在線文檔
2 使用Rman進(jìn)行恢復(fù):
首先要存在Rman的最新備份集,然后執(zhí)行如下命令:
RMAN>backup validate datafile 4;
檢查4號(hào)數(shù)據(jù)文件是否存在壞塊
執(zhí)行查詢:
select * from v$database_block_corruption where file#=4;
如果4號(hào)文件存在壞塊的話,那么將在結(jié)果集中有所顯示,會(huì)顯示損壞的塊號(hào),根據(jù)顯示結(jié)果執(zhí)行如下命令進(jìn)行恢復(fù):
RMAN>blockrecover datafile 4 block 35 from backupset;
該命令執(zhí)行后即可恢復(fù)壞塊,并且不會(huì)造成數(shù)據(jù)丟失,但是要求數(shù)據(jù)庫(kù)必須要運(yùn)行在歸檔模式下,否則RMAN無(wú)法發(fā)揮作用,而且通過(guò)RMAN做過(guò)最新的數(shù)據(jù)庫(kù)備份
3 使用bbed恢復(fù)
使用bbed恢復(fù)時(shí)必須有數(shù)據(jù)文件的拷貝。
bbed就是英文block browse edit的縮寫,用來(lái)直接查看和修改數(shù)據(jù)文件數(shù)據(jù)的一個(gè)工具。
在windows和linux上面都有
但在linux下需要編譯:
然后把$ORACLE_HOME/rdbms/lib加到環(huán)境變量的PATH里面,就可以直接在命令中bbed了。
BBED的缺省口令為blockedit,For Oracle Internal Use only 請(qǐng)謹(jǐn)慎使用Oracle不做技術(shù)支持。
[oracle@test oracle]$ cd $ORACLE_HOME/rdbms/lib
[oracle@test lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
進(jìn)入bbed后,可以使用help查看幫助:
BBED> help
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:IT專家網(wǎng)論壇