企業RAC數據庫rman備份實施手記
Oracle RAC的備份,其實和單節點備份區別不大,只需要注意RAC的特性,在編寫備份腳本時,注意RAC各個節點的Archive log存儲方式、RAC數據盤使用的磁盤方式等。
本次備份策略,依然采用比較傳統的每周日進行一次全量備份,其它時間進行增量備份策略:
另,備份保留策略設置REDUNDANCY 為 1,即保留一份有效備份即可。
1. 準備備份空間
通過NFS方式,在兩個RAC節點,掛載NFS共享磁盤,做為數據備份存儲:
# NFS服務搭建過程,請參考其它nfs文檔,此處不再贅述;
# 為方便開機自動掛載,將NFS共享盤,添加到開機自動掛載:
# vi /etc/fstab
192.168.10.153:/dbbackup /dbbackup ? ? ? ? ? ? nfs ? ? defaults ? ? ? ?0 0
# mount -a
# df -h
Filesystem ? ? ? ? ? Size Used Avail Use% Mounted on
/dev/mapper/vg_template-lv_root
110G ? 32G ? 74G ?30% /
tmpfs ? ? ? ? ? ? ? ? 16G 207M ? 16G ? 2% /dev/shm
/dev/sda1 ? ? ? ? ? ? 477M ? 76M 376M ?17% /boot
192.168.10.153:/dbbackup
500G ? 33M 500G ? 1% /dbbackup
2. 準備備份腳本
$ more /dbbackup/scripts/zydb/full_zydb.sh
echo -e '******Start********_'$(date '+%Y%m%d%H%M%S')
source /home/oracle/.bash_profile
rman target / log=/dbbackup/logs/zydb/full_zydb/full_zydb_`date +%Y%m%d-%H%M%S`.log < run{ allocate channel c1 type disk; allocate channel c2 type disk; backup as compressed backupset incremental level 0 tag 'zydb_incr_level_0' format '/dbbackup/zydb/full_%d_%T_%s' database include current controlfile; backup as compressed backupset archivelog all format '/dbbackup/zydb/arclog_0_%s_%p_%t_%d' delete input; crosscheck backup; delete noprompt expired backup; delete noprompt obsolete; crosscheck archivelog all; delete noprompt expired archivelog all; release channel c1; release channel c2; } exit; EOF $ more /dbbackup/scripts/zydb/incr_zydb.sh echo -e '******Start********_'$(date '+%Y%m%d%H%M%S') source /home/oracle/.bash_profile rman target / log=/dbbackup/logs/zydb/incr_zydb/incr_zydb_`date +%Y%m%d-%H%M%S`.log < run{ allocate channel c1 type disk; allocate channel c2 type disk; backup as compressed backupset incremental level 1 tag 'zydb_incr_level_1' format '/dbbackup/zydb/incr_%d_%T_%s' database include current controlfile; backup as compressed backupset archivelog all format '/dbbackup/zydb/arclog_1_%s_%p_%t_%d' delete input; crosscheck backup; delete noprompt expired backup; delete noprompt obsolete; crosscheck archivelog all; delete noprompt expired archivelog all; release channel c1; release channel c2; } exit; EOF 注意: 此備份腳本其實和單節點腳本無差別,是因為當前RAC的歸檔文件,是存在ASM空間內的;如果離線歸檔沒有存放在共享空間,則以上腳本不可行,需要修改為能同時訪問RAC所有節點; 備份加入compressed進行壓縮存儲,節省備份存儲空間(備份效率會有損耗); 備份腳本準備完成后,建議手動執行一次,確認腳本執行狀態正常。 3. 開啟塊跟蹤 Block Change Tracking 塊變更跟蹤功能,是指有數據塊發生改變時,就會將其記錄在跟蹤文件中,記錄從上一次0級備份以來數據塊的變化。當RMAN進行增量備份時,就不用完全遍歷整個數據文件,查找需要備份的數據塊,從而提高了備份的效率。 SQL> set linesize 500 SQL> col FILENAME format a50 SQL> select * from v$block_change_tracking; STATUS ? ? FILENAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? BYTES ---------- -------------------------------------------------- ---------- DISABLED SQL> alter database enable block change tracking using file '+DATA'; -- 查看開啟后的狀態: SQL> set linesize 500 SQL> col FILENAME format a50 SQL> select * from v$block_change_tracking; STATUS ? ? FILENAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? BYTES ---------- -------------------------------------------------- ---------- ENABLED ? +DATA/zydb/changetracking/ctf.284.1065039345 ? ? ? ? 11599872 4. 配置備份自動執行 目前自動執行有如下方案: 通過操作系統的定時任務,例如Linux的Crontab服務; 通過Oracle自帶的DBMS_SCHEDULE來執行; 本次備份的數據庫有兩個RAC節點,通過Linux的crontab備份,會產生節點間備份任務協調等問題,因此直接采用Oracle的DBMS_SCHEDULE來執行備份任務; 全量備份任務,指定每周日凌晨1點執行; 在BYDAY參數指定周日(BYDAY=SUN),執行時間指定 1 點(BYHOUR=1): begin dbms_scheduler.create_job ( job_name ? ? ? => 'ZYDB_BAK_LEVEL_0', job_type ? ? ? => 'EXECUTABLE', job_action ? ? => '/dbbackup/scripts/zydb/full_zydb.sh', repeat_interval => 'FREQ=WEEKLY; BYDAY=SUN; BYHOUR=1', enabled ? ? ? ? => true, comments ? ? ? => 'ZYDB Backup JOB LEVEL_0' ); end; / 增量備份任務,指定每周從周一到周六,每天凌晨1點執行; 在BYDAY參數指定周一至周六(BYDAY=MON,TUE,WED,THU,FRI,SAT): begin dbms_scheduler.create_job ( job_name ? ? ? => 'ZYDB_BAK_LEVEL_1', job_type ? ? ? => 'EXECUTABLE', job_action ? ? => '/dbbackup/scripts/zydb/incr_zydb.sh', repeat_interval => 'FREQ=WEEKLY; BYDAY=MON,TUE,WED,THU,FRI,SAT; BYHOUR=1', enabled ? ? ? ? => true, comments ? ? ? => 'ZYDB Backup JOB LEVEL_1' ); end; / SQL> set linesize 500; SQL> col NEXT_RUN_DATE format a50 SQL> col OBJECT_NAME format a30 -- 查看scheduler,以及下次執行時間 SQL> select obj#, object_name, next_run_date from sys.scheduler$_job ssj, dba_objects dob where ssj.obj# = dob.object_id and object_name like 'ZYDB_BAK%'; OBJ# OBJECT_NAME ? ? ? ? ? ? ? ? ? NEXT_RUN_DATE ---------- ------------------------------ -------------------------------------------------- 93354 ZYDB_BAK_LEVEL_0 ? ? ? ? ? ? ? 28-FEB-21 01.38.25.900000 AM PRC 93355 ZYDB_BAK_LEVEL_1 ? ? ? ? ? ? ? 23-FEB-21 01.38.55.400000 AM PRC -- 查看已創建的JOB SQL> select job_name, job_type, enabled, state from user_scheduler_jobs where job_name like 'ZYDB_BAK%'; JOB_NAME ? ? ? ? ? ? ? ? ? ? ? JOB_TYPE ? ? ? ? ENABL STATE ------------------------------ ---------------- ----- --------------- ZYDB_BAK_LEVEL_0 ? ? ? ? ? ? ? EXECUTABLE ? ? ? TRUE SCHEDULED ZYDB_BAK_LEVEL_1 ? ? ? ? ? ? ? EXECUTABLE ? ? ? TRUE SCHEDULED -- 查看JOB運行日志 SQL> select log_id, log_date, status from user_scheduler_job_run_details where job_name like 'ZYDB_BAK%'; no rows selected 至此,備份任務配置完成! Oracle 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。