rman 归档备份 archived log 不重复备份

11.2.0.3数据库环境,使用rman进行归档日志备份,想实现:

(1)每天备份归档日志,备份完并不删除归档日志

(2)归档日志备份成功一次之后,下次再备份的时候rman就自动不会再次备份这个归档日志

这个需求可以通过 backup archivelog all not backed up; 语法来实现。 使用该命令如果遇到 满足 not backed up xx times 的归档才会备份,否则即便该归档仍在DISK上未被删除 也不会重复备份, 避免了重复备份带来的问题,也无需每次备份均删除磁盘上的归档文件。

RMAN> backup archivelog all not backed up;

RMAN> backup archivelog all not backed up;

skipping archive log file /s01/arch/1_31_831398352.dbf; already backed on 30-NOV-13

此外还可以指定 备份几次以上的才不备份, 例如 这里我们要求备份2次或以上的归档 此次才不备份, 那么就是backup archivelog all not backed up 2 times;

RMAN> backup archivelog all not backed up 2 times;


backup archivelog all;

delete noprompt archivelog all completed before 'sysdate -7'; 在本地保留7天的归档日志.

再备份时,如果还这是这样,,则归档会再备份一次。

加上一个子句 not backed up 1 times,就可以实现不备份已经归档的日志。

命令如下:

backup archivelog all not backed up 1 times;  不备份上次已经备份的归档


一、使用RMAN清楚物理删除后的记录

可以使用RMAN来删除archivelog,具体可以按以下步骤操作:

1、物理删除archivelog

2、进入RMAN

3、crosscheck archivelog all;

4、delete expired archivelog all;

这样就在一些Oracle的记录中查不到相应的archivelog记录了。

二、直接使用RMAN删除archivelog

其实在RMAN中是可以使用命令直接将ARCHIVELOG删除的,命令如下:

RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

表示删除7天以前的所有archivelog,但是这个命令的缺点是无法对archivelog进行细致的划分。

三、使用RMAN备份achivelog后删除

这是一种最为稳妥的方法了,使用RMAN备份archivelog,备份后全部删除

backup format '/u01/arch_%T_%s_%U' archivelog all delete input;

或者

backup database plus archivelog;

注:我在库上设置了Streams后,使用RMAN删除archivelog会导致报错RMAN-08137: WARNING:

archive log not deleted as it is still needed. 不知道该如何解决,据说是10.2的一个bug,如果真

是bug的话,那只能在OS层设置删除,或用RMAN进行强制删除了。

10g之后的版本,Oracle在RMAN中内置增加了一项归档文件的删除策略,终于,DBA可以仅通过一项配置就

解决该问题了。该策略对应两个值:

APPLIED ON STANDBY:设置为该值时,当通过附加的DELETE INPUT子句删除Standby数据库仍需要的日志

时,会提示RMAN-08137错误。不过用户仍然可以手动地通过DELETE ARCHIVELOG方式删除。

NONE:设置为该值时,则不启用归档文件的删除策略。默认情况下就是NONE。

例如,启用APPLIED ON STANDBY:

RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;

new RMAN configuration parameters:

CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;

new RMAN configuration parameters are successfully stored

RMAN> run

{
backup archivelog all delete input format---如果 it is still needed还是删除不了的 'ZHSVR044_%d_set=%s_piece=%p_date=%T.ARC.rmn';

}

  1. 进入rman

  2. connect target /

  3. crosscheck archivelog all;

  4. delete expired archivelog all;

DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

说明

SYSDATA-7,表明当前的系统时间7天前,before关键字表示在7天前的归档日志,如果使用了闪回功能,也会删除闪回的数据。

同样道理,也可以删除从7天前到现在的全部日志,不过这个命令要考虑清楚,做完这个删除,最好马上进行全备份数据库

DELETE ARCHIVELOG FROM TIME 'SYSDATE-7';

UNIX/LINUX下也可以通过FIND找到7天前的归档数据,使用EXEC子操作删除

find /oraarchive -xdev -mtime +7 -name "*.dbf" -exec rm -f {} ;

删除N天以前的归档日志,有两个命令:

delete archivelog until time 'sysdate-N'

delete archivelog all completed before 'sysdate-N'

区别已经很明显:

list archivelog until time 'sysdate-1'; 此时是按照归档日志开始时间即fisrt_time作为截止时间

list archivelog all completed before 'sysdate-1' 是按照归档日志完成时间即completion_time作为截止时间

试想如果删除归档日志,还是采用delete archivelog all completed before 'sysdate-N'

相关推荐
指尖上跳动的旋律17 分钟前
shell脚本定义特殊字符导致执行mysql文件错误的问题
数据库·mysql
一勺菠萝丶28 分钟前
MongoDB 常用操作指南(Docker 环境下)
数据库·mongodb·docker
m0_748244831 小时前
StarRocks 排查单副本表
大数据·数据库·python
C++忠实粉丝1 小时前
Redis 介绍和安装
数据库·redis·缓存
wmd131643067122 小时前
将微信配置信息存到数据库并进行调用
数据库·微信
是阿建吖!2 小时前
【Linux】基础IO(磁盘文件)
linux·服务器·数据库
凡人的AI工具箱2 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
ClouGence2 小时前
Redis 到 Redis 数据迁移同步
数据库·redis·缓存
m0_748236582 小时前
《Web 应用项目开发:从构思到上线的全过程》
服务器·前端·数据库
苏三说技术2 小时前
Redis 性能优化的18招
数据库·redis·性能优化