近期處理過一個rman備份的問題,資料庫資料量大概在2.5T左右,由于在巡檢過程中發現客戶對資料庫沒有備份,從資料安全角度出發,為客戶設定了rman定時備份。但是通過備份日志檢視備份整庫需要需要20多個小時,和預期嚴重不符。而且比較奇怪的是發現并行通道數設定的是4,但是日志展現出基本上用的是單通道在執行備份。通過檢視資料庫發現工程師當時業務表空間使用的是Bigfile Tablespace,由于大表空間就有一個資料檔案,即使設定了并行參數預設情況下也不會按照并行參數執行。查詢表空間類型腳本如下:
SQL> select TABLESPACE_NAME, BIGFILE from DBA_TABLESPACES;
TABLESPACE_NAME BIG
------------------------------ ---------
...
USERS NO
XIAOZC01 YES
大表空間(Bigfile Tablespace)在oracle10g被引入,解決了單個資料檔案在預設DB_BLOCK_SIZE=8k的情況下最大32gb的限制,Bigfile Tablespace隻允許有一個資料檔案存在。建立大表空間的文法如下:
CREATE BIGFILE TABLESPACE XIAOZC DATAFILE '/DATA/XIAOZC/XIAO.dbf' size 1M AUTOEXTEND ON; --XIAOZC為表空間名
通過大表空間Oracle 将資料檔案中的最大塊數從 400 萬個塊增加到最大 40 億個塊,也就是說同樣DB_BLOCK_SIZE=8k的情況下單個資料檔案最大可以增長到32TB。
接下來的内容将是整個處理過程進行記錄
1、對于大表空間并行的備份方式是采用MultiSection方式進行備份,于是進行備份嘗試,但是觸發報錯,執行的腳本如下:
allocate channel ch1 type disk;
allocate channel ch2 type disk;
allocate channel ch3 type disk;
allocate channel ch4 type disk;
backup as compressed backupset section size 32G database format 'Q:\dbbak\xiaozc_%U.bak';
報錯提示section size部分有錯誤,更改文法發現還是報錯,不能識别section字段,從官方文章中查到如下:
A description of the MultiSection Backup feature introduced in Oracle11G.MultiSection備份特性從11g才開始支援,客戶的環境是oracle10.2.0.5,除了更新沒有特别好的方式,于是溝通資料庫更新。
2、對資料庫進行更新,更新過程省略。
3、對更新的資料庫進行備份操作,全庫備份時間由原來的20多個小時直接降低到2.5小時,備份腳本如下:
rman target /
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
RMAN> backup as compressed backupset section size 32G database format 'Q:\dbbak\xiaozc_%U.bak';
将測試腳本修改成bat檔案在定時任務中調用,bat檔案内容如下:
run{
allocate channel ch1 type disk;
allocate channel ch2 type disk;
allocate channel ch3 type disk;
allocate channel ch4 type disk;
backup as compressed backupset section size 32G database format 'Q:\dbbak\xiaozc_%U.bak';
SQL 'alter system archive log current';
SQL 'alter system archive log current';
SQL 'alter system archive log current';
backup archivelog all format 'Q:\dbbak\arch_%U.bak';
backup current controlfile format 'Q:\dbbak\ctrl_%U.bak';
backup spfile format 'Q:\dbbak\spfile_%U.bak';
release channel ch1;
release channel ch2;
release channel ch3;
release channel ch4;
}
4、對歸檔日志進行定期維護,維護腳本如下:
run{
allocate channel ch1 type disk;
allocate channel ch2 type disk;
SQL 'alter system archive log current';
backup archivelog all format 'Q:\dbbak\arch_%U.bak' delete input;
backup current controlfile format 'Q:\dbbak\ctrl_%U.bak';
crosscheck backup;
crosscheck archivelog all;
delete noprompt obsolete device type disk;
delete noprompt expired backup;
delete noprompt archivelog all;
release channel ch1;
release channel ch2;
}
5、建立定時備份任務,調用bat檔案,測試沒有問題,至此達到資料庫定時備份的目的。
6、總結