ORA-00257: archiver error. Connect internal only,until freed
查看归档日志序列
Automatic archival Enabled #自动归档
Archive destination USE_DB_RECOVERY_FILE_DEST #归档目录为指定的闪回恢复区
Oldest online log sequence 174 #最旧的在线日志序列
Next log sequence to archive 176 #下一个日志序列归档
Current log sequence 176 #当前日志序列
归档日志默认是保存在oracle系统的闪回恢复区(Flash recovery area)
查看闪回恢复区参数
NAME TYPE VALUE
db_recovery_file_dest string /data/oracle/flash_recovery_area
db_recovery_file_dest_size big integer 3G
检查flash recovery area的使用情况
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
CONTROL FILE 0 0 0
REDO LOG 0 0 0
ARCHIVED LOG 99.98 0 23
BACKUP PIECE 0 0 0
IMAGE COPY 0 0 0
FLASHBACK LOG 0 0 0
FOREIGN ARCHIVED LOG 0 0 0
可以看到ARCHIVE LOG日志已占用99.98%的闪存空间
方案一:删除过期归档日志,增大闪回恢复区空间大小
若有需要先行将归档日志备份再删除
一、删除归档日志文件
找到归档日志存放目录:/data/oracle/flash_recovery_area/ORCL/archivelog
二、使用RMAN维护控制文件
run{}中的命令被视为一个作业,一个失败整个命令停止执行
delete obsolete; #删除超出保存策略的备份
crosscheck archivelog all; #检查无效的归档日志(失效的标记为expired)
delete expired archivelog all; #删除expired的归档日志
delete expired backup; #删除所有失效的备份集
delete expired 删除的是那些本来RMAN以为存在但是实际上在磁盘或者磁带上已经被删除了的信息,删除的只是RMAN资料库中的记录;
delete obsolete 删除旧于备份保留策略定义的备份数据同时也更新RMAN资料库以及控制文件。
noprompt 指无需确认
三、增大闪回恢复区空间大小
查看闪回恢复区参数
四、重新检查flash recovery area的使用情况
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
CONTROL FILE 0 0 0
REDO LOG 0 0 0
ARCHIVED LOG 4.5 0 3
BACKUP PIECE 0 0 0
IMAGE COPY 0 0 0
FLASHBACK LOG 0 0 0
FOREIGN ARCHIVED LOG 0 0 0
五、添加定时任务,清理归档日志存储空间
2、编辑脚本内容
脚本内容 (/backup/oracledata/oracle_archivelog_clean.sh)删除三天前的所有归档文件
find /data/oracle/flash_recovery_area/ORCL/archivelog/ -mtime +3 -name "201*" -exec rm -rf {} \;
3、设置脚本文件权限
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下crontab文件,这个就是系统任务调度的配置文件。
用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用crontab工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。
1)、系统任务调度
编辑系统任务计划
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
SHELL 变量指定了系统要使用哪个shell,这里是bash
PATH 变量指定了系统执行命令的路径
MAILTO 变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户
For details see man 4 crontabs
Example of job definition:
.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr ...
| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | |
* user-name command to be executed
(*):代表所有 (,):多个值间隔 (-):范围连接符
(/)指定时间间隔频率,例如(*/10)如果在minute字段,表示每十分钟执行一次
以管理员身份每天凌晨05:00,执行相应目录下的脚本任务
0 5 * root /backup/oracledata/oracle_archivelog_clean.sh
2)、用户任务调度
编辑用户任务计划
<div class="jb51code">
<pre class="brush:sql;">
[root@dbsrc ~]# crontab -e
以管理员身份每天凌晨05:00,执行相应目录下的脚本
0 5 * /backup/oracledata/oracle_archivelog_clean.sh