RMAN 總結篇 3 - (轉)

ningzi82發表於2010-09-24

八,重中之重 恢復 哈哈,做備份不牛比,恢復也算小牛一下!!! ~:~
二個恢復命令:
recover: 資料庫恢復 (應用所有或部分重做日誌檔案,恢復到崩潰狀態或某個時間點)
restore: 資料庫修復 (利用備份集的資料檔案替換已經損壞的資料庫檔案,或恢復到一個新的位置(即移庫),要讀到catalog或控制檔案資訊,
從中選擇最合適的備份進行修復操作,選擇原則:a,選擇最近的,b,優先選擇映象複製,其次才是備份集)
恢復步驟:
a, mount或open狀態 (資料庫級恢復,mount狀態,資料檔案表空間級恢復,open狀態)
b, 完全於不完全恢復: 完全恢復就需要全部重做日誌,不完全恢復就是使用部分日誌檔案,執行不完全恢復主要是透過執行restore/recover
命令時附加until 子句來限制恢復到的時間點
c, 開啟資料庫: 如果恢復時執行的是不完全恢復,開啟時必須指定resetlogs;

rman如何選擇備份集:
a.選擇最近的可用的備份集,(如果沒有指定until子句,則從備份的最近開始,如果指定了until,則從滿足until的備份開始)
b,如果能找到,並且多個,則rman會選擇一個最優的備份方案來恢復,(如先選擇映象,再才是備份集)
c,如果都沒有,只能報錯

1)完全介質恢復: (資料庫崩了,有控制檔案,spfile, 有以前建立的整個備份,歸檔檔案和重做日誌檔案還在,則可以恢復整庫到崩的那一刻:
歸檔模式下:

[@more@]

rman>startup mount
rman>restore database;
rman>recover database delete archivelog skip tablespace temp;
delete archivelog: 表示在完全恢復成功後自動刪除那些恢復過程中產生的歸檔檔案,不會刪restore/recover之前的歸檔
skip tablespace; 跳過表空間,如臨時表空間,即使不指定此引數,也會跳過,因為該表空間根本就沒備份.
maxsize n: 磁碟緊張時,可以指定該引數,就是在恢復時參生的歸檔這個空間大小的指定,當到達該閥值就重寫覆蓋產生的歸檔檔案.
rman>alter database open;

恢復到某個點
alter session set nls_date_format= 'YYYY-MM-DD HH24:MI:SS'
run
{
set until time '2009-08-21 23:59:59'
restore database
recover database
}

非歸檔模式下:
在執行restore命令前,首先需要恢復之前的控制檔案,並且執行了restore 和 recover 命令後,必須以open resetlogs方式開啟資料庫

2),表空間和資料檔案的恢復: mount 或 open狀態,
表空間: 若表空間仍online,先offline
rman>sql 'alter tablespace asod offline immediate';
rman>restore tablesapce asod;
rman>recover tablespace asod;
rman>sql 'alter tablespace asod online';
注: 當然一次可以恢復幾個表空間,以逗號隔開

資料檔案
rman>sql 'alter database datafile 10 offline';
rman>restore datafile 10;
rman>recover datafile 10;
rman>sql 'alter database datafile 10 online';

若磁碟不了,移位置可以不?
run{
set newname for datafile 3 to 'f:newdbsysaux01.dbf';
restore dafafile 3;
switch datafile 3;
recover datafile 3;
}
若整個庫挪目錄,你能移動麼?神那,救救我吧!!!

3), 歸檔日誌恢復
原因:如果僅僅是為了在恢復資料檔案後應用歸檔檔案,那並不需要手動對歸檔檔案進行恢復,rman會在recover的時候
自動對適當的歸檔進行恢復
data guard環境,standby端丟失了部分歸檔,必須從primary端重新獲取,
或者需要用logminer對之前的歸檔進行分析
rman> restore archivelog sequence between 20 and 30; 恢復歸檔20~30之間的歸檔檔案
rman> run {
set archivelog destination to 'f:archlog'; 預設恢復到log_archive_dest_1; 好事者要挪位置沒辦法呀!
restore archivelog sequence between 35 and 40;
}
當然同一個塊中允話出現多個set archivelog destination to ,,,,; 這種人好無聊呀!

4)控制檔案的恢復
a,從自動備份中恢復
rman> set DBID=1234567879;
rman> STARTUP NOMOUNT;
rman>restore controlfile from autobackup; & rman> restore controlfile to 'f:controlfile.ctl' from autobackup;
上面後邊這句可以在open下用,但不要恢復到原本身路徑中;
如果你在備份前手工改了control file的路徑的話,你在恢復就得重設路徑
rman> set controlfile autobackup format for device type disk to 'f:,,,';
rman> restore controlfile from autobackup

b,從備份集中恢復
rman>set dbid=....;
rman>startup nomount;
rman>restore controlfile from 'f:...'; 指定控制檔案所在備份片段的詳細路徑
恢復完後必須recover database;並且以open resetlogs方式開啟資料庫

5)引數檔案的恢復
rman>set dbid=...
rman>startup nomount;
rman>restore spfile from autobackup;
或者
rman>restore spfile to '/tmp/spfileTEMP.ora' from autobackup; 或
rman>restore spfile to '/tmp/spfileTEMP.ORA' FROM '具體備份集路徑';
注意,就算引數檔案丟失,rman也可以啟動到nomount狀態,rman裡面有一個預設配置可以讓資料庫啟動到nomount,
而sqlplus 就不可以。

