redo 恢复的几种方式

操作系统版本:
[oracle@enmotech ~]$ cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.7 (Maipo)
数据库版本
[oracle@enmotech ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 星期日 5月 31 10:23:55 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
连接到: 
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

redo0日志的状态 列有四种状态:
current: 当前日志组对应的脏块还没有全部从 data buffer 写入到 data file,含有实例恢复需要的信息,不能被覆盖
active: 日志组对应的脏块还没有完全从 data buffer 写入到 data file,含有实例恢复需要的信息,不能被覆盖
inactive; 日志组对应的脏块已经从 data buffer 写入到 data file,可以覆盖
unused: 新添加的日志组,还没有使用


redo文件损坏涉及到多种多样场景,具体场景可以分四大部分:
1、按照redo的状态可以分为current、active和inactive;
2、按照数据库归档模式可以分为归档和非归档;
3、按照脏块有没写入数据文件可以分为需要和不需要;
4、按照损坏时数据库的状态可以分为在线和关闭;
现在主要通过三部分来介绍redo文件恢复相关的内容:


1、current redo文件恢复介绍:
1.1 
a、current redo文件损坏;
b、数据库归档模式;
c、不需要写入数据文件
d、实例正常关闭后损坏

场景模拟;
1.查看当前日志状态
SYS@orcl> col member for a30;
SYS@orcl> select l.group#, l.sequence#, lf.member, l.bytes/1024/1024 M, l.archived, l.status from v$log l, v$logfile lf where l.group#=lf.group#;
    GROUP#  SEQUENCE# MEMBER						M ARC STATUS
---------- ---------- ---------------------------------------- ---------- --- ----------------
	 3	   18 /u02/oradata/ORCL/redo03.log		      200 NO  CURRENT
	 2	   17 /u02/oradata/ORCL/redo02.log		      200 YES INACTIVE
	 1	   16 /u02/oradata/ORCL/redo01.log		      200 YES INACTIVE
2.关闭数据库,模拟current redolog损坏
[oracle@enmotech ORCL]$ echo 1 >> /u02/oradata/ORCL/redo03.log
3.打开数据库
ORACLE 例程已经启动。
Total System Global Area 1543500832 bytes
Fixed Size		    9135136 bytes
Variable Size		  989855744 bytes
Database Buffers	  536870912 bytes
Redo Buffers		    7639040 bytes
数据库装载完毕。
ORA-03113: 通信通道的文件结尾 进程 ID:
3845
会话 ID: 237 序列号: 62252
4.观察alter_sid.log报错
2020-05-31T11:05:52.415611+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_lgwr_3804.trc:
ORA-00313: ??????? 3 (???? 1) ???
ORA-00312: ???? 3 ?? 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: ??????????????
Additional information: 1
2020-05-31T11:05:52.415707+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_lgwr_3804.trc:
ORA-00313: ??????? 3 (???? 1) ???
ORA-00312: ???? 3 ?? 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: ??????????????
Additional information: 1
2020-05-31T11:05:52.416332+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_3845.trc:
ORA-00313: 无法打开日志组 1 (用于线程 ) 的成员
ORA-00312: 联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
USER (ospid: ): terminating the instance due to ORA error 
2020-05-31T11:05:52.533550+08:00
System state dump requested by (instance=1, osid=3845), summary=[abnormal instance termination].
System State dumped to trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_diag_3786.trc
2020-05-31T11:05:52.641053+08:00
Dumping diagnostic data in directory=[cdmp_20200531110552], requested by (instance=1, osid=3845), summary=[abnormal instance termination].
5.重新连接数据库,清除当前日志组数据
SYS@orcl> alter database clear unarchived logfile group 3;
数据库已更改。
6.打开数据库
SYS@orcl> alter database open;
数据库已更改。


1.2
a、current redo文件损坏;
b、数据库非归档模式;
c、不需要写入数据文件
d、实例正常关闭后损坏

场景模拟:
1.常看数据库归档状态和当前日志组
SYS@orcl> archive log list;
数据库日志模式             非存档模式
自动存档             禁用
存档终点            /u02/oradata/orcl_arch_log
最早的联机日志序列     17
当前日志序列           19
SYS@orcl> col member for a40;
SYS@orcl> select l.group#, l.sequence#, lf.member, l.bytes/1024/1024 M, l.archived, l.status from v$log l, v$logfile lf where l.group#=lf.group#;
    GROUP#  SEQUENCE# MEMBER						M ARC STATUS
---------- ---------- ---------------------------------------- ---------- --- ----------------
	 3	    0 /u02/oradata/ORCL/redo03.log		      200 YES UNUSED
	 2	   17 /u02/oradata/ORCL/redo02.log		      200 YES INACTIVE
	 1	   19 /u02/oradata/ORCL/redo01.log		      200 NO  CURRENT
2.关闭数据库,模拟current redolog损坏
SYS@orcl> shu immediate;
数据库已经关闭。
已经卸载数据库。
[oracle@enmotech ORCL]$ echo 1 >> /u02/oradata/ORCL/redo01.log
3.打开数据库
SYS@orcl> startup 
ORACLE 例程已经启动。
Total System Global Area 1543500832 bytes
Fixed Size		    9135136 bytes
Variable Size		  989855744 bytes
Database Buffers	  536870912 bytes
Redo Buffers		    7639040 bytes
数据库装载完毕。
ORA-03113: 通信通道的文件结尾 进程 ID:
5619
会话 ID: 237 序列号: 61537
4.观察alter_sid.log报错
2020-05-31T11:23:05.637817+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_lgwr_5575.trc:
ORA-00313: ??????? 1 (???? 1) ???
ORA-00312: ???? 1 ?? 1: '/u02/oradata/ORCL/redo01.log'
ORA-27046: ??????????????
Additional information: 1
2020-05-31T11:23:05.638267+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_lgwr_5575.trc:
ORA-00313: ??????? 1 (???? 1) ???
ORA-00312: ???? 1 ?? 1: '/u02/oradata/ORCL/redo01.log'
ORA-27046: ??????????????
Additional information: 1
2020-05-31T11:23:05.639749+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_5619.trc:
ORA-00313: 无法打开日志组 1 (用于线程 ) 的成员
ORA-00312: 联机日志 1 线程 1: '/u02/oradata/ORCL/redo01.log'
USER (ospid: ): terminating the instance due to ORA error 
2020-05-31T11:23:05.762325+08:00
System state dump requested by (instance=1, osid=5619), summary=[abnormal instance termination].
System State dumped to trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_diag_5558.trc
2020-05-31T11:23:05.848947+08:00
Dumping diagnostic data in directory=[cdmp_20200531112305], requested by (instance=1, osid=5619), summary=[abnormal instance termination].
2020-05-31T11:23:06.877329+08:00
Instance terminated by USER, pid = 5619
5.重新连接数据库,清除当前日志组数据
SYS@orcl> alter database clear logfile group 1;
数据库已更改。
6.打开数据库
SYS@orcl> alter database open;
数据库已更改。

---------------------------------------------------------------------------------------------------------------------------------
连接scott用户,创建test表,插入数据
[oracle@enmotech admin]$ sqlplus scott/tiger@orclpdb
SQL*Plus: Release 19.0.0.0.0 - Production on 星期日 5月 31 11:38:59 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
上次成功登录时间: 星期一 5月  18 2020 20:26:08 +08:00
连接到: 
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SCOTT@orclpdb> create table test (id number);
表已创建。
SCOTT@orclpdb> insert into test(id) values (1);
已创建 1 行。
SCOTT@orclpdb> commit;
提交完成。
SCOTT@orclpdb> insert into test(id) values (2);
已创建 1 行。
(插入数据2,不进行提交)
----------------------------------------------------------------------------------------------------------------------------------

1.3
a、current redo文件损坏;
b、数据库归档模式;
c、需要写入数据文件
d、实例在线current redo损坏

场景模拟:
1.查看当前日志状态
SYS@orcl> col member for a40;
SYS@orcl> select l.group#, l.sequence#, lf.member, l.bytes/1024/1024 M, l.archived, l.status from v$log l, v$logfile lf where l.group#=lf.group#
    GROUP#  SEQUENCE# MEMBER						M ARC STATUS
---------- ---------- ---------------------------------------- ---------- --- ----------------
	 3	   20 /u02/oradata/ORCL/redo03.log		      200 NO  CURRENT
	 2	   17 /u02/oradata/ORCL/redo02.log		      200 YES INACTIVE
	 1	    0 /u02/oradata/ORCL/redo01.log		      200 YES UNUSED
2.模拟current redolog损坏
[oracle@enmotech ORCL]$ echo 1 >> /u02/oradata/ORCL/redo03.log
3.commit提交数据,观察alter_sid.log报错
2020-05-31T11:49:31.281843+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_7598.trc:
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: 文件大小不是逻辑块大小的倍数
Additional information: 1
2020-05-31T11:49:31.281928+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_7598.trc:
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: 文件大小不是逻辑块大小的倍数
Additional information: 1
2020-05-31T11:49:31.320587+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_mz00_7880.trc:
ORA-00312: 联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
4.清除当前日志组数据(一定不要关闭数据库,避免数据丢失)
SYS@orcl> alter system switch logfile;
系统已更改。
SYS@orcl> alter database clear unarchived logfile group 3;
数据库已更改。
5.打开数据库
SYS@orcl> alter database open;
数据库已更改。


1.4 
a、current redo文件损坏;
b、数据库归档模式;
c、需要写入数据文件
d、实例不正常关闭后current redo损坏

场景模拟:
1.查看当前日志状态
SYS@orcl> select l.group#, l.sequence#, lf.member, l.bytes/1024/1024 M, l.archived, l.status from v$log l, v$logfile lf where l.group#=lf.group#;
    GROUP#  SEQUENCE# MEMBER						M ARC STATUS
---------- ---------- ---------------------------------------- ---------- --- ----------------
	 3	   22 /u02/oradata/ORCL/redo03.log		      200 NO  CURRENT
	 2	   17 /u02/oradata/ORCL/redo02.log		      200 YES INACTIVE
	 1	    0 /u02/oradata/ORCL/redo01.log		      200 YES UNUSED
2.强关数据库
SYS@orcl> shutdown abort;
ORACLE 例程已经关闭。
3.模拟current redolog损坏
[oracle@enmotech ~]$  echo 1 >> /u02/oradata/ORCL/redo03.log
4.打开数据库
SYS@orcl> startup
ORACLE 例程已经启动。
Total System Global Area 1543500832 bytes
Fixed Size		    9135136 bytes
Variable Size		  989855744 bytes
Database Buffers	  536870912 bytes
Redo Buffers		    7639040 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员 ORA-00312:
联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: 文件大小不是逻辑块大小的倍数 Additional
information: 1
5.查看告警日志
2020-05-31T12:12:03.310379+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_9337.trc:
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: 文件大小不是逻辑块大小的倍数
Additional information: 1
2020-05-31T12:12:03.362444+08:00
Slave encountered ORA-10388 exception during crash recovery
2020-05-31T12:12:03.375439+08:00
Slave encountered ORA-10388 exception during crash recovery
2020-05-31T12:12:03.378174+08:00
Aborting crash recovery due to error 313
2020-05-31T12:12:03.378309+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_9337.trc:
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: 文件大小不是逻辑块大小的倍数
Additional information: 1
2020-05-31T12:12:03.378837+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_9337.trc:
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: 文件大小不是逻辑块大小的倍数
Additional information: 1
ORA-313 signalled during: ALTER DATABASE OPEN...
2020-05-31T12:12:03.390997+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_mz00_9343.trc:
ORA-00312: 联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: 文件大小不是逻辑块大小的倍数
Additional information: 1
2020-05-31T12:12:03.476462+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_mz00_9343.trc:
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: 文件大小不是逻辑块大小的倍数
Additional information: 1
2020-05-31T12:12:03.552455+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_mz00_9343.trc:
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: 文件大小不是逻辑块大小的倍数
Additional information: 1
恢复数据
SYS@orcl> recover database until cancel;
ORA-00279: 更改 2991918 (在 05/31/2020 12:02:08 生成) 对于线程 1 是必需的 ORA-00289:
建议: /u02/oradata/orcl_arch_log/1_22_1040302643.arc
ORA-00280: 更改 2991918 (用于线程 1) 在序列 #22 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志 '/u02/oradata/orcl_arch_log/1_22_1040302643.arc'
ORA-27037: 无法获得文件状态
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
ORA-00308: 无法打开归档日志 '/u02/oradata/orcl_arch_log/1_22_1040302643.arc'
ORA-27037: 无法获得文件状态
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误 ORA-01194:
文件 1 需要更多的恢复来保持一致性 ORA-01110:
数据文件 1: '/u02/oradata/ORCL/system01.dbf'
SYS@orcl> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-00603: ORACLE server session terminated by fatal error
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00600: internal error code, arguments: [kcbzib_kcrsds_1], [], [], [], [], [], [], [], [], [], [], []
进程 ID: 9733
会话 ID: 237 序列号: 18481
SYS@orcl> recover database until cancel;
ERROR:
ORA-03114: 未连接到 ORACLE
SYS@orcl> quit
6.启动数据库到mount状态
SYS@orcl> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1543500832 bytes
Fixed Size		    9135136 bytes
Variable Size		  989855744 bytes
Database Buffers	  536870912 bytes
Redo Buffers		    7639040 bytes
数据库装载完毕。
7.修改undo表空间
SYS@orcl> show parameter undo;
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
temp_undo_enabled		     boolean	 FALSE
undo_management 		     string	 AUTO
undo_retention			     integer	 900
undo_tablespace 		     string	 UNDOTBS1
SYS@orcl> alter system set undo_management=manual scope=spfile;
系统已更改。
SYS@orcl> alter system set undo_tablespace=system scope=spfile;
系统已更改。
SYS@orcl> shu immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SYS@orcl> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1543500832 bytes
Fixed Size		    9135136 bytes
Variable Size		  989855744 bytes
Database Buffers	  536870912 bytes
Redo Buffers		    7639040 bytes
数据库装载完毕。
8.打开数据库
SYS@orcl> alter database open;
数据库已更改。


1.5 
a、current redo文件损坏;
b、数据库非归档模式;
c、需要写入数据文件
d、实例在线current redo损坏

场景模拟:
1.查看当前日志状态
SYS@orcl> select l.group#, l.sequence#, lf.member, l.bytes/1024/1024 M, l.archived, l.status from v$log l, v$logfile lf where l.group#=lf.group#;
    GROUP#  SEQUENCE# MEMBER						M ARC STATUS
---------- ---------- ---------------------------------------- ---------- --- ----------------
	 3	   18 /u02/oradata/ORCL/redo03.log		      200 NO  CURRENT
	 2	   17 /u02/oradata/ORCL/redo02.log		      200 YES INACTIVE
	 1	   16 /u02/oradata/ORCL/redo01.log		      200 YES INACTIVE
2.查看告警日志
2020-05-31T13:31:10.075933+08:00
Thread 1 advanced to log sequence 19 (LGWR switch)
  Current log# 1 seq# 19 mem# 0: /u02/oradata/ORCL/redo01.log
2020-05-31T13:31:22.970981+08:00
alter database clear logfile group 3
ORA-1624 signalled during: alter database clear logfile group 3...
2020-05-31T13:31:23.058733+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_mz00_4507.trc:
ORA-00312: 联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: 文件大小不是逻辑块大小的倍数
Additional information: 1
2020-05-31T13:31:23.257429+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_mz00_4507.trc:
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: 文件大小不是逻辑块大小的倍数
Additional information: 1
2020-05-31T13:31:23.334583+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_mz00_4507.trc:
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: 文件大小不是逻辑块大小的倍数
Additional information: 1
Checker run found 2 new persistent data failures
2020-05-31T13:32:52.559008+08:00
alter database clear logfile group 3
2020-05-31T13:32:52.559989+08:00
Clearing online log 3 of thread 1 sequence number 18
2020-05-31T13:32:52.562391+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4056.trc:
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: 文件大小不是逻辑块大小的倍数
Additional information: 1
2020-05-31T13:32:52.562794+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4056.trc:
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1: '/u02/oradata/ORCL/redo03.log'
ORA-27046: 文件大小不是逻辑块大小的倍数
Additional information: 1
3.切换redo日志
SYS@orcl> alter system switch logfile;
系统已更改。
4.归档当前的redo日志
SYS@orcl> alter system checkpoint;
系统已更改。
5.清除归档日志
SYS@orcl> alter database clear logfile group 3;
数据库已更改。
6.查看当前日志状态
SYS@orcl> select l.group#, l.sequence#, lf.member, l.bytes/1024/1024 M, l.archived, l.status from v$log l, v$logfile lf where l.group#=lf.group#;
    GROUP#  SEQUENCE# MEMBER						M ARC STATUS
---------- ---------- ---------------------------------------- ---------- --- ----------------
	 3	    0 /u02/oradata/ORCL/redo03.log		      200 NO  UNUSED
	 2	   17 /u02/oradata/ORCL/redo02.log		      200 YES INACTIVE
	 1	   19 /u02/oradata/ORCL/redo01.log		      200 NO  CURRENT
	 
	 
1.6 
a、current redo文件损坏;
b、数据库非归档模式;
c、需要写入数据文件
d、实例不正常关闭后current redo损坏

场景模拟:
1.查看当前日志状态
SYS@orcl> select l.group#, l.sequence#, lf.member, l.bytes/1024/1024 M, l.archived, l.status from v$log l, v$logfile lf where l.group#=lf.group#;
    GROUP#  SEQUENCE# MEMBER						M ARC STATUS
---------- ---------- ---------------------------------------- ---------- --- ----------------
	 3	    0 /u02/oradata/ORCL/redo03.log		      200 NO  UNUSED
	 2	   17 /u02/oradata/ORCL/redo02.log		      200 YES INACTIVE
	 1	   19 /u02/oradata/ORCL/redo01.log		      200 NO  CURRENT
2.模拟current redolog损坏
echo 1 >> /u02/oradata/ORCL/redo01.log
3.强关数据库
SYS@orcl> shutdown abort;
ORACLE 例程已经关闭。
4.恢复数据库
SYS@orcl> startup nomount;
ORACLE 例程已经启动。
Total System Global Area 1543500832 bytes
Fixed Size		    9135136 bytes
Variable Size		  989855744 bytes
Database Buffers	  536870912 bytes
Redo Buffers		    7639040 bytes
SYS@orcl> alter system set "_allow_resetlogs_corruption"=true scope=spfile;
系统已更改。
SYS@orcl> shu immediate;
ORA-01507: ??????
ORACLE 例程已经关闭。
SYS@orcl> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1543500832 bytes
Fixed Size		    9135136 bytes
Variable Size		  989855744 bytes
Database Buffers	  536870912 bytes
Redo Buffers		    7639040 bytes
数据库装载完毕。
SYS@orcl> recover database until cancel;
ORA-00279: 更改 2983632 (在 05/31/2020 13:32:44 生成) 对于线程 1 是必需的 ORA-00289:
建议: /u02/oradata/orcl_arch_log/1_19_1040302643.arc
ORA-00280: 更改 2983632 (用于线程 1) 在序列 #19 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
/u02/oradata/orcl_arch_log/1_19_1040302643.arc
ORA-00308: 无法打开归档日志 '/u02/oradata/orcl_arch_log/1_19_1040302643.arc'
ORA-27037: 无法获得文件状态
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
/u02/oradata/ORCL/redo01.log
ORA-00308: 无法打开归档日志 '/u02/oradata/ORCL/redo01.log'
ORA-27046: 文件大小不是逻辑块大小的倍数 Additional
information: 1
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
/u02/oradata/ORCL/redo02.log
ORA-00310: 归档日志包含序列 17; 要求序列 19 ORA-00334:
归档日志: '/u02/oradata/ORCL/redo02.log'
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误 ORA-01194:
文件 1 需要更多的恢复来保持一致性 ORA-01110:
数据文件 1: '/u02/oradata/ORCL/system01.dbf'
SYS@orcl> recover database using backup controlfile until cancel;
ORA-00279: 更改 2983632 (在 05/31/2020 13:32:44 生成) 对于线程 1 是必需的 ORA-00289:
建议: /u02/oradata/orcl_arch_log/1_19_1040302643.arc
ORA-00280: 更改 2983632 (用于线程 1) 在序列 #19 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志 '/u02/oradata/orcl_arch_log/1_19_1040302643.arc'
ORA-27037: 无法获得文件状态
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
ORA-00308: 无法打开归档日志 '/u02/oradata/orcl_arch_log/1_19_1040302643.arc'
ORA-27037: 无法获得文件状态
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
SYS@orcl> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-00603: ORACLE server session terminated by fatal error
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00600: internal error code, arguments: [ktcpoptx:!cmt top lvl], [], [], [], [], [], [], [], [], [], [], []
ORA-00600: internal error code, arguments: [kcbzib_kcrsds_1], [], [], [], [], [], [], [], [], [], [], []
进程 ID: 5296
会话 ID: 237 序列号: 10783
5.切换undo
[oracle@enmotech ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 星期日 5月 31 13:44:00 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
已连接到空闲例程。
SYS@orcl> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1543500832 bytes
Fixed Size		    9135136 bytes
Variable Size		  989855744 bytes
Database Buffers	  536870912 bytes
Redo Buffers		    7639040 bytes
数据库装载完毕。
SYS@orcl> show parameter undo;
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
temp_undo_enabled		     boolean	 FALSE
undo_management 		     string	 AUTO
undo_retention			     integer	 900
undo_tablespace 		     string	 UNDOTBS1
SYS@orcl> alter system set undo_management=manual scope=spfile;
系统已更改。
SYS@orcl> alter system set undo_tablespace=system scope=spfile;
系统已更改。
[oracle@enmotech ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 星期日 5月 31 13:50:08 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
连接到: 
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SYS@orcl> shu immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SYS@orcl> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1543500832 bytes
Fixed Size		    9135136 bytes
Variable Size		  989855744 bytes
Database Buffers	  536870912 bytes
Redo Buffers		    7639040 bytes
数据库装载完毕。
SYS@orcl> alter database open;
数据库已更改。
7.重建undo即可恢复数据库


2 active redo文件恢复介绍
---------------------------------------------------------------------------------------------------------------------------------
做检查点切换 alter system checkpoint; 如成功,按照 inactive 损坏处理。否则,按 current 损坏处理。
----------------------------------------------------------------------------------------------------------------------------------
2.1
a、active redo文件损坏;
b、数据库归档模式;
c、需要写入数据文件
d、实例在线时损坏
e、未归档
(不要关闭数据库,直接执行alter database clear unarchived logfile group n,不会丢数据)
2.2
a、active redo文件损坏;
b、数据库归档模式;
c、需要写入数据文件
d、实例不正常关闭时损坏
e、未归档
(会丢数据)
2.3
a、active redo文件损坏;
b、数据库归档模式;
c、需要写入数据文件
d、实例在线时损坏
e、已归档
(不要关闭数据库,直接执行alter database clear unarchived logfile group n,不会丢数据)
2.4 
a、active redo文件损坏;
b、数据库归档模式;
c、需要写入数据文件
d、实例不正常关闭时损坏
e、已归档
(不会丢数据)
2.5 
a、active redo文件损坏;
b、数据库非归档模式;
c、需要写入数据文件
d、实例在线时损坏
e、不归档
(不要关闭数据库,直接执行alter database clear logfile group n,不会丢数据)
2.6
a、active redo文件损坏;
b、数据库非归档模式;
c、需要写入数据文件
d、实例在线时损坏
e、不归档
(会丢数据)


3.inactive redo文件恢复介绍
3.1
a、inactive redo文件损坏
b、不需要写入数据文件信息
c、实例在线损坏和实例异常关机损坏
d、数据库归档模式;
e、未归档
SYS@orcl> select l.group#, l.sequence#, lf.member, l.bytes/1024/1024 M, l.archived, l.status from v$log l, v$logfile lf where l.group#=lf.group#;
SYS@orcl> alter database clear unarchived logfile group n;
(在线直接执行上述命令,实例异常关机,启动到mount执行,
不会丢失数据,n损坏的inactive日志组,可以在mount状态查看或者告警日志查看)
3.2
a、inactive redo文件损坏
b、不需要写入数据文件信息
c、实例在线损坏和实例异常关机损坏
d、数据库归档模式;
e、已归档
SYS@orcl> select l.group#, l.sequence#, lf.member, l.bytes/1024/1024 M, l.archived, l.status from v$log l, v$logfile lf where l.group#=lf.group#;
SYS@orcl> alter database clear logfile group n;
(在线直接执行上述命令,实例异常关机,启动到mount执行,
不会丢失数据,n损坏的inactive日志组,可以在mount状态查看或者告警日志查看)
3.3
a、inactive redo文件损坏
b、不需要写入数据文件信息
c、实例在线损坏和实例异常关机损坏
d、数据库非归档模式;
e、不归档
SYS@orcl> select l.group#, l.sequence#, lf.member, l.bytes/1024/1024 M, l.archived, l.status from v$log l, v$logfile lf where l.group#=lf.group#;
SYS@orcl> alter database clear logfile group n;
(在线直接执行上述命令,实例异常关机,启动到mount执行,
不会丢失数据,n损坏的inactive日志组,可以在mount状态查看或者告警日志查看)


猜你喜欢

转载自blog.51cto.com/hnyuanzijian/2506076