天天看點

Rman備份-大表空間(Bigfile Tablespace)備份時間過長處理

近期處理過一個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';

Rman備份-大表空間(Bigfile Tablespace)備份時間過長處理

将測試腳本修改成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、總結

繼續閱讀