尝试打开数据库时,发现打不开
cmd 登录: sqlplus / as sysdba
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\ORCL\SYSTEM01.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCLZNCZ_QP.DBF已选择6行。
SQL> select file#,to_char(checkpoint_change#,'999999999999') from v$datafile;
FILE# TO_CHAR(CHECK
---------- -------------
1 30872257
2 30872257
3 30872257
4 30872257
5 30872257
6 30872257已选择6行。
SQL> select file#,to_char(checkpoint_change#,'999999999999') from v$datafile_header;FILE# TO_CHAR(CHECK
---------- -------------
1 30872257
2 30872257
3 30872257
4 30872257
5 30872257
6 30872257已选择6行。
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 DATESQL> 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> alter database open reset logs;
alter database open reset logs
*
第 1 行出现错误:
ORA-02288: 无效的 OPEN 模式
SQL> alter database open resetlogs;
数据库已更改。
SQL> select open_mode, log_mode, name from v$database;
OPEN_MODE LOG_MODE NAME
-------------------- ------------ ---------
READ WRITE NOARCHIVELOG YSORCL
SQL>
这个数据库最初的问题是因为控制文件头冲突,重建了控制文件。重建之后,打开提示此错误。
问题关键在于找出控制文件与数据文件,重做日志文件的SCN。此处发现,v$datafile_header的checkpoint_change#与
重做日志文件组3的first_change#是匹配的。
如果还不行,估计只有大招:_allow_resetlogs_corruption= TRUE
在这里尝试了多次没解决,关键:
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语句 select member from v$logfile; 的结果中, 选择文件最大的一个执行