RMAN備份
一、RMAN備份原理
1、簡介
RMAN備份是ORACLE數據庫自帶的在線熱備工具,使用RMAN不需要安裝,可會數據塊進行壓縮和檢測,可備份數據塊的變化量,是數據塊級別的備份解決方案。
缺點:若數據庫中出現壞塊,RMAN會自動檢測壞塊並跳過壞塊,造成一定數據的丟失,建議,採用expdp/impdp、ACTIVE DATAGUARD、ORACLE GOLDENGATE等在線邏輯遷移數據方案。
RMAN備份分爲catalog和nocatalog兩種:
nocatalog:直接進行備份,將備份信息直接記錄到控制文件,會導致控制文件持續增長,若控制文件丟失,將導致備份不能恢復,控制文件存在風險,
可通過修改參數文件中的control_file__record_keep_time參數來確定控制文件數據過期時間,缺省值是7days。
恢復:nocatalog恢復,恢復數據庫需要控制文件的記錄信息,必須要現將數據庫啓動到mount階段才能回數據庫進行恢復,若控制文件損壞,需要先進行恢復。
1) 建立oracle運行環境(包括init或sp文件)
2) 文件方式恢復controlfile到init文件指定的位置
3) startup mount
4) rman,恢復datafile
5) alter database open resetlogs
catalog:需要創建單獨的備份數據庫、恢復目錄和備份表空間,是將備份信息直接記錄到備份數據庫中,
1) 建立oracle運行環境(包括init或sp文件)
2) rman ,restore controfile
3) alter database mount
4) rman, restore datafile
5) alter database open resetlogs
2、備份原理
備份進程:主進程 影子進程 通道進程
rman是集成在oracle數據庫內部的免安裝工具,是採用調用sys.DBMS_RCVMAN和sys.DBMS_BACKUP_RESTORE兩個數據包來完成工作,由於這兩個數據表不需要oracle數據庫的支撐,所以數據庫在nomount狀態就可以啓動RMAN。
RMAN備份原理:
當rman target /登錄,首先會檢測ORACLE_SID變量中的實例名,並在實例中生成一個RMAN服務器進程(通道進程)和主進程,影子進程。該通道進程會在pga(有時在sga)中分配內存,在內存中每個通道進程都會構建緩衝區(輸入,輸出),先將備份文件讀入輸入緩衝區,一個輸入緩衝區寫滿會使用另一個輸入緩衝區,然後RMAN確認備份的數據塊並進行校驗之後推入輸出緩衝區,當輸出緩衝區被填滿,會將來自不同數據文件的數據混在一起寫入磁盤或磁帶。爲通道進程工作提供內存;
然後RMAN主進程調動sys.DBMS_RCVMAN數據包用來訪問控制文件,並在任何操作前設置TIME運算符和校驗數據文件頭的檢查點信息,將此類信息返回給RMAN主進程;並且RMAN 在構建實際備份/還原命令之前自動執行負載均衡(load-balancing)算法和性能增強(performance-enhancing)算法。
然後RMAN主進程通過sys.DBMS_BACKUP_RESTORE數據包校驗sys.DBMS_RCVMAN數據包傳回來的控制文件和必須的一些信息,並將這些信息傳回RMAN服務器進程(通道進程);
RMAN服務器進程(通道進程)會基於recover.sql文件的代碼創建一個PL/SQL塊來調用sys.DBMS_BACKUP_RESTORE數據包(備份的動力)備份數據文件,影子進程在通道之間進行輪詢掃描並將信息返回給RMAN服務器進程(通道進程),RMAN主進程並在通道之間基於負載均衡算法分配進程工作。
RMAN進程內存原理:
RMAN登錄產生通道進程,通道進程在pga中(有時在sga中)分配內存,在內存中每個通道進程都會構建緩衝區(輸入,輸出),先將備份文件讀入輸入緩衝區,一個輸入緩衝區寫滿會使用另一個輸入緩衝區,然後RMAN確認備份的數據塊並進行校驗之後推入輸出緩衝區,當輸出緩衝區被填滿,會將來自不同數據文件的數據混在一起寫入磁盤或磁帶。
磁盤備份會使用PGA作爲備份緩衝區用於通道進程內存分配。若OS沒配置本地異步I/O,則可利用DBWR_IO_SLAVES參數使用I/O從屬來填充內存的輸入緩衝。
若DBWR_IO_SLAVES參數設置爲非零,則RMAN會自動分配4個I/O從屬來協調輸入緩衝區數據加載。此時用於磁盤備份的內存緩衝區就會被退出共享池,若存在大池也會被推入大池。
如果沒有使用磁帶從屬,則會在PGA中分配用於磁帶輸出緩衝區的內存。
爲了保持合理範圍的內存分配,根據一起備份的文件數,分配內存緩衝大小需要應用下面的規則。
1) 如果備份集內的文件數小於或者等於4個,RMAN 會爲每個文件分配4個大小爲1MB的緩衝區。緩衝區總和小於或者等於16MB。
2) 如果備份集內文件數多餘4個但少於等於8個,RMAN 會爲每個文件分配4個大小爲512KB的緩衝區。緩衝區總和確保少於或者等於16MB。
3) 如果多路複用的文件數多餘8個,RMAN 會爲每個文件分配4個大小爲128KB的緩衝區。這就確保每個要備份的文件佔用512KB的緩衝區內存。
--查詢來監控備份運行時基於每個每個文件的緩衝區大小:
SELECT set_count,device_type,TYPE,filename,buffer_size,buffer_count,open_time,close_time
FROM v$backup_async_io
ORDER BY set_count,TYPE,open_time,close_time;
在V$SESSION_LONGOPS 視圖中可以跟蹤的是DBMS_BACKUP_RESTORE 數據包的工作。
二、RMAN參數
RMAN> show all;
using target database control file instead of recovery catalog
RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
--指定備份過期,常用第二種。
--CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;recover Window保持足量備份,可以保證恢復到7天內任意時刻,超過七天就被標記爲obsolete
--CONFIGURE RETENTION POLICY TO REDUNDANCY 2; 保持最新的2次備份,超過兩次會標記爲redundancy,默認是1。
--CONFIGURE RETENTION POLICY TO NONE;不需要保留策略,clear恢復會默認保留策略。
CONFIGURE BACKUP OPTIMIZATION OFF; # default
--默認值爲關閉,如果打開,rman將對備份的數據文件及歸檔等文件進行一種優化的算法。
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
--默認的設備類型,磁盤:disk, 磁帶:SBT
CONFIGURE CONTROLFILE AUTOBACKUP ON;
--強制數據庫在備份文件或者執行改變數據庫結構的命令之後將控制文件自動備份,默認值爲關閉。這樣可以避免控制文件和catalog丟失後,控制文件仍然可以恢復。
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
--配置控制文件的備份路徑和備份格式-磁盤
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO '%F'; # default
--配置控制文件的備份路徑和備份格式-磁帶
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
--配置並行度-磁盤
CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
--配置並行度-磁帶
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
--配置數據庫的每次備份的copy數量,oracle的每一次備份都可以有多份完全相同的拷貝。
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
--配置數據庫的每次備份的copy數量,oracle的每一次備份都可以有多份完全相同的拷貝。
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
--設置數據庫的歸檔日誌的存放設備類型,copy數量
CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' RATE 80 M;
--配置備份文件的備份路徑和備份格式;CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'C:...%d_DB_%u_%s_%p';
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
--dg歸檔刪除策略 CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oracle/product/10.2/database/dbs/snapcf_essdb1.f'; # default
--配置控制文件的快照文件的存放路徑和文件名,這個快照文件是在備份期間產生的,用於控制文件的讀一致性
三、常用命令
1、設置環境變量
-語言和時間格式
NLS_LANG=american
NLS_DATE_FORMAT='Mon DD YYYY HH24:MI:SS'
-字符集格式,連接已卸載的數據庫需要設定字符集
NLS_LANG = american_america.we8dec
2、常用備份命令
backup database; --備份數據庫,默認在閃回區
backup database format '.../%d_%U'; --備份數據庫並指定備份路徑
backup database include current controlfile plus archivelog delete all input; --備份數據文件、控制文件、歸檔日誌
backup incremental level 0 database; --差異增量備份數據庫
backup incremental level 0 cumulative database; --累積增量備份數據庫
backup as compressed backupset database format '/home/oracle/full.bak'; --壓縮備份數據庫
backup tablespace users format '/home/oracle/user.bak'; --備份表空間
backup datafile '/opt/oracle/oradata/orcl/users01.dbf' format '/home/oracle/user.bak'; --備份數據文件
backup current controlfile format '/home/oracle/user.bak'; --備份控制文件
backup spfile format '/home/oracle/spfile.bak'; --備份參數文件
backup current controlfile plus archivelog; --備份控制文件並歸檔然後備份歸檔日誌
backup archivelog all format '/home/oracle/user.bak' delete all input; --備份歸檔日誌並刪除
RMAN> backup as copy datafile 4 format '/u01/app/oracle/rmanbak/df_%d_%U';
RMAN>backup archivelog sequence between50 and 120 thread1 delete input;
RMAN> backup archivelog from time "sysdate-15" until time "sysdate-7";
備份控制文件:
alter database backup controlfile to trace as '/oracle/jzjsctl.bak';
---select tracefile from v$process where addr in (select paddr from v$session where sid in (select sid from v$mystat));
--備份閃回區
--備份位於閃回區而沒有備份的所有文件(控制文件,歸檔文件,數據文件),閃回日誌,當前redo,當前控制文件不備份
RMAN> backup recovery area;
--備份磁盤上沒有備份過的文件,而不論是否在閃回區
RMAN> backup recovery files;
3、常用恢復命令
restore database; --還原數據庫
recover database; --恢復數據庫
restore tablespace users; --還原表空間
recover tablespace users; --恢復表空間
restore datafile n; --還原數據文件
recover datafile n; --恢復數據文件
SET ARCHIVELOG DESTINATION TO '/bak2/arch5_16';
restore archivelog sequence between 10 and 20; --還原歸檔日誌
restore archivelog from logseq 27 ; 還原log sequence爲27之後的所有歸檔日誌
restore archivelog from logseq 27 until logseq 29; 還原log sequence爲27到29這幾個歸檔日誌
restore controlfile from autobackup; --還原控制文件
restore spfile to '/back/log/spfile.ora' from autobackup; --還原參數文件
restore validate database; --驗證數據庫可恢復性
restore validate controlfile; --驗證控制文件可恢復性
restore validate spfile; --驗證參數文件可恢復性
4、查看備份集
list backup; --列出數據庫中所有的備份集
list expired backup; -列出過期備份;
list backup of database; --查看數據庫備份集
list backup of database summary; --查看備份集的詳細信息。
list backup of tablespace users; --查看錶空間備份集
list backup of datafile n; --查看備份的數據文件
list backup of controlfile; --查看控制文件備份集
list backup of archivelog all; --查看歸檔日誌備份集
list archivelog all; --查看當前所有歸檔日誌
list expired backup; --列出所有無效備份
catalog:
1、註冊副本
catalog datafilecopy 'c:\user01.bak';
2、註冊備份片
catalog backuppiece 'c:\demo_10.dbf' ;
3、註冊特定目錄的所有備份文件
catalog start with 'c:\bak';
4、註銷備份記錄
change datafilecopy 'c:\user01.bak' uncatalog;
change controlfilecopy 'c:\demo.ctl' uncatalog;
change backuppiece 'c:\demo_10.bak' uncatalog;
5、註冊歸檔日誌
catalog archivelog '/u01/CCBPROD/oracle/oradata/archive/thread_2_seq_12307.2161.899944423';
cataloged archived log
archived log file name=/u01/CCBPROD/oracle/oradata/archive/thread_2_seq_12307.2161.899944423 RECID=9578 STAMP=900068071
5、管理備份集
crosscheck backup 覈對所有備份集;
crosscheck backup of database 覈對所有數據文件的備份集;
crosscheck backup of tablespace users 覈對特定表空間的備份集;
crosscheck backup of datafile 4 覈對特定數據文件的備份集;
crosscheck backup of controlfile 覈對控制文件的備份集;
crosscheck backup of spfile 覈對SPFILE的備份集;
crosscheck backup of archivelog sequence 3 覈對歸檔日誌的備份集;
crosscheck copy 覈對所有映像副本;
crosscheck copy of database 覈對所有數據文件的映像副本;
crosscheck copy of tablespace users 覈對特定表空間的映像副本;
crosscheck copy of datafile 6 覈對特定數據文件的映像副本;
crosscheck copy of archivelog sequence 4 覈對歸檔日誌的映像副本;
crosscheck copy of controlfile 覈對控制文件的映像副本;
crosscheck backup tag='SAT_BACKUP';
crosscheck backup completed after 'sysdate - 2'
crosscheck backup completed between 'sysdate - 5' and 'sysdate -2 '
crosscheck backup device type sBT;
crosscheck archivelog all;
crosscheck archivelog like '%ARC00012.001'
crosscheck archivelog from sequence 12;
crosscheck archivelog until sequence 522;
6、刪除備份
1、刪除陳舊備份
delete obsolete; #提示
delete noprompt obsolete; #不提示
2、刪除EXPIRED備份集
delete noprompt expired backup;
3、刪除EXPIRED副本
delete noprompt expired copy ;
4、刪除特定備份集
delete noprompt backupset 19;
5、刪除特定備份片
delete noprompt backuppiece 'c:\test\demo1.bak';
6、刪除所有備份集
delete noprompt backup ; 或者
delete noprompt backupset;
7、刪除特定映像副本
delete noprompt datafilecopy 'c:\test\demo.bak'; 刪除數據文件
delete noprompt controlfilecopy 'c:\test\controlfile_bak.ctl'; 刪除控制文件
delete noprompt archivelog 'c:\test\arc.bak'; 刪除歸檔日誌
delete noprompt force archivelog all completed before 'sysdate - 7';
8、刪除所有映像副本
delete noprompt copy;
9、在備份後刪除輸入對象
backup archivelog all delete input ;
backup backupset 22 format='c:\test\%u.bak' delete input ;
10、delete expired archivelog all;就是同步控制文件的信息和實際物理文件的信息。