首页 > 数据库 > Oracle > 记一次数据库恢复-ORA-01194
尝试打开数据库时,发现打不开
SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-01194: 文件 1 需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'E:\APP\ADMINISTRATOR\ORADATA\YSORCL\SYSTEM01.DBF'
SQL> select log_mode from v$database;
LOG_MODE
------------
NOARCHIVELOG
SQL>
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\SYSTEM01.DBF
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\SYSAUX01.DBF
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\UNDOTBS01.DBF
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\USERS01.DBF
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\EXAMPLE01.DBF
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\BI_DATA01.DBF
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\YS_RP01.DBF
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\YS_BI01.DBF
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\YS_IND01.DBF
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\BI_DATA02.DBF
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\BI_DATA03.DBF
NAME
--------------------------------------------------------------------------------
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\BI_DATA04.DBF
已选择12行。
SQL> select file#,to_char(checkpoint_change#,'999999999999') from v$datafile;
FILE# TO_CHAR(CHECK
---------- -------------
1 138620706
2 138620706
3 138620706
4 138620706
5 138620706
6 138620706
7 138620706
8 138620706
9 138620706
10 138620706
11 138620706
FILE# TO_CHAR(CHECK
---------- -------------
12 138620706
已选择12行。
SQL> select file#,online_status,to_char(change#,'999999999999') from v$recover_file;
未选定行
SQL> select file#,to_char(checkpoint_change#,'999999999999') from v$datafile_header;
FILE# TO_CHAR(CHECK
---------- -------------
1 138620706
2 138620706
3 138620706
4 138620706
5 138620706
6 138620706
7 138620706
8 138620706
9 138620706
10 138620706
11 138620706
FILE# TO_CHAR(CHECK
---------- -------------
12 138620706
已选择12行。
SQL> desc v$LOG
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
GROUP# NUMBER
THREAD# NUMBER
SEQUENCE# NUMBER
BYTES NUMBER
BLOCKSIZE NUMBER
MEMBERS NUMBER
ARCHIVED VARCHAR2(3)
STATUS VARCHAR2(16)
FIRST_CHANGE# NUMBER
FIRST_TIME DATE
NEXT_CHANGE# NUMBER
NEXT_TIME DATE
SQL> select group#, first_change# from v$log;
GROUP# FIRST_CHANGE#
---------- -------------
1 138617722
3 138620706
2 138619288
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\REDO03.LOG
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\REDO02.LOG
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\REDO01.LOG
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 138620706 (在 11/16/2019 05:19:55 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\YSORCL\ARCHIVELOG\2019_11_18\O1_MF_1_93
0_%U_.ARC
ORA-00280: 更改 138620706 (用于线程 1) 在序列 #930 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
E:\APP\ADMINISTRATOR\ORADATA\YSORCL\REDO03.LOG
已应用的日志。
完成介质恢复。
SQL>
SQL>
SQL> alter database open reset logs;
alter database open reset logs
*
第 1 行出现错误:
ORA-02288: 无效的 OPEN 模式
SQL> alter database open resetlogs;
数据库已更改。
SQL>
SQL> select open_mode, log_mode, name from v$database;
OPEN_MODE LOG_MODE NAME
-------------------- ------------ ---------
READ WRITE NOARCHIVELOG YSORCL
SQL>
SQL>
这个数据库最初的问题是因为控制文件头冲突,重建了控制文件。重建之后,打开提示此错误。
问题关键在于找出控制文件与数据文件,重做日志文件的SCN。此处发现,v$datafile_header的checkpoint_change#与
重做日志文件组3的first_change#是匹配的。
如果还不行,估计只有大招:_allow_resetlogs_corruption= TRUE
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8520577/viewspace-2664565/ ,如需转载,请注明出处,否则将追究法律责任。