九,透過rman備份恢復資料庫到其他伺服器
實戰一下吧,
源庫: 192.168.1.205 instance name: prod
目標庫: 192.168.1.204 instance name: prod 例項名必須一致,伺服器可以不一樣嘛。
二個庫軟體版本應該一致,目錄結構應該一致,不一致恢復則要修改,你不嫌麻煩可以玩一下.
步驟:
1), 源庫整庫備份,包含控制檔案,資料檔案,歸檔檔案件,非歸檔模式也可以,最好是nocatalog模式的備份,因為備份資訊在控制檔案
中嘛,等下好整! (如果是windows環境,當然把dbid 得記下來!) 傳備份到目標庫,這個備份的資訊存放點要和源主機的存放點一樣.
2),目標庫,建立oracle serveices, linux/unix下,就是修改profile,把那些亂七八糟的環境變數整得跟源庫一樣。windows當然就得
藉助ordim工具也設了。沒用過你就查資料吧。
3), 目標庫,初示化引數檔案配置.這個好辦嘛。把源庫的初式化引數生成pfile,拷過來如需修改一下即完事,
4),目標庫,恢復控制檔案:
rman> startup noumount pfile='過來修改的那個檔案呀';
rman> restore controlfile from ' 傳過來的那個備份集路徑及名稱';
rman> alter databsase mount; 有控制檔案就可以mount了嘛
5),恢復資料庫
rman>restore databse; 有控制檔案在,自然就會找到那個備份集,記得前面強調的拷過來的備份集為什麼要和源庫存放點一致,
明白原因了嗎
6), recover database 就可以了

這樣也可以! 強人呀!!! 用途在那裡呢。我想想!!!!


首先是DEFAULT DEVICE TYPE引數是磁帶還是磁碟,然後看磁帶或者磁碟的話,分別對應下面的引數
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO '%F'; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default


delete backupset 10 & delete noprompt backupset 10
對於不能刪除的
RMAN-06207: 警告: 由於狀態不匹配, 所以不能刪除 4 物件 (對於 DISK 通道)。
RMAN-06208: 請用 CROSSCHECK 命令修正狀態
不匹配物件的列表
==========================
物件型別 檔名/控制程式碼
--------------- ---------------------------------------------------
Datafile Copy E:MEMARDAOUTPUTRDA_TMP_CONTROL_4140.TMP
Datafile Copy E:MEMARDAOUTPUTRDA_TMP_CONTROL_9584.TMP
Datafile Copy C:PROGRAM FILESCABRIGHTSTOR ARCSERVE BACKUP AGENT FOR ORACLECONTROL.MISDB
Datafile Copy E:MEMARDAOUTPUTRDA_TMP_CONTROL_9388.TMP

rman target /
crosscheck copy;
delete obsolete;
隨後需要在備份指令碼中加入
crosscheck copy;
delete nopromote obsolete;

如果手動刪除了備份,就可能造成備份記錄清除不了,用以下命令
CROSSCHECK backup;
再清除就可以成功了

run {
configure retention policy to recovery window of 14 days;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/rcmbackup/oracle/control_%F';
allocate channel c1 device type disk format '/rcmbackup/oracle/rman2_%T';
backup incremental level=2 database skip inaccessible
plus archivelog filesperset 20
delete all input;
release channel c1;
}
allocate channel for maintenance device type disk;
crosscheck backupset;
delete noprompt obsolete;

rcm
run {
configure retention policy to recovery window of 14 days;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/rcmbackup/oracle/control_%F';
allocate channel c1 device type disk format '/rcmbackup/oracle/DB2_%T;
backup incremental level=0 database skip inaccessible
plus archivelog filesperset 20
delete all input;
release channel c1;
}
allocate channel for maintenance device type disk;
crosscheck backupset;
delete noprompt obsolete;

ERP
RUN {
ALLOCATE CHANNEL c1 TYPE disk;
ALLOCATE CHANNEL c2 TYPE disk;
BACKUP incremental level 1 database format '/rmanbackup/backup/erpdb0_%T';
RELEASE CHANNEL c1;
RELEASE CHANNEL c2;
ALLOCATE CHANNEL ch00 TYPE disk;
ALLOCATE CHANNEL ch01 TYPE disk;
BACKUP filesperset 20
FORMAT '/rmanbackup/backup/log_%T'
ARCHIVELOG ALL DELETE INPUT;
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
}

more tarrman.sh
#!/bin/sh
DATE=`date +%Y%m%d`;export DATE
FILEPATH=/rcmbackup/oracle; export FILEPATH
find $FILEPATH -type f -mtime -1 -exec tar cvf $DATE.tar {} ;

deltarrman.sh
#!/bin/sh
DATE=`date +%Y%m%d`;export DATE
FILEPATH=/rcmbackup/oracle; export FILEPATH
find /rcmbackup/oracle -name `date +%Y%m%d`.tar -exec rm -rf {} ;

轉自:http://hi.baidu.com/risowangzz/blog/item/e6e637ef7086c62a62d09f85.html

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

相關文章