今天一个数据库在连接的时候提示“ORA-00257: 归档程序错误。在释放之前仅限于内部连接”,按经验这种情况一般是由于归档日志空间不足引起的,但种情况并不可能在这个数据中出现,因为这个数据库用于放归档日志的空间有10G,使而且数据库使用率并不高,再说每天都会清除7天前的归档日志,不可能这么快就满的。
于是打开SQLPLUS看看,
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 12.72 0 35
BACKUPPIECE 0 0 0
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
已选择6行。
SQL> show parameter db_recovery;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string E:\Oracle\flash_recovery_area
db_recovery_file_dest_size big integer 10G
才用了1.2G,再看看磁盘空间,还有13G的剩余空间,然后再打开RMAN执行crosscheck archivelog all,发现全部归档日志都是无效的,再执行DELETE EXPIRED ARCHIVELOG ALL,没有无效的日志。
执行
SQL> alter system archive log current;
ORA-16014: 日志 2 的序列号 2514 未归档, 没有可用的目的地
ORA-00312: 联机日志 2 线程 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\FINANCE\REDO02.LOG'
打开aler日志发现
Errors in file d:\oracle\product\10.2.0\admin\finance\bdump\finance_arc0_816.trc:
ORA-00333: 重做日志读取块 1 计数 2048 出错
ORA-00312: 联机日志 2 线程 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\FINANCE\REDO02.LOG'
ORA-27091: 无法将 I/O 排队
ORA-27070: 异步读取/写入失败
OSD-04006: ReadFile() 失败, 无法读取文件
O/S-Error: (OS 1450) 系统资源不足,无法完成请求的服务。
Fri Jun 22 11:31:03 2007
Errors in file d:\oracle\product\10.2.0\admin\finance\bdump\finance_arc0_816.trc:
ORA-00333: 重做日志读取块 1 计数 2048 出错
ARC0: All Archive destinations made inactive due to error 333
Committing creation of archivelog 'D:\ORACLE\BACKUP\FLASH_RECOVERY_AREA\FINANCE\ARCHIVELOG\2007_06_22\O1_MF_1_2514_37PJMOX9_.ARC' (error 333)
Deleted Oracle managed file D:\ORACLE\BACKUP\FLASH_RECOVERY_AREA\FINANCE\ARCHIVELOG\2007_06_22\O1_MF_1_2514_37PJMOX9_.ARC
ARC0: Failed to archive thread 1 sequence 2514 (333)
ARCH: Archival stopped, error occurred. Will continue retrying
Fri Jun 22 11:31:05 2007
Errors in file d:\oracle\product\10.2.0\admin\finance\bdump\finance_arc0_816.trc:
ORA-16038: 日志 2 序列号 2514 无法归档
ORA-00333: 重做日志读取块 计数 出错
ORA-00312: 联机日志 2 线程 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\FINANCE\REDO02.LOG'
Fri Jun 22 11:31:06 2007
Successfully onlined Undo Tablespace 8.
Fri Jun 22 11:31:06 2007
SMON: enabling tx recovery
Fri Jun 22 11:31:07 2007
Database Characterset is ZHS16GBK
Fri Jun 22 11:31:09 2007
Archiver process freed from errors. No longer stopped
Fri Jun 22 11:31:10 2007
ARC0: Archiving not possible: No primary destinations
Fri Jun 22 11:31:10 2007
replication_dependency_tracking turned off (no async multimaster replication found)
Fri Jun 22 11:31:10 2007
ARC0: Failed to archive thread 1 sequence 2514 (4)
ARCH: Archival stopped, error occurred. Will continue retrying
Fri Jun 22 11:31:10 2007
Errors in file d:\oracle\product\10.2.0\admin\finance\bdump\finance_arc0_816.trc:
ORA-16014: 日志 2 的序列号 2514 未归档, 没有可用的目的地
ORA-00312: 联机日志 2 线程 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\FINANCE\REDO02.LOG'
情况应该是联机日志有问题,执行
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
1 1 2534 52428800 1 YES ACTIVE 485660064 22-6月 -07
2 1 2514 52428800 1 NO INACTIVE 484845530 21-6月 -07
3 1 2535 52428800 1 NO CURRENT 485661944 22-6月 -07
是非当前联机日志,执行
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database clear unarchived logfile group 2;
数据库已更改。
如果此日志已经归档的话就要用alter database clear logfile group 2;
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
1 1 2538 52428800 1 YES ACTIVE 485702718 22-6月 -07
2 1 2539 52428800 1 NO CURRENT 485703591 22-6月 -07
3 1 2537 52428800 1 YES INACTIVE 485678028 22-6月 -07
SQL> alter system archive log current;
系统已更改。
现在系统就正常了,马上做上次完全备份,安心。但不知道是怎样引起这种情况,会不会磁盘有问题呢?