近期处理过一个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、创建定时备份任务,至此达到数据库定时备份的目的。
6、总结
small tablespace和bigfile tablespace各有利弊,在选择采用何种方式创建表空间时需要根据实际情况评估,如果数据库比较小而且增长不快小表空间就完全够用。