2017-04-05 DBA日记,oracle增量备份实施

背景:
随着数据量不断增大,过去的每天全备的备份策略变得捉襟见肘了,主要表现在备份时间长,存放介质容量大,造成DB IO负载加重。为了解决这个问题,需要重新制定备份策略。

问题:
采用那一个备份策略能够令备份的时间减少50%以上?减少备份介质的容量需求?减少IO的负载呢?
分析:
1)oracle数据库在线备份主要分为全备与增量备份两类,具体如下:
1.1 全备:对数据文件中存在数据的块进行备份。
1.2 增量备份:就是在上一次全量备份的基础上,对变化的数据块进行备份。
2)从上面概念对比,就可以发现,增量备份由于只备份上一次全量备份后变化过的数据块,所以理论上备份时间以及备份所产生的IO都应该会比全备少。
3)我们目前的备份策略是每天进行一次全备+归档,在本地存放最新一次备份+归档,在磁带上保留最近30天的备份集,用这种方式来维持数据库安全恢复。而这种策略在数据量越来越多的的情况下,就会面临的背景所提到问题.
4) 基于以上的分析,增量备份的引进与采用应该是该问题的良药了。但是增量备份又分为差异增量,累计增量,具体如下:
4.1 差异增量备份,就是对自上次全量备份或累计增量备份或差异备份以来变化过的数据块进行备份。
4.2 累计增量备份,就是对自上次全量备份以来变化过的数据块进行备份。
4.3 基于以上两点,大概可知特点如下:
 差异增量备份 累计增量备份
备份每次的备份量都比增量少。备份时间短,造成
的IO影响也更少。
与之相反
恢复恢复的时候,全量备份+之后的所有差异备份,
恢复的时间比累计长
恢复的时候,全量备份+之后的最近一次累计增量备份
+归档,
恢复的时间比差异短。
4.4 互相比较之后,我认为恢复的速度与时间,再是更重要的,所以选择累计增量备份。
5)备份策略优化如下:
5.1 周日全量备,周一..周6累计增量备份。
5.2 保留策略:本地保留最新一份,磁带保留30天
6) 风险分析:
6.1 空间不足风险:监控每天的增量备份的大小,在备份开始前,如果当前的空间不足完成备份退出。 增加监控报警,在备份开始前检查,并退出。
6.2 不能完成恢复,做好充分的演练再上线。
7)代码实现
7.1启动block chang track功能,加快增量的备份块扫描
alter database enable block change tracking using file '+fradg/block_change_tracking.log';

7.2 #全备的脚本 如果快速恢复区不能容纳两个全备,退出不备份。
sqlplus / as sysdba << eof
col percent_space_used new_value v_percent_space_used
select sum(percent_space_used) percent_space_used from (
select sum(percent_space_used) percent_space_used from v\$flash_Recovery_area_usage
union all
select percent_space_used from v\$flash_Recovery_area_usage
where file_type='BACKUP PIECE');
exit v_percent_space_used
eof
a=$?
if [ "$a" -le 90 ]
then
rman target / << eof
run{
backup as compressed backupset incremental level 0 database;
delete noprompt obsolete;
}
exit
eof
else
echo "don't backup"
fi


7.3#增量的脚本
sqlplus / as sysdba << eof
col percent_space_used new_value v_percent_space_used
select sum(percent_space_used) percent_space_used from (
select sum(percent_space_used) percent_space_used from v\$flash_Recovery_area_usage
union all
select round(percent_space_used/3,2) from v\$flash_Recovery_area_usage
where file_type='BACKUP PIECE');
exit v_percent_space_used
eof
a=$?
if [ "$a" -le 90 ]
then
rman target / << eof
run{
backup as compressed backupset incremental level 1 cumulative database plus archivelog delete input;
delete noprompt obsolete;
}
exit
eof
else
echo "don't backup"
fi

7.4 设置crontab job
0 18 * * 7 /bin/sh /home/oracle/backupdb_full.sh >> /home/oracle/backupdb_full.log
0 18 * * 1-6 /bin/sh /home/oracle/backupdb_diff.sh >> /home/oracle/backupdb_diff.log

写在之后:
在实际运之后,才发现,执行了0级增量全备及1级的累计全备后,数据库的归档及累计增量的备份集,并不会通过delete noprompt obsolete device type disk;命令进行删除,稍不注意,就会令快速恢复区的空间不足,数据库挂起,ORACLE给出的解释是这不是一个bug,这是因为delete obsolete;这个命令的判断是基于全备(leve 0的全备或非增量的全备)进行的,虽然作了累计增量leve 1的备份,是恢复时不需要用之前的归档日志的,但是oracle的全备却是同时依赖归档及累计增量进行数据还原与恢复。同时oracle的增量level 1的备份是在recover 命令上使用的,而不是restore上。基于以上原因,所以调整策略如下:
每次进行增量level1之前,先执行如下命令把归档备在异地上,进行删除,以减少快速恢复的空间占用:
run{
allocate channel c1 type 'sbt_tape';
backup as compressed backupset archivelog all delete input;
release channel c1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值