IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁(yè)數(shù)據(jù)庫(kù)Oracle → RMAN備份恢復(fù)之BLOCKRECOVER

RMAN備份恢復(fù)之BLOCKRECOVER

時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

  RMAN提供了單獨(dú)恢復(fù)個(gè)別BLOCK的功能,這種功能作為普通恢復(fù)方法的補(bǔ)充,對(duì)于恢復(fù)數(shù)據(jù)庫(kù)中出現(xiàn)的壞塊可以快速的進(jìn)行恢復(fù)。

  RMAN的BLOCKRECOVER是利用一個(gè)全備份作為基礎(chǔ),在此基礎(chǔ)中應(yīng)用日志,對(duì)于需要恢復(fù)的個(gè)別BLOCK進(jìn)行恢復(fù)。

  下面演示一個(gè)BLOCKRECOVER的簡(jiǎn)單例子,首先是構(gòu)造一個(gè)壞塊,最簡(jiǎn)單的辦法莫過(guò)于UltraEdit了。

  SQL> SELECT COUNT(*) FROM T3;

  COUNT(*)

  ----------

  50272

  SQL>SELECT DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID), DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) FROM T3 WHERE ROWNUM = 1;

  DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)

  ------------------------------------ ------------------------------------

  4 40

  SQL> SHOW PARAMETER BLOCK_SIZE

  NAME TYPE VALUE

  ------------------------------------ ----------- ------------------------------

  db_block_size integer 16384

  計(jì)算一下表T3在文件中的偏移地址:

  SQL> SELECT 16*1024*40 FROM DUAL;

  16*1024*40

  ----------

  655360

  SQL> SELECT TO_CHAR(655360, 'XXXXXX') FROM DUAL;

  TO_CHAR

  -------

  A0000

  用UltraEdit打開RELATIVE_FNO為4的數(shù)據(jù)文件,定位到地址為A0000位置,在后面修改幾個(gè)值,保存后,再次查詢T3表:

  SQL> SELECT COUNT(*) FROM T3;

  SELECT COUNT(*) FROM T3

  *第 1 行出現(xiàn)錯(cuò)誤:

  ORA-01578: ORACLE 數(shù)據(jù)塊損壞 (文件號(hào) 4, 塊號(hào) 40)

  ORA-01110: 數(shù)據(jù)文件 4: 'E:ORACLEORADATAYTKDATAFILEO1_MF_USERS_1TDY4JMK_.DBF'

  現(xiàn)在已經(jīng)模擬出壞塊,可以使用RMAN的BLOCKRECOVER進(jìn)行恢復(fù)了。不過(guò)恢復(fù)的前提是擁有這個(gè)數(shù)據(jù)文件的一個(gè)全備份,并且有這個(gè)備份以來(lái)的歸檔日志。

  RMAN> BLOCKRECOVER DATAFILE 4 BLOCK 40;

  啟動(dòng) blockrecover 于 15-6月 -07分配的通道: ORA_DISK_1通道 ORA_DISK_1: sid=157 devtype=DISK

  通道 ORA_DISK_1: 正在從數(shù)據(jù)文件副本 E:ORACLEBACKUPUSERS.DBF 復(fù)原塊

  正在開始介質(zhì)的恢復(fù)介質(zhì)恢復(fù)完成, 用時(shí): 00:00:07

  完成 blockrecover 于 15-6月 -07

#p#副標(biāo)題#e#

  通過(guò)執(zhí)行上面簡(jiǎn)單的命令,已經(jīng)將數(shù)據(jù)文件中的壞塊進(jìn)行了修復(fù),注意RMAN的BLOCKRECOVER在恢復(fù)的時(shí)候是不需要將數(shù)據(jù)文件置于脫機(jī)狀態(tài)的。

  恢復(fù)完成后,最后再次查詢T3表:

  SQL> SELECT COUNT(*) FROM T3;

  COUNT(*)

  ----------

  50272

  有個(gè)庫(kù)第一次做RMAN備份,卻發(fā)現(xiàn)有壞塊,有沒(méi)有什么好辦法?

  塊恢復(fù)可以在數(shù)據(jù)文件online的時(shí)候做,沒(méi)有問(wèn)題

  說(shuō)來(lái)慚愧,這是個(gè)生產(chǎn)庫(kù),版本:9.2.0.7,OS:linux as3,第一次做RMAN備份,卻發(fā)現(xiàn)有壞塊。

  還好不是系統(tǒng)表,把有壞塊的表drop后重建了,用SELECT segment_name,segment_type,extent_id,block_id, blocks

  from dba_extents t

  where file_id = file#

  AND block# between block_id and (block_id + blocks - 1) 已經(jīng)找不到任何object。但是做level0還是提示有壞塊。

  DB每天有exp的備份,刪除這個(gè)表空間再重新導(dǎo)入是可行的,但是由于生產(chǎn)庫(kù),不能停。想用set maxcorrupt 跳過(guò)壞塊,又不知道以后做restore和recover會(huì)不會(huì)有問(wèn)題?網(wǎng)上對(duì)此討論的帖子也很多,

  9i之后可以只恢復(fù)壞塊

  恢復(fù)壞的block(9i以上版本可用)

  使用這種方法要求數(shù)據(jù)庫(kù)版本是9.2.0以上,要求配置了Rman的catalog數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)為歸檔方式,并且有完整的物理備份。

  步驟如下:

  使用RMAN的BLOCKRECOVER命令 :

  Rman>run{blockrecover datafile 5 block 11,16;}

  也可以強(qiáng)制使用某個(gè)SCN號(hào)之前的備份,恢復(fù)數(shù)據(jù)塊。

  Rman>run{blockrecover datafile 5 block 11,16 restore until sequence 8505;}

  通過(guò)ROWID RANGE SCAN 保存數(shù)據(jù)

  1) 先取得壞塊中ROW ID的最小值,執(zhí)行以下的語(yǔ)句:

  SELECT dbms_rowid.rowid_create(1,,,,0) from DUAL;

  2)取得壞塊中的ROW ID的最大值,執(zhí)行以下的語(yǔ)句:

  SELECT dbms_rowid.rowid_create(1,,,+1,0) from DUAL;

  3)建議一個(gè)臨時(shí)表存儲(chǔ)那些沒(méi)有壞塊的數(shù)據(jù),執(zhí)行以下的語(yǔ)句:

  CREATE TABLE salvage_table AS SELECT * FROM corrupt_tab Where 1=2;

  4)保存那些不存在壞塊的數(shù)據(jù)到臨時(shí)表中,執(zhí)行以下的語(yǔ)句:

  INSERT INTO salvage_table SELECT /*+ ROWID(A) */ * FROM A WHERE rowid < '';

  INSERT INTO salvage_table SELECT /*+ ROWID(A) */ * FROM A WHERE rowid >= '‘;

  5) 根據(jù)臨時(shí)表中的數(shù)據(jù)重建表,重建表上的索引,限制。

關(guān)鍵詞標(biāo)簽:RMAN備份恢復(fù)

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 oracle中使用SQL語(yǔ)句修改字段類型-oracle修改SQL語(yǔ)句案例 oracle中使用SQL語(yǔ)句修改字段類型-oracle修改SQL語(yǔ)句案例 誤刪Oracle數(shù)據(jù)庫(kù)實(shí)例的控制文件 誤刪Oracle數(shù)據(jù)庫(kù)實(shí)例的控制文件 為UNIX服務(wù)器設(shè)置Oracle全文檢索 為UNIX服務(wù)器設(shè)置Oracle全文檢索

相關(guān)下載

    人氣排行 oracle中使用SQL語(yǔ)句修改字段類型-oracle修改SQL語(yǔ)句案例 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 ORACLE SQL 判斷字符串是否為數(shù)字的語(yǔ)句 ORACLE和SQL語(yǔ)法區(qū)別歸納(1) oracle grant 授權(quán)語(yǔ)句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法