热衷技术,热爱交流
分类: Oracle
2013-11-12 17:21:33
好久前维护的一个测试库,今天一看停留在mount状态了:
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-16014: 日志 3 sequence# 117 未归档, 没有可用的目的地
ORA-00312: 联机日志 3 线程 1:
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLJJYF2\REDO03.LOG'
数据库在归档模式下,由于rman脚本计划任务运行出问题,未能把过期的归档文件清除,造成USE_DB_RECOVERY_FILE_DEST区域被用完
SQL> select * from v$flash_recovery_area_usage;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ------------------------- ---------------
CONTROLFILE 0 0 0
ONLINELOG 0 0 0
ARCHIVELOG 98.86 0 44
BACKUPPIECE .39 0 1
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
已选择6行。
在这种情况下,可以通过增大db_recovery_file_dest_size解决,也可以删除备份集文件和归档文件:
RMAN> delete noprompt obsolete;
RMAN 保留策略将应用于该命令
将 RMAN 保留策略设置为冗余 1
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=151 devtype=DISK
未找到已废弃的备份
RMAN> crosscheck backupset;
使用通道 ORA_DISK_1
交叉校验备份片段: 找到为 'AVAILABLE'
备份段 handle=E:\HX\BACKUP\LEVEL0_4BOJTU25_1_1.BKP recid=134 stamp=826210385
交叉校验备份片段: 找到为 'AVAILABLE'
备份段 handle=E:\HX\BACKUP\LEVEL0_4COJTU4E_1_1.BKP recid=135 stamp=826210459
交叉校验备份片段: 找到为 'AVAILABLE'
备份段 handle=E:\HX\BACKUP\LEVEL0_4DOJTU60_1_1.BKP recid=136 stamp=826210516
交叉校验备份片段: 找到为 'AVAILABLE'
………………………………………………………………………………………………………………
已交叉检验的 32 对象
没有冗余和无效的备份集,说明在rman删除之前,归档文件就把空间用完了。
SQL> select distinct CHECKPOINT_CHANGE# from v$datafile_header;
CHECKPOINT_CHANGE#
------------------
13414847
SQL> select distinct CHECKPOINT_CHANGE# from v$datafile;
CHECKPOINT_CHANGE#
------------------
13414847
1. 可以选择手动删除归档文件,然后再用rman清除信息:
RMAN> crosscheck archivelog all;
RMAN> delete noprompt expired archivelog all;
SQL> select * from v$flash_recovery_area_usage;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ------------------------- ---------------
CONTROLFILE 0 0 0
ONLINELOG 0 0 0
ARCHIVELOG 13.46 0 6
BACKUPPIECE .39 0 1
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
已选择6行。
接着启动数据库:
SQL> alter database open;
数据库已更改。
2. 如果手动修改db_recovery_file_dest_size,则如下操作:
SQL> alter system set db_recovery_file_dest_size=5G;
SQL> alter database open;
数据库已更改。
接着,再做一次rman全备吧。
教训:归档模式下一定要注意监控恢复区的使用情况,避免不必要的麻烦