数据库报错:ORA-00257: archiver error. Connect internal only, until freed
原因是部署OGG之后数据库开启了归档日志,且归档日志空间占用率达到100%
避免该问题需要从两方面下手:
1、保证足够大的归档空间,建议计算方法:日平均归档大小的N*2倍,有条件的话多多益善。
N是归档要保留天数,建议为7;*2是为了保证发生临时大批量数据操作时归档不会满。
2、定时清理归档日志(物理删除日志不能解决问题,必须逻辑删除):
#1、创建清理归档日志的脚本
#su - oracle
#vim /home/oracle/delete_archive_log.sh
#添加以下内容
#!/bin/sh
echo "-------------------------------------------------"
echo delete_archive_log-`date +%Y%m%d%H%M`
echo "-------------------------------------------------"
#set ev
SHELL=/bin/bash
RMAN_HOME=/home/oracle/app/oracle/product/11.2.0/db_1/bin
LOGNAME=oracle
source /home/oracle/.bash_profile
#delete shell
$RMAN_HOME/rman << EOF
connect target sys/sys_passwd
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog all completed before 'sysdate-7';
exit;
EOF
#2、脚本添加可执行权限
chmod +x delete_archive_log.sh
#3、新增定时任务
crontab -e
#添加以下内容
0 1 * * * /home/oracle/delete_archive_log.sh >> /home/oracle/delete_archive.log
备注:
1、查看归档日志空间占用率:select * from v$flash_recovery_area_usage;
2、delete noprompt expired archivelog all;
–清除过期的归档日志
3、delete noprompt archivelog all completed before ‘sysdate-7’;
–删除7天以前的归档日志
–noprompt,rman参数,删除时免确认,否则需输入yes,定时任务的脚本中一定要加,否则脚本不会执行删除操作
4、 0 1 * * * ,linux定时任务的执行时间设置,依次代表分时天月周。