在瞭解備份優化以前首先要知道RMAN 備份的原理:算法
當RMAN 發起備份任務時,會開啓相應的通道工做,每個通道在數據庫服務器都有一個相對應的服務進程,RMAN 會首先調用DBMS_RCVMAN 包讀取控制文件,肯定數據文件的存放位置等信息,獲取該信息後,RMAN 將調用DBMS_BACKUP_RESTORE 包對數據文件進行讀取並備份。讀取過程就是基於RMAN 備份的算法規則來編譯須要備份的文件列表。RMAN 執行備份操做時,會請求Oracle 的共享內存段來建立本身備份緩衝區,與通道相對應的服務進程會去掃描數據文件中的數據塊,而且將須要備份的數據塊讀入到輸入緩衝區中,當輸入緩衝區被填滿時,會被轉移到輸出緩衝區,在轉移的過程當中,也會對數據塊進行檢測,檢測是否有損壞的數據塊,當輸出緩衝區被填滿時,就會造成備份片,與通道相對應的服務進程最終會將其寫入到指定備份片的位置。數據庫
全部的備份恢復不能千篇一概,須要契合不一樣客戶的生產環境針對性的去調整和優化,不然頗有可能會致使生產環境出現問題。生產環境場景有:備份磁盤空間不足、存儲I/O 慢、存儲很快且cpu 資源足夠等。服務器
RMAN 備份的優勢以下(以11g 爲例):oracle
1 )RMAN 會檢測數據壞塊ide
2 ) 不須要開熱備,額外的重作會減小工具
3 )RMAN 備份只備份使用過的塊性能
4 )RMAN 備份具備壓縮特性優化
5 ) 支持增量備份策略orm
對於不一樣的場景咱們須要給出不一樣的優化方法:進程
場景一:劃分的備份文件系統空間不足:
存在這麼一種狀況,查詢數據庫大小略大於備份空間大小咱們怎麼處理?
這就要從rman 的備份特性提及兩個概念:
1 )null block compression
2 )unused block compression
10.1 版本 RMAN 的壓縮方式爲空值壓縮(null compression ),當掃描數據塊進行備份時,能夠進行空值壓縮,對塊頭爲空的塊,在從輸入緩衝區轉移到輸出緩衝區時將其過濾掉,不會去備份已分配但未被格式化的塊。
在10.2 版本RMAN 的壓縮方式又出現一種未使用塊壓縮(unused block compression ),這種壓縮方式是過濾掉不包含數據的數據塊,就是該數據塊已經被使用過(被格式化過),可是不包含數據。
只有在知足如下條件的時候,Unused Block Compression 會起做用:
1 )初始化參數COMPATIBLE=10.2 或者更新的版本
2 )數據文件是本地管理模式
3 )徹底備份或0 級備份
4 )備份的指定位置在磁盤上
因此備份出來的備份片至關於被壓縮過,因此這也是rman頁遊備份工具一個很重要的特性,減小沒必要要的空間浪費。
場景二:備份文件系統空間很是小
這時候咱們很容易想到rman 的壓縮特性,rman 可以使用二進制壓縮算法進行備份,這個二進制的壓縮算法可以大大的減小備份集所須要的磁盤空間,一般狀況下壓縮比會達到2-4 倍
使用這種壓縮方式的命令以下:
rman> backup as compressed backupset database;
1 )啓用壓縮將消耗更多的CPU 資源。。
2 )啓用壓縮備份耗時略有增長
3 )節省存儲備份的空間
場景三:備份片很大,備份時間較長
加快備份速度的方法無非是開並行,這裏涉及到兩個關鍵詞:通道、並行
自動分配通道(CHANNEL ):
Configure 命令來完成通道配置。若是沒有用手工方式爲RMAN 分配通道,RMAN 將利用預約義的設置來爲命令自動分配通道
RMAN>Configure channel device type disk format ‘xxx’;
可配置自動分配多個通道
手工分配通道(PARALLELISM ):
allocate channel 命令進行分配通道,這個命令只能放在run 命令塊中,而且它分配的通道也只做用於本run 塊內的命令。
run {
Allocate channel d1 device type disk format ‘xxx’;
Allocate channel d2 device type disk format ‘xxx’;
Backup database;
release channel d1 ;
release channel d2 ;
}
注意 若是配置的通道個數據小於 PARALLELISM ,如 PARALLELISM 爲 5 , configure channl 1 , 2 , 3 則 1 , 2 , 3 指定的配置備份 4 , 5 按默認的配置來備份。若是配置的通道大於 PARALLELISM , PARALLELISM 爲 3 ,配置 5 個通道,則通道 4 , 5 被忽略
一個 CPU 任一時刻只能處理一個事務,並行度不能超過 CPU 數量。
場景四:數據庫數據量很龐大,增量備份須要較長時間
這裏須要打開一個數據庫的特性:塊跟蹤
1 )塊修改跟蹤會記錄數據文件裏每一個塊的更新信息,這些跟蹤信息保存在跟蹤文件裏。當啓動塊修改跟蹤後,RMAN 使用跟蹤文件裏的信息,只讀取改變頁遊http://www.coubai.com塊信息,而不用在對整個數據文件進行掃描,從而提升了RMAN 備份的性能。
2 )塊修改跟蹤默認是禁用的,若是啓用了增量備份,那麼建議開啓塊修改跟蹤。 啓用BCT 後,不須要其餘的維護操做。
3 )在備份期間,修改跟蹤會維護已經標記爲更改的塊的位圖信息。Oracle 會自動管理修改跟蹤文件的大小,只保留最近最近8 次塊更改的信息。 超過8 次,那麼最前面的塊位圖信息會被當前的更改覆蓋。
4 )第一個0 級的增量備份掃描整個數據文件。隨後的增量備份使用塊跟蹤文件的信息,只掃描自上次備份以來被標記爲更改的塊。
5 )若是是RAC 環境,塊跟蹤文件必須放在共享設備上。
6 )數據庫在open 或者 mounted 狀態均可以啓用塊跟蹤.
打開塊跟蹤:
(1 ) 查看是否設置路徑
SQL> showparameter db_create_file_dest
NAME TYPE VALUE
db_create_file_dest string
(2 ) 設置存放塊跟蹤文件路徑
SQL> alter system set db_create_file_dest = 'oracle/blkch' scope=both sid='*';
System altered.
(3 ) 檢查設置路徑
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
db_create_file_dest string oracle/blkch
SQL>
(4 ) 打開塊跟蹤
SQL> alter database enable block change tracking;
Database altered.
也能夠直接指定目錄或者複用已存在的文件
SQL>alter database enable block change tracking using file 'oracle/blkch/blkch.chg' reuse;
禁用塊跟蹤:
SQL>alter database disable block change tracking;
查看塊跟蹤是否可用:
SQL> select status, filename fromv$block_change_tracking;
STATUS FILENAME
ENABLED /oracle/blkch/blkch.chg
注意 快跟蹤使用場景通常有兩種: 1 、常規含有增量備份的 RMAN 備份策略; 2 、應用於 XTTS 遷移,能夠有效加快增量數據的備份。
在使用 RMAN 增量備份的狀況下,啓用塊跟蹤,在作增量備份時會縮短 RMAN 備份的時間, 由於不用掃描整個數據文件。 可是塊跟蹤也會帶來其餘的一些開銷。 因此要根據實際狀況決定是否啓用塊跟蹤。