使用RMAN備份時應如何處置歸檔記錄檔,rman記錄檔

來源:互聯網
上載者:User

使用RMAN備份時應如何處置歸檔記錄檔,rman記錄檔
昨天去某客戶部署RMAN備份,在跑shell指令碼的時候,提示找不到歸檔日誌,因為客戶那裡之前只對資料庫做EXPDP邏輯匯出備份,並且每天都自動刪除前一天的歸檔,每個歸檔的產生量大概在200M左右,因為考慮磁碟空間比較緊張,不得已而為之。
在我的指令碼中,是採用backup database format 'xxx' plus archivelog format 'xxx'的方式進行備份的,在執行RMAN指令碼時,由於是先對歸檔日誌進行備份,再對資料庫進行備份的,在指令碼的輸出日誌中,提示找不到35xxx的歸檔日誌,而現在最舊的還物理存在的歸檔日誌已經到36xxx了,也就是說,這1000多個日誌其實是已經被OS指令碼從物理上刪除了,後來檢驗了一下確實如此,每天產生的歸檔數量大約為40個左右,那麼一天的歸檔日誌就是800M左右
於是進入RMAN對歸檔日誌進行crosscheck,發現有7000多個歸檔日誌檢查結果是“failed”的(物理上已被刪除),命令如下:RMAN> crosscheck archivelog all;
再對這些expired的歸檔,從控制檔案資訊刪除掉RMAN> delete noprompt expired archivelog all;
然後再繼續跑指令碼,之後的備份就很順利,先把歸檔記錄備份完畢,接著是備份資料庫,最後是控制檔案和spfile
回來之後,我自己又做了一個測試,發現即便是當歸檔記錄檔未failted的時候,備份還是順利地進行下去了,下面看我自己的測試:
1. 先把歸檔日誌移動到別的目錄(類比日誌被物理刪除)[oracle@ora10g ~]$ cd $ORACLE_BASE/flash_recovery_area/ORA10G/archivelog[oracle@ora10g archivelog]$ lltotal 8drwxr-x--- 2 oracle oinstall 4096 Sep 24 11:46 2014_09_24
[oracle@ora10g archivelog]$ mv 2014_09_24/* .[oracle@ora10g archivelog]$ lltotal 6636drwxr-x--- 2 oracle oinstall    4096 Sep 24 11:59 2014_09_24
-rw-r----- 1 oracle oinstall  597504 Sep 24 11:46 o1_mf_1_10_b24ho39f_.arc-rw-r----- 1 oracle oinstall 5473792 Sep 24 11:35 o1_mf_1_3_b24gz52r_.arc-rw-r----- 1 oracle oinstall  373248 Sep 24 11:35 o1_mf_1_4_b24gz81d_.arc-rw-r----- 1 oracle oinstall  180224 Sep 24 11:35 o1_mf_1_5_b24gzbb6_.arc-rw-r----- 1 oracle oinstall   33792 Sep 24 11:35 o1_mf_1_6_b24gzd6y_.arc-rw-r----- 1 oracle oinstall   26624 Sep 24 11:35 o1_mf_1_7_b24gzky8_.arc-rw-r----- 1 oracle oinstall    1536 Sep 24 11:35 o1_mf_1_8_b24gzqnt_.arc-rw-r----- 1 oracle oinstall   57344 Sep 24 11:44 o1_mf_1_9_b24hjflc_.arc
這裡共有8個歸檔記錄檔被“刪除”
2. 進入RMAN,對歸檔日誌進行交叉校正[oracle@ora10g archivelog]$ exitexithost command complete
RMAN> crosscheck archivelog all;
released channel: ORA_DISK_1allocated channel: ORA_DISK_1channel ORA_DISK_1: sid=145 devtype=DISKvalidation failed for archived log
archive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog/2014_09_24/o1_mf_1_3_b24gz52r_.arc recid=208 stamp=859116904validation failed for archived logarchive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog/2014_09_24/o1_mf_1_4_b24gz81d_.arc recid=209 stamp=859116904validation failed for archived logarchive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog/2014_09_24/o1_mf_1_5_b24gzbb6_.arc recid=210 stamp=859116906validation failed for archived logarchive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog/2014_09_24/o1_mf_1_6_b24gzd6y_.arc recid=211 stamp=859116908validation failed for archived logarchive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog/2014_09_24/o1_mf_1_7_b24gzky8_.arc recid=212 stamp=859116914validation failed for archived logarchive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog/2014_09_24/o1_mf_1_8_b24gzqnt_.arc recid=213 stamp=859116919validation failed for archived logarchive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog/2014_09_24/o1_mf_1_9_b24hjflc_.arc recid=214 stamp=859117453validation failed for archived logarchive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog/2014_09_24/o1_mf_1_10_b24ho39f_.arc recid=215 stamp=859117603Crosschecked 8 objects
3. 不刪除expired的歸檔,直接跑RMAN備份指令碼這次並沒有報錯並提示xxx歸檔找不到,而是直接就完成了備份,產生了備份組297,與在客戶那裡碰到的情況有出入
--備份完成後,查看產生的備份組
[oracle@ora10g ~]$ cd /u01/orabackup/backupsets/[oracle@ora10g backupsets]$ ll -lrthtotal 1.6G......其他備份組(略)
-rw-r----- 1 oracle oinstall 606K Sep 24 12:00 ora10g-4175411955_20140924_859118422_297.arc-rw-r----- 1 oracle oinstall 166M Sep 24 12:02 ora10g-4175411955_20140924_859118425_298.db-rw-r----- 1 oracle oinstall 610K Sep 24 12:02 ora10g-4175411955_20140924_859118562_299.arc-rw-r----- 1 oracle oinstall 7.3M Sep 24 12:02 ora10g-c-4175411955-20140924-01.ctl
可以看到,備份全部完成了,共產生了2個歸檔記錄備份集(arc),1個Database Backup集(db)以及控制檔案備份集(ctl),這裡有個細節要注意,由於我在指令碼中寫入了%s參數,從上面產生備份組產生的時間以及順序可以發現RMAN備份這樣一個順序:1. 對現有可以備份的資料庫歸檔記錄檔做一個備份2. 對資料庫進行備份3. 切換一下日誌,對完成全庫備份後的歸檔日誌再做一個備份(即使你沒有通過RMAN> sql "alter system archive log current";來手動切)4. 對控制檔案備份(包括spfile,產生在同一個備份組)
我們可以看一下詳細的日誌輸出,來對這個順序有更深刻的瞭解:Starting backup at 24-914current log archivedusing channel ORA_DISK_1channel ORA_DISK_1: starting compressed archive log backupsetchannel ORA_DISK_1: specifying archive log(s) in backup setinput archive log thread=1 sequence=11 recid=216 stamp=859118422channel ORA_DISK_1: starting piece 1 at 24-914channel ORA_DISK_1: finished piece 1 at 24-914piece handle=/u01/orabackup/backupsets/ora10g-4175411955_20140924_859118422_297.arc tag=ARC_BAK comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:03Finished backup at 24-914
Starting backup at 24-914using channel ORA_DISK_1channel ORA_DISK_1: starting compressed full datafile backupsetchannel ORA_DISK_1: specifying datafile(s) in backupsetinput datafile fno=00001 name=/u01/app/oracle/oradata/ora10g/system01.dbfinput datafile fno=00003 name=/u01/app/oracle/oradata/ora10g/sysaux01.dbfinput datafile fno=00002 name=/u01/app/oracle/oradata/ora10g/undotbs01.dbfinput datafile fno=00005 name=/u01/app/oracle/oradata/ora10g/example01.dbfinput datafile fno=00006 name=/u01/app/oracle/oradata/ora10g/zlm01.dbfinput datafile fno=00004 name=/u01/app/oracle/oradata/ora10g/users01.dbfchannel ORA_DISK_1: starting piece 1 at 24-914channel ORA_DISK_1: finished piece 1 at 24-914piece handle=/u01/orabackup/backupsets/ora10g-4175411955_20140924_859118425_298.db tag=DB_BAK comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:02:16Finished backup at 24-914
Starting backup at 24-914current log archivedusing channel ORA_DISK_1channel ORA_DISK_1: starting compressed archive log backupsetchannel ORA_DISK_1: specifying archive log(s) in backup setinput archive log thread=1 sequence=12 recid=217 stamp=859118561channel ORA_DISK_1: starting piece 1 at 24-914channel ORA_DISK_1: finished piece 1 at 24-914piece handle=/u01/orabackup/backupsets/ora10g-4175411955_20140924_859118562_299.arc tag=ARC_BAK comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:02Finished backup at 24-914
Starting Control File and SPFILE Autobackup at 24-914piece handle=/u01/orabackup/backupsets/ora10g-c-4175411955-20140924-01.ctl comment=NONEFinished Control File and SPFILE Autobackup at 24-914
順序執行的4個部分,分別產生了4個備份組,雖然從日誌來看,並沒有發現備份完資料庫以後,RMAN對歸檔日誌進行了切換,但實際上確實是如此的,因為此刻我並沒有對資料庫進行切換歸檔操作。其實在RMAN對Database Backup之後對日誌切換後再把歸檔記錄備份一遍,是為了能讓儘可能多的資料庫改動都被寫入磁碟,方便將來用備份組恢複。
對資料庫的DML操作是通過寫入online redo logfile來保證其一致性的,即使是undo中的資料,也會寫入redo日誌,我們稱之為undo的redo,undo的redo向量與redo的redo向量合并為一條redo記錄,被寫入online redo logfile,而歸檔日誌的作用,就是當online redo logfile要被重新整理時,先對這些要重新整理的內容進行歸檔,那麼既然redo內容包含了所以的資料庫的更改,恢複時也必須要使用歸檔日誌來進行recover,把資料庫推進到一致性狀態。
RMAN是屬於非一致性的備份,可以在資料庫open狀態下對資料庫進行備份,要使不一致性備份的資料庫達到一致性狀態,那麼就只有靠歸檔日誌來實現了。那麼,當RMAN切換日誌的那一刻,可以保證資料庫的最新更改內容被寫到這個歸檔日誌中,並對其備份,那麼備份時間點之前的那些歸檔,就不再需要了。
考慮到備份全部歸檔會浪費大量磁碟空間,也沒有這個必要,我們可以在RMAN備份前,先刪除一部分歸檔,使歸檔備份組可以小一點,在磁碟空間比較緊張的情況下尤為需要注意,刪除歸檔,可以使用以下的命令:
--刪除7天前歸檔RMAN> delete noprompt archivelog all completed before 'sysdate-7';或RMAN> delete noprompt archivelog until time 'sysdate-7';
--刪除7小時前歸檔RMAN> delete noprompt archivelog all completed before 'sysdate-7/24';或RMAN> delete noprompt archivelog until time 'sysdate-7/24';
注意文法區別,前者有all關鍵字,而後者沒有,不能互換使用,否則會報錯:
RMAN> delete noprompt archivelog all until time 'sysdate-7';
RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-00558: error encountered while parsing input commandsRMAN-01009: syntax error: found "until": expecting one of: "backed, completed, device, like, ;, tag"RMAN-01007: at line 1 column 32 file: standard input

RMAN> delete noprompt archivelog completed before 'sysdate-7/24';
RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-00558: error encountered while parsing input commandsRMAN-01009: syntax error: found "completed": expecting one of: "all, double-quoted-string, from, high, integer, like, logseq, low, scn, sequence, single-quoted-string, time, until"RMAN-01007: at line 1 column 28 file: standard input
刪除完以後,記得crosscheck一下,再把失效的歸檔日誌記錄從控制檔案中去掉
RMAN> crosscheck achivelog all;RMAN> delete noprompt expired archivelog all;

備份的時候還可以再利用壓縮特性(RMAN> backup as compressed backupset ...),使備份組更加小,但可能帶來的副作用是備份和恢復會適當久一些,看磁碟空間和時間哪個更重要了。這樣,我們的備份組才是最精簡的。




不小心把歸檔日誌刪除了,沒有備份現在rman恢複提示需要歸檔日誌,怎才可以恢複?指點

以上備份和恢複的過程不需要停止資料庫。 不同的問題,不同的恢複步驟這樣恢複的話,rman會應用你備份的所有歸檔日誌。你2點到10點歸檔日誌是自動
 
rman備份歸檔日誌預設備份到什地方了

sys@STARTREK>select name from v$archived_log where rownum<2 ;NAME------------------------------------------------------------------------------------------C:\APP\FENGJUN\FAST_RECOVERY_AREA\STARTREK\ARCHIVELOG\2013_09_28\O1_MF_1_5_94DY2B47_.ARCdba使用者執行上面的sql語句就可以看到你把歸檔放在哪裡了。

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.