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'

相关推荐
数据智能老司机13 分钟前
CockroachDB权威指南——SQL调优
数据库·分布式·架构
数据智能老司机14 分钟前
CockroachDB权威指南——应用设计与实现
数据库·分布式·架构
数据智能老司机27 分钟前
CockroachDB权威指南——CockroachDB 模式设计
数据库·分布式·架构
数据智能老司机19 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机20 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
松果猿20 小时前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
无名之逆20 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s91236010120 小时前
rust 同时处理多个异步任务
java·数据库·rust
数据智能老司机20 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
hzulwy21 小时前
Redis常用的数据结构及其使用场景
数据库·redis