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'

相关推荐
时差95316 分钟前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式18 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
Mephisto.java24 分钟前
【大数据学习 | kafka高级部分】kafka的优化参数整理
大数据·sql·oracle·kafka·json·database
秋意钟1 小时前
MySQL日期类型选择建议
数据库·mysql
Dxy12393102161 小时前
python下载pdf
数据库·python·pdf
桀桀桀桀桀桀2 小时前
数据库中的用户管理和权限管理
数据库·mysql
BearHan3 小时前
Sqlsugar调用Oracle的存储过程
oracle·存储过程·orm
superman超哥3 小时前
04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
数据库·oracle·性能优化·dba
用户8007165452003 小时前
HTAP数据库国产化改造技术可行性方案分析
数据库
engchina4 小时前
Neo4j 和 Python 初学者指南:如何使用可选关系匹配优化 Cypher 查询
数据库·python·neo4j