【新炬網路名師大講堂】有限條件下怎樣做好恢復演練

shsnchyw發表於2014-12-16

導語:最近頻頻聽到有使用者(還不是”客戶” )儲存出問題後無法恢復,只有求助於DUL、AUL、ODU之類的工具。本來嘛,在全球經濟低迷的當下,有些需求總是好的,總可以增加點GDP。但,作為一個DBA來說,心裡總怕有點不甘吧。出問題的使用者裡,有通訊行業(南方北方都有)、有銀行、有公安(網上搜也能搜到幾個吧)、有社保………不一而足。我們知道這些行業裡的使用者,應該是比小瀋陽更加不差錢的吧。誰說不是呢,但對於報表庫、查詢庫之類動輒幾T、幾十T的“不太重要”的系統來說,要讓領導投更多的錢,其實也還似乎比較難的。這篇,就是在投錢不多的情況下,怎樣做到基本的備份,且能做到發生故障時能恢復之目的。

前提:做好備份;恢復測試機配置比較低(如果配置夠的話不用這麼麻煩)

版本:Oracle9i、10g測試透過。

原理:將更多的資料skip掉。(聽起來有點類似於oracle exadata server ,其實不是。exadata是filter,而這裡是skip)

廢話少說。

第零步:啟動資料庫例項
第一步:恢復控制檔案:

RMAN> restore controlfile from ‘F:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORA11G\BACKUPSET\2008_10_23\O1_MF_NCSNF_TAG20081023T205321_4J0X8SY8_.BKP’;

Starting restore at 23-OCT-08
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=318 device type=DISK

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
output file name=F:\APP\ADMINISTRATOR\ORADATA\ORA11G\CONTROL01.CTL
output file name=F:\APP\ADMINISTRATOR\ORADATA\ORA11G\CONTROL02.CTL
output file name=F:\APP\ADMINISTRATOR\ORADATA\ORA11G\CONTROL03.CTL
Finished restore at 23-OCT-08

第二步:mount資料庫

RMAN> alter database mount;

database mounted
released channel: ORA_DISK_1

重點在
第三步:restore 資料庫

RMAN> restore database skip forever tablespace xml,ttt,boypoo,t_4k,ILMTBS,users;

Starting restore at 23-OCT-08
Starting implicit crosscheck backup at 23-OCT-08
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=317 device type=DISK
Crosschecked 22 objects
Finished implicit crosscheck backup at 23-OCT-08

Starting implicit crosscheck copy at 23-OCT-08
using channel ORA_DISK_1
Crosschecked 2 objects
Finished implicit crosscheck copy at 23-OCT-08

searching for all files in the recovery area
cataloging files…
cataloging done
….(skip more data)

第五步:recover database

RMAN> recover database skip forever tablespace xml,ttt,boypoo,t_4k,ILMTBS,users;

Starting recover at 23-OCT-08
using channel ORA_DISK_1

starting media recovery
… …

第六步:open 資料庫

RMAN> alter database open resetlogs;

database opened

這個時候,我們所skip的表空間裡有些什麼物件我們還是可以看到的,只不過資料沒有。

驗證:

SQL> select owner,table_name from dba_tables where tablespace_name=’USERS’;

OWNER TABLE_NAME
—————————— ——————————
SCOTT MLOG$_DEPT
SCOTT MLOG$_EMP
SCOTT A
SCOTT DEPT
SCOTT EMP
SCOTT BONUS
SCOTT SALGRADE
..
OWNER TABLE_NAME
—————————— ——————————
HIS T
ORA T
ORA SYS_IMPORT_SCHEMA_01

SQL> select count(1) from his.t;
select count(1) from his.t
*
ERROR at line 1:
ORA-00376: file 4 cannot be read at this time
ORA-01110: data file 4: ‘F:\APP\ADMINISTRATOR\ORADATA\ORA11G\USERS01.DBF’

這篇blog的目的是是想給做好資料庫恢復演練,但有沒有與生產環境相當容量和效能的環境的情況下怎麼去實現;這樣做的目的,是想開啟一個最小可能開啟的庫,也就是說,可以skip除了system、undo、temp之外的所有表空間。

瞭解了這個原理後,其實我們還可以將其推廣開來,比如我們有客戶,原來只有一個生產庫了,現在上面跑著60多個應用,現在想將這些應用中核心的部分剝離到其他機器上,那我們同樣的可以用這個skip tablespace方式,來進行這個剝離的動作,而且停機時間相當短(只是應用歸檔日誌時間,30分鐘以內即可完成剝離)。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29960155/viewspace-1369760/,如需轉載,請註明出處,否則將追究法律責任。

相關文章