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

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

RMAN備份恢復(fù)之BLOCKRECOVER

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

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

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

  下面演示一個BLOCKRECOVER的簡單例子,首先是構(gòu)造一個壞塊,最簡單的辦法莫過于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

  計算一下表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位置,在后面修改幾個值,保存后,再次查詢T3表:

  SQL> SELECT COUNT(*) FROM T3;

  SELECT COUNT(*) FROM T3

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

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

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

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

  RMAN> BLOCKRECOVER DATAFILE 4 BLOCK 40;

  啟動 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ù)完成, 用時: 00:00:07

  完成 blockrecover 于 15-6月 -07

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

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

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

  SQL> SELECT COUNT(*) FROM T3;

  COUNT(*)

  ----------

  50272

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

  塊恢復(fù)可以在數(shù)據(jù)文件online的時候做,沒有問題

  說來慚愧,這是個生產(chǎn)庫,版本: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的備份,刪除這個表空間再重新導(dǎo)入是可行的,但是由于生產(chǎn)庫,不能停。想用set maxcorrupt 跳過壞塊,又不知道以后做restore和recover會不會有問題?網(wǎng)上對此討論的帖子也很多,

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

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

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

  步驟如下:

  使用RMAN的BLOCKRECOVER命令 :

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

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

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

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

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

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

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

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

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

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

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

  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ù)據(jù)重建表,重建表上的索引,限制。

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

相關(guān)閱讀

文章評論
發(fā)表評論

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

相關(guān)下載

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