某个用户的数据库,启动数据库的时候alert.log里报如下错误: Errors in file d:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_3096.trc: ORA-00333: 重做日志读取块 155649 计数 2048 出错 ORA-00312: 联机日志 10 线程 1: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO10.LOG' ORA-27070: 异步读取/写入失败 OSD-04006: ReadFile() 失败, 无法读取文件 O/S-Error: (OS 23) 数据错误(循环冗余检查)。 Errors in file d:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_3096.trc: ORA-00333: 重做日志读取块 155649 计数 2048 出错
从日记中发现redo10.log已经损坏无法读取,通过查询v$log发现该日记组是当前日记组(CURRENT),发现用户一直没有备份,看来只能使用_allow_resetlogs_corruption参数来打开数据库了。
以下是恢复过程:
试着clear 日记组
SQL> connect / as sysdba 已连接。 SQL> ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 10; ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 10 * 第 1 行出现错误: ORA-01624: 日志 10 是紧急恢复实例 orcl (线程 1) 所必需的 ORA-00312: 联机日志 10 线程 1: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO10.LOG'
SQL> recover database until cancel; ORA-00279: 更改 142207207 (在 07/19/2011 11:53:24 生成) 对于线程 1 是必需的 ORA-00289: 建议: E:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2011_07_19\O1_MF_1_1088_72B0174W_.ARC ORA-00280: 更改 142207207 (用于线程 1) 在序列 #1088 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL} auto ORA-00279: 更改 142219852 (在 07/19/2011 11:55:18 生成) 对于线程 1 是必需的 ORA-00289: 建议: E:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2011_07_19\O1_MF_1_1089_72B04T5C_.ARC ORA-00280: 更改 142219852 (用于线程 1) 在序列 #1089 中 ORA-00278: 此恢复不再需要日志文件 'E:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2011_07_19\O1_MF_1_1088_72B0174W_.ARC'
ORA-00279: 更改 142232385 (在 07/19/2011 11:57:13 生成) 对于线程 1 是必需的 ORA-00289: 建议: E:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2011_07_20\O1_MF_1_1090_%U_.ARC ORA-27041: 无法打开文件 OSD-04002: 无法打开文件 O/S-Error: (OS 1392) 文件或目录损坏且无法读取。 ORA-27041: 无法打开文件 OSD-04002: 无法打开文件 O/S-Error: (OS 1392) 文件或目录损坏且无法读取。 ORA-27041: 无法打开文件 OSD-04002: 无法打开文件 O/S-Error: (OS 1392) 文件或目录损坏且无法读取。 ORA-00280: 更改 142232385 (用于线程 1) 在序列 #1090 中 ORA-00278: 此恢复不再需要日志文件 'E:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2011_07_19\O1_MF_1_1089_72B04T5C_.ARC'
ORA-00308: 无法打开归档日志 'E:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2011_07_20\O1_MF_1_1090_%U_.ARC' ORA-27041: 无法打开文件 OSD-04002: 无法打开文件 O/S-Error: (OS 2) 系统找不到指定的文件。
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误 ORA-01194: 文件 1 需要更多的恢复来保持一致性 ORA-01110: 数据文件 1: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF'
SQL> SQL> recover database until cancel; ORA-00279: 更改 142232385 (在 07/19/2011 11:57:13 生成) 对于线程 1 是必需的 ORA-00289: 建议: E:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2011_07_20\O1_MF_1_1090_%U_.ARC ORA-00280: 更改 142232385 (用于线程 1) 在序列 #1090 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL} auto ORA-00308: 无法打开归档日志 'E:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2011_07_20\O1_MF_1_1090_%U_.ARC' ORA-27041: 无法打开文件 OSD-04002: 无法打开文件 O/S-Error: (OS 2) 系统找不到指定的文件。
ORA-00308: 无法打开归档日志 'E:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2011_07_20\O1_MF_1_1090_%U_.ARC' ORA-27041: 无法打开文件 OSD-04002: 无法打开文件 O/S-Error: (OS 2) 系统找不到指定的文件。
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误 ORA-01194: 文件 1 需要更多的恢复来保持一致性 ORA-01110: 数据文件 1: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF'
SQL> SQL> recover database; ORA-00283: 恢复会话因错误而取消 ORA-00333: 重做日志读取块 155648 计数 2048 出错
SQL> SQL> SQL> ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 10; ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 10 * 第 1 行出现错误: ORA-01624: 日志 10 是紧急恢复实例 orcl (线程 1) 所必需的 ORA-00312: 联机日志 10 线程 1: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO10.LOG'
SQL> alter database open resetlogs; alter database open resetlogs * 第 1 行出现错误: ORA-01139: RESETLOGS 选项仅在不完全数据库恢复后有效
SQL> recover database until cancel; ORA-00279: 更改 142245856 (在 07/19/2011 11:59:14 生成) 对于线程 1 是必需的 ORA-00289: 建议: E:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2011_07_20\O1_MF_1_1091_%U_.ARC ORA-00280: 更改 142245856 (用于线程 1) 在序列 #1091 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00308: 无法打开归档日志 'E:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2011_07_20\O1_MF_1_1091_%U_.ARC' ORA-27041: 无法打开文件 OSD-04002: 无法打开文件 O/S-Error: (OS 2) 系统找不到指定的文件。
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误 ORA-01194: 文件 1 需要更多的恢复来保持一致性 ORA-01110: 数据文件 1: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF'
SQL> SQL> alter system set _allow_resetlogs_corruption=TRUE scope=both; alter system set _allow_resetlogs_corruption=TRUE scope=both * 第 1 行出现错误: ORA-00911: 无效字符
SQL> alter system set _allow_resetlogs_corruption=TRUE; alter system set _allow_resetlogs_corruption=TRUE * 第 1 行出现错误: ORA-00911: 无效字符
SQL> shutdown immediate ORA-01109: 数据库未打开
已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup ORACLE 例程已经启动。
Total System Global Area 1071333376 bytes Fixed Size 1352100 bytes Variable Size 419434076 bytes Database Buffers 645922816 bytes Redo Buffers 4624384 bytes 数据库装载完毕。 ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database op resetlogs; alter database op resetlogs * 第 1 行出现错误: ORA-02231: ALTER DATABASE 选项缺失或无效
SQL> alter database open resetlogs; alter database open resetlogs * 第 1 行出现错误: ORA-01194: 文件 1 需要更多的恢复来保持一致性 ORA-01110: 数据文件 1: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF'
SQL> alter database open noresetlogs; alter database open noresetlogs * 第 1 行出现错误: ORA-00333: 重做日志读取块 155650 计数 8192 出错
SQL> show parameters spfile;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string D:\APP\ADMINISTRATOR\PRODUCT\1 1.1.0\DB_1\DATABASE\SPFILEORCL .ORA
-- 创建pfile,然后再改文件最后加上*._allow_resetlogs_corruption=TRUE SQL> create pfile='c:\pfileora.ora' from spfile;
文件已创建。
SQL> shutdown immediate ORA-01109: 数据库未打开
已经卸载数据库。 ORACLE 例程已经关闭。
-- 使用刚才创建的pfile启动数据库 SQL> startup pfile='C:\pfileora.ora' ORACLE 例程已经启动。
Total System Global Area 1071333376 bytes Fixed Size 1352100 bytes Variable Size 419434076 bytes Database Buffers 645922816 bytes Redo Buffers 4624384 bytes 数据库装载完毕。 ORA-00333: 重做日志读取块 155650 计数 8192 出错
SQL> recover database until cancel; ORA-00279: 更改 142245856 (在 07/19/2011 11:59:14 生成) 对于线程 1 是必需的 ORA-00289: 建议: E:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2011_07_20\O1_MF_1_1091_%U_.ARC ORA-27041: 无法打开文件 OSD-04002: 无法打开文件 O/S-Error: (OS 1392) 文件或目录损坏且无法读取。 ORA-27041: 无法打开文件 OSD-04002: 无法打开文件 O/S-Error: (OS 1392) 文件或目录损坏且无法读取。 ORA-27041: 无法打开文件 OSD-04002: 无法打开文件 O/S-Error: (OS 1392) 文件或目录损坏且无法读取。 ORA-00280: 更改 142245856 (用于线程 1) 在序列 #1091 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL} auto ORA-00308: 无法打开归档日志 'E:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2011_07_20\O1_MF_1_1091_%U_.ARC' ORA-27041: 无法打开文件 OSD-04002: 无法打开文件 O/S-Error: (OS 2) 系统找不到指定的文件。
ORA-00308: 无法打开归档日志 'E:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2011_07_20\O1_MF_1_1091_%U_.ARC' ORA-27041: 无法打开文件 OSD-04002: 无法打开文件 O/S-Error: (OS 2) 系统找不到指定的文件。
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误 ORA-01194: 文件 1 需要更多的恢复来保持一致性 ORA-01110: 数据文件 1: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF'
-- 这个时候数据已经打开 SQL> alter database open resetlogs;
数据库已更改。
SQL> show parameters spfile;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。
-- 使用之前的spfile 启动数据库(spfile未设置*._allow_resetlogs_corruption) SQL> startup ORACLE 例程已经启动。
Total System Global Area 1071333376 bytes Fixed Size 1352100 bytes Variable Size 419434076 bytes Database Buffers 645922816 bytes Redo Buffers 4624384 bytes 数据库装载完毕。 数据库已经打开。 SQL> show parameters spfile;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string D:\APP\ADMINISTRATOR\PRODUCT\1 1.1.0\DB_1\DATABASE\SPFILEORCL .ORA SQL>
数据库open后, 使用exp将所有数据导出后,重建库再导入。 |