CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED ON ALL STANDBY;
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
说明:
1、需要在rman中进行配置rman target /
2、POLICY TO SHIPPED ON ALL STANDBY表示归档日志必须已经传输到所有备库主机,才能删除对应的归档日志;
3、POLICY TO APPLIED ON ALL STANDBY表示归档日志已经传输到所有备库主机,并且备库上必须应用完归档日志,才能删除对应的归档日志;
总结:
1、上述两种配置,可以确认归档日志传输至备库以后才可以被删除。
2、推荐使用 TO APPLIED ON ALL STANDBY这个!!另外一个出现过bug问题。
案例说明,如果备库未应用,主库归档日志删除时,报错如下
RMAN> delete archivelog all;
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=45 device type=DISK
RMAN-08120: WARNING: archived log not deleted, not yet applied by standby
archived log file name=/oradata/arch/1_52_1236681669.dbf thread=1 sequence=52
二、主备架构下,主库归档日志删除方案
特别注意:如果主备异常,情况一直未被发现或者处理,主库的归档日志可能越积越多,最终撑爆归档目录,进一步主库数据库无法使用。
(一)主库归档日志的删除方案如下
1、rman配置归档日志删除策略(主库上执行)
rman target /
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
2、归档日志备份和删除策略
backup format '/backup/xxxx_arch_%T_%s_%p_%t' archivelog all delete input;
备注:备份完成的归档文件,备份完立刻删除掉
3、主库归档日志定时删除任务(强制删除N天以前的归档日志),防止归档日志撑爆的问题
delete noprompt FORCE archivelog all completed before 'sysdate-3';
(二)主库归档日志定时删除任务案例,强制删除3天以前的归档日志,不管备库是否接受和应用!
1)创建归档日志强制删除脚本
su - oracle
mkdir /home/oracle/scripts
vi /home/oracle/scripts/delete_arch.sh
#!/bin/bash
source /home/oracle/.bash_profile
DTIME=`date +%Y%m%d%H%M%S`
log=/home/oracle/scripts/${DTIME}.log
date > ${log}
rman target / nocatalog log=${log} append <<EOF
delete noprompt FORCE archivelog all completed before 'sysdate-3';
exit
EOF
2)脚本权限修改
chmod 775 /home/oracle/scripts/delete_arch.sh
3)验证
ll /home/oracle/scripts/delete_arch.sh
-rwxrwxr-x 1 oracle oinstall 247 Jun 29 16:53 /home/oracle/scripts/delete_arch.sh
4)制定crontab定时任务
crontab -e
30 5 * * * /home/oracle/scripts/delete_arch.sh >>/home/oracle/scripts/delete_arch.out 2>&1
每天早上5点30分,运行/home/oracle/delete_arch.sh脚本,删除符合条件的归档日志文件
三、主备架构下,备库归档日志删除方案
特别注意:备库的归档日志,不会随着主库删除而删除,需要单独制定备库归档日志文件的删除策略!!
备库归档日志删除方案:
1)rman配置归档日志删除策略,即POLICY TO APPLIED ON ALL STANDBY;
2)备库建立归档日志定时删除任务(强制删除N天以前的归档日志),防止归档日志撑爆的问题。
(一)备库归档日志删除策略
1、rman配置归档日志删除策略(备库上执行)
rman target /
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
2、错误案例,如果归档日志备库还未应用,则备库删除归档日志时,报错如下
RMAN> delete archivelog all;
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=36 device type=DISK
RMAN-08120: WARNING: archived log not deleted, not yet applied by standby
archived log file name=/oradata/arch/1_52_1236681669.dbf thread=1 sequence=52
RMAN-08120: WARNING: archived log not deleted, not yet applied by standby
archived log file name=/oradata/arch/1_53_1236681669.dbf thread=1 sequence=53
List of Archived Log Copies for database with db_unique_name ORCL_ST
=====================================================================
Key Thrd Seq S Low Time
------- ---- ------- - ---------
1 1 51 A 29-JUN-26
Name: /oradata/arch/1_51_1236681669.dbf
Do you really want to delete the above objects (enter YES or NO)? yes
deleted archived log
archived log file name=/oradata/arch/1_51_1236681669.dbf RECID=1 STAMP=1237216215
Deleted 1 objects
(二)备库归档日志定时删除任务案例,强制删除3天以前的归档日志,不管备库是否接受和应用!
1)创建归档日志强制删除脚本
su - oracle
mkdir /home/oracle/scripts
vi /home/oracle/scripts/delete_arch.sh
#!/bin/bash
source /home/oracle/.bash_profile
DTIME=`date +%Y%m%d%H%M%S`
log=/home/oracle/scripts/${DTIME}.log
date > ${log}
rman target / nocatalog log=${log} append <<EOF
delete noprompt FORCE archivelog all completed before 'sysdate-3';
exit
EOF
2)脚本权限修改
chmod 775 /home/oracle/scripts/delete_arch.sh
3)验证
ll /home/oracle/scripts/delete_arch.sh
-rwxrwxr-x 1 oracle oinstall 247 Jun 29 16:53 /home/oracle/scripts/delete_arch.sh
4)制定crontab定时任务
crontab -e
30 5 * * * /home/oracle/scripts/delete_arch.sh >>/home/oracle/scripts/delete_arch.out 2>&1
每天早上5点30分,运行/home/oracle/delete_arch.sh脚本,删除符合条件的归档日志文件