標籤:des blog http io ar os 使用 sp for
1.備份:物理備份時檔案層次的備份,邏輯備份時資料層次的備份,物理備份為主,邏輯備份作為補充。
物理備份分為使用者管理備份和RMAN備份,前者使用SQL命令和OS的cp命令進行檔案備份,後者使用RMAN工具份。
Undo Segment:修改記錄過程中,記錄修改前的狀態會被記錄到Undo Segment中,這條記錄叫作前鏡像(before images)。當需要撤銷修改比如執行rollback時,就用這條前鏡像覆蓋現有記錄。對於Insert操作,前鏡像就是一個空記錄,對於Update,Delete操作,前鏡像就是修改之前的狀態。
2.在資料庫恢複過程中,日誌和Undo Segment是共同起作用的,二者保證了最終恢複的一致狀態。對應兩個階段:前滾(rollforward)和(rollback)。在前滾階段,在檔案上重演記錄檔,以把檔案恢複到資料庫關閉時的狀態;但是資料庫關閉的時可能很多修改沒有提交,這些操作需要復原,這就需要利用Undo Segment的內容了。
RMAN是一個用戶端工具,它本身不能進行真正的恢複工作,真正的工作由伺服器上的Server Process完成的,當RMAN串連到資料庫,會分配一個Server Process,並由它完成備份恢複操作。備份活動記錄可以放在Target Database的控制檔案,也可以儲存一個單獨的資料庫catalog,需要考慮catalogDatabase Backup策略。
3.RMAN支援備份磁碟和磁帶,如果使用磁帶庫,需要通過廠商提供的介質管理庫(Media Management Library,MML)進行操作。
Flash Recovery Area空間監控:當空間使用達到90%時,會觸發自動刪除。刪除過程會在alert中記錄,如果沒有空間可以釋放,並且空間使用超過85%,就會記錄一個warning日誌;如果超過97%,會記錄一條critical warning日誌,這些日誌內容可以從DBA_OUTSTANDING_ALERTS視圖中看到。Image Copy不能備份到磁帶上,只能備份到磁碟上。
4.備份和恢複:DBA在SCN=100的時刻對資料庫做了一個全備份,記錄檔(包括歸檔日誌和聯機記錄檔)中記錄了隨後的資料庫修改操作。在SCN=500的時刻,資料庫發生故障,比如因為儲存介質故障導致資料檔案丟失。這時,就需要從之前的備份中恢複出SCN=500的資料檔案,然後在這個檔案上重演100--500之間的日誌(這些日誌在歸檔日誌和聯機記錄檔中),最後利用UNDO內容對未提交修改進行復原,最終恢複到SCN=500的一致狀態繼續對外服務。具體過程如:
5.配置備份保留原則:基於恢複視窗和基於冗餘的策略。
a.基於恢複視窗的策略:RMAN>configure retention policy to recovery window of 7 days;
保留的備份檔案必須要保證恢複到近7天的任意時間點。
恢複視窗用來定義資料庫能夠恢複到的最早時間點。
假裝置份策略是每周執行一次全備,本月1號、14號分作了一次全備,恢複視窗定義是7天,現在日期是23號。對於23號而言,恢複視窗7天就意味著要能確保恢複到7天前(也就是16號)的資料庫狀態。為了達到這個目的
必須保留14號的全備份和14號之後的所有歸檔日誌,因此,oracle把1號的備份、1號到14號的歸檔日誌評估為到期(Obsolete)並可以刪除,而14號的備份以及14號以後的歸檔日誌就不能刪除。
b.基於冗餘的策略:定義每個檔案至少保留幾份備份
RMAN>configure retention policy to redundancy 2;
每個檔案至少要保留2份備份,如果有3個備份,則按照時間排序,最早那個備份會被評估為到期(Obsolete),可以刪除。
c.和保留原則相關的其他動作
(1)查看備份策略:RMAN>show retention policy;
(2)查看到期的Obsolete檔案:RMAN>report obsolete;
如果沒定義備份策略,report obsolete會報錯,RMAN>congfigure retention policy to none;
RMAN>report obsolete;
RMAN-00571:===============================================
RMAN-00569:===========ERROR MESSAGE STACK FOLLOWS=========
RMAN-00571:===============================================
(3)通過指定Recovery Window:
RMAN>report obsolete recovery window of 7 days;
(4)通過指定Redundancy策略:
RMAN>report obsolete redundancy 2;
(5)根據保留原則刪除到期檔案
RMAN>delete obsolete;
(6)指定Redundancy備份策略:
RMAN>delete obsolete redundancy 2;
(7)指定Recovery Window策略的刪除
RMAN>delete obsolete recovery window of 4 days;
(8)禁止保留原則:
禁用備份策略以後,所有的備份都不會被評估為到期(Obsolete)的
RMAN>configure retention policy to none;
6.完全備份和增量備份
如果採用Backup Set方式,全備份就是把資料檔案中所有使用到得資料區塊進行備份;如果採用image copy方式,全備份就是對資料檔案一個完整拷貝。而增量備份是把從某一個特定點以來發生變化的資料區塊做一次備份,這個特定點一般式指上次增量備份的時間點。增量備份產生的檔案是backup Set,RMAN只能對資料檔案進行增量備份,控制檔案,日記錄檔不能增量備份。增量備份是在資料區塊層級上的備份,是對從上次增量備份以來發生變化的資料區塊進行備份。這個機制有兩個優勢。其一,介質恢複時,直接用Backup Set中的資料區塊內容覆蓋資料檔案中的資料區塊內容就可以了,而如果使用歸檔日誌進行恢複需要的步驟很多,因此使用增量備份進行恢複要比
使用歸檔日誌進行恢複快得多;其二,增量備份能夠擷取NOLOGGING操作的資料變化,而這些操作不會被記錄到日誌上,因此增量備份比只備份歸檔日誌提供更多的資料保護。
7.完全備份:
RMAN>backup database;
RMAN>backup as compressed backupset database;
RMAN>backup as copy database;
例子:先配置控制檔案自動備份,然後配置自動備份的控制檔案位置在/backup/test/autobackup/,檔案格式%F,最後以Image Copy方式對資料庫做完全備份,備份檔案和資料檔案名相同。
run{
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to ‘/bakcup/test/autobackup/%F‘;
backup as copy db_file_name_convert(‘+data/wxxrzxm‘,‘/backup/test‘) database;
}
在完成Database Backup後,自動備份控制檔案,在使用Image Copy方式備份時,通過希望哎指定目錄下產生的備份檔案和原檔案同名,這個可以通過db_file_name_convert參數實現。但注意這個關鍵字的位置是在datafile或database之前。
RMAN>backup as copy db_file_name_convert=(‘+data/wxxrzxm/datafile‘,‘/backup/test‘) database;
如果想把ASM上的資料檔案備份到ASM上,這種方法可能會報錯。ORA-15046
RMAN>BACKUP AS COPY DB_FILE_NAME_CONVERT(‘+data/wxxrzxm/datafile‘,‘+arch/wxxrzxm2/datafile‘)database;
ASM是用OMF方式管理資料檔案的,OMF方式產生的資料檔案名就是tag_name.file_number.incarnation number格式的,其中“incarnation number”是oracle內部產生的用來唯一標識每個檔案的數字,這個值不允許手工指定。而上面的命令希望手工指定。因此會報錯。
可以用DBCA建立資料庫時指去掉OMF功能,去掉OMF的方法就是選擇第2個“Use Common Location for all Database Files”。
8.增量備份
a.增量備份只備份發生變化的內容。Oracle是以資料區塊作為基本存放裝置單位的,每個資料區塊的塊頭都有SCN,代表最新的版本號碼。增量備份通過讀取每個資料區塊頭的SCN號,並與上次備份時Checkpoint SCN做比較,如果資料區塊的SCN大於等於checkponit SCN,就說明這個
資料區塊可能發生了變化,RMAN就會對這個資料區塊做一個拷貝,並放在備份檔案中。在以前的版本中,Oracle允許定義多個層級的增量備份,在oracle10g只允許0和1兩級了,0級相當於做了一次全備份,但是全完備份不能做增量備份的0級使用。增量備份可以加快恢複速度和減少資料丟失,無論備份檔案格式Backup Set還是Image Copy都可以享用增量備份的好處,但是只有image copy才能使用增量恢複備份。(Incrementally Updated Backup)
b.增量備份種類
增量備份演算法可以分成兩類:差異增量備份和累積增量備份
c.差異增量備份(Differential Incremental Backup)
備份要點在於,每次備份的內容是從上次0級或1級備份以來發生改變的內容。比如周日做0級備份,周一到周五都是1級備份,則周一備份的是周一當天發生的改變,依次類推。
差異增量備份的文法:RMAN>backup incremental level=1 database;
d.累積增量備份(Cumulative Incremental backup)
重點在於每次備份的是從上次0級或1級備份以來發生的變化。比如周一備份的是周一發生的變化,周二備份的是周一和周二共2天的變化,周三備份的是周一、周二、周三共3天發生的變化。見圖如下:
累積增量備份文法:RMAN>backup incremental level 1 cumulative database;
Level 0:
RMAN>run {
backup as copy db_file_name_convert(‘+data/wxxrzxm‘,‘/backup/test‘) incremental level 0 database tag ‘full_backup‘;
}
Level 1:
RMAN>run {
backup incremental level 1 cumulative for recover of copy with tag ‘full_backup‘ database;
recover coyp of database with tag ‘full_backup‘;
}
9.Block Change Tracing(塊改變跟蹤)
a.傳統的增量備份為了獲得需要備份的資料區塊,必須對資料檔案中的所有資料區塊進行遍曆,雖然增量備份減少了備份檔案的體積,但是備份效率並不高。
oracle提供了一個特殊的檔案叫作Block Change Tracing File,每當資料區塊發生變化時,相關資訊同時記錄到這個檔案中,這樣當RMAN進行增量備份時,
從這個檔案就可以獲得需要備份的資料區塊列表,而不必對所有資料區塊進行遍曆,因此提高了增量備份的效率。
b.啟動Block Change Tracing
Block Change Tracing功能預設是關閉的,啟用這個功能
SQL>alter database enable block change tracing;
如果不指定檔案名稱,Oracle會使用預設的檔案位置,這個檔案可以從視圖中查看:
SQL>select * from v$block_change_tracking;
通過命令手工指定檔案位置:
SQL>alter database enable block change tracking using file ‘/u04/oradata/ord/changetracking/chg01.dbf‘;
啟動Block change tracking之後就,Oracle會啟動一個ctwr進程負責跟蹤資料變化。
ps -ef|grep ctwr;
關閉Block Change Tracking
SQL>alter database disable block change tracking;
(1)查看是否啟用Block change tracking
SQL>select * from v$block_change_tracking;
(2)1啟動功能,指定檔案
SQL>alter database enable block change tracking using file ‘/backup/bck‘;
(3)確認修改生效
SQL>select * from v$block_change_tracking;
(4)關閉功能並確認
SQL>alter database disable block change tracking;
select * from v$block_change_tracking;
10.其他的RMAN命令
備份資料庫:backup database;
備份歸檔日誌:backup archivelog all;
備份資料庫,歸檔日誌、同時刪除歸檔日誌:backup database plus archivelog delete input;
Oracle 10g的備份命令增加了duration子句,可以明確告訴Oracle在備份過程中允許的資源消耗,比如希望在2個小時內完成備份:
RMAN>backup duration 2:00 database;
如果在指定的時間無法完成備份任務,RMAN會跑出錯誤,ORA-19591說明了錯誤原因是因為超出了指定的時間範圍。
如果不希望這種結果,可以使用partial關鍵字,RMAN會備份儘可能多的檔案,而沒有來得及備份的檔案就會取消。使用Partial時,Oracle推薦同時指定fileperset 1參數,這樣能保證產生的每個備份檔案都對應一個資料檔案。
RMAN>backup duration 0:05 partial database fileperset 1;
如果在指定的時間內沒有完成備份,會把未完成的備份任務取消,而已經完成的保留。
使用duration語句時,還可以通過關鍵字minimize load/time指定希望的負載狀態。比如minimize load是希望備份消耗的負載最小。
RMAN>backup duration 0:01 minimize load database;
minimize time是希望花費時間最小:
RMAN>backup duration 0:01 minimize time database;
11.恢複命令
資料庫的恢複命令包括兩個階段restore和recover,分別對應者同名命令。
在Oracle10g中,restore命令增加了一個preview子命令,這個命令可以用來提前確定RMAN將使用那些裝置進行恢複。
C:/>rman target /
RMAN>spool log to abc.log;
RMAN>restore datafile 1 preview;
RMAN>restore database preview summary;
RMAN>spool log off;
RMAN>exit;
restore datafile 1 preview的輸出,可以看出RMAN將選擇/backup/test/system01.dbf這個備份檔案進行恢複,但是缺少必須的歸檔日誌。
12.查看、檢查、維護備份記錄
RMAN>list backup;
RMAN>list copy;
如果是EXPIRED或者是X,則說明這個檔案不可用,可能從磁碟上刪除了。但是RMAN不會自動進行檢查,必須使用crosscheck命令檢查。
RMAN>crosscheck copy; 輸出的failed,succeeded表明檢查結果,之後用list命令重新查看,這回對應的檔案狀態都變成了X,也就是說這些磁碟檔案不複存在了。
RMAN>delete expired copy;
13.通過視圖查看備份狀態
Oracle 10g中新增了2個視圖:v$rman_output和v$rman_status,從第一個視圖中可以查看每個任務的日誌,第2個視圖可以查看備份任務的完成狀態。
SQL>select output from v$rman_output;
查看每次備份任務的完成狀態:
select command_id,row_type,operation,status from v$rman_status order by command_id desc
轉自:http://blog.sina.com.cn/s/blog_a32eff2801011fhn.html
Oracle備份之RMAN