暂无图片
暂无图片
9
暂无图片
暂无图片
暂无图片

控制文件损坏恢复几种模式

原创 袁子建 2020-05-30
2425
操作系统环境:
Red Hat Enterprise Linux Server release 7.7 (Maipo)
数据库环境:
Version 19.3.0.0.0
查看控制文件位置:
[oracle@enmotech ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 星期六 5月 30 18:20:17 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> show parameter control_files;
NAME	            TYPE	                 VALUE
---------------- ----------- ------------------------------
control_files		string	                 /u02/oradata/ORCL/control01.ctl, /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl
复制

一、针对不同的恢复方法给出具体的恢复思路:

1.1、通过重新拷贝冗余的控制文件

注意
1.具有多路控制文件镜像
2.其他冗余控制文件没有损坏

模拟:控制文件control01.ctl损坏

恢复
1、在线或者关闭数据库后损坏了其中部分控制文件;
2、shutdown abort关闭数据库;
3、拷贝其中一个完好的控制文件;
4、startup启动数据库。

操作步骤如下

1.模拟损坏控制文件

[oracle@enmotech ~]$ cat /dev/null > /u02/oradata/ORCL/control01.ctl
复制

2.恢复控制文件

[oracle@enmotech ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 星期六 5月 30 18:29:26 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
已连接到空闲例程。
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-00205: ?????????, ??????, ???????
SYS@orcl> 
复制

3.查看告警日志

[oracle@enmotech ~]$ [oracle@enmotech trace]$ tail -f /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
ORA-205 signalled during: ALTER DATABASE   MOUNT...
2020-05-30T18:29:46.046678+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_mz00_6233.trc:
ORA-00202: ????: ''/u02/oradata/ORCL/control01.ctl''
ORA-27048: skgfifi: ????????
Additional information: 2
Checker run found 1 new persistent data failures
复制

4.恢复控制文件

[oracle@enmotech trace]$ cd /u02/oradata/ORCL/
[oracle@enmotech ORCL]$ mv control01.ctl control01.ctl20200530error
[oracle@enmotech ORCL]$ cp /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl ./control01.ctl
复制

5.打开数据库

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
数据库装载完毕。
数据库已经打开。
复制

1.2、 通过备份控制文件进行完全恢复

注意:
1.备份了控制文件
2.备份了控制文件之后有连续的归档文件和redo文件

1、在线或者关闭数据库后损坏了所有控制文件;
2、shutdown abort关闭数据库;
3、startup nomount启动数据库;
4、restore controlfile from ‘xxx’;从备份中还原控制文件;
5、alter database mount;
5、recover database using backup controlfile until cancel,在执行时选择auto自动应用所有的归档文件;
6、再次执行recover database using backup controlfile until cancel,选择应用未归档的redo文件;
7、alter database open resetlogs;

模拟:控制文件control01.ctl,control02.ctl损坏

1.备份控制文件

[oracle@enmotech ~]$ mkdir -p /home/oracle/rmanbak/ctlbak/
[oracle@enmotech ~]$ rman target /
RMAN> backup current controlfile tag='ctl_bak' format='/home/oracle/rmanbak/ctlbak/ctl_%d_%T_%s_%p.bkp';
从位于 30-5月 -20 的 backup 开始
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
备份集内包括当前控制文件
通道 ORA_DISK_1: 正于 30-5月 -20 启动段 1
通道 ORA_DISK_1: 完成了于 30-5月 -20 启动段 1
片段句柄 = /home/oracle/rmanbak/ctlbak/ctl_ORCL_20200530_5_1.bkp 标记 = CTL_BAK 注释 = NONE
通道 ORA_DISK_1: 备份集完成, 用时: 00:00:01
在 30-5月 -20 完成了 backup
从位于 30-5月 -20 的 Control File and SPFILE Autobackup 开始
片段句柄 = /u01/app/oracle/fast_recovery_area/ORCL/autobackup/2020_05_30/o1_mf_s_1041792645_hf4gn5yv_.bkp 注释 = NONE
在 30-5月 -20 完成了 Control File and SPFILE Autobackup
复制

2.破坏控制文件control01.ctl,control02.ctl

[oracle@enmotech ~]$ cat /dev/null > /u02/oradata/ORCL/control01.ctl
[oracle@enmotech ~]$ cat /dev/null > /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl 
复制

3.关闭数据库

SYS@orcl> shutdown abort;
ORA-24324: 未初始化服务句柄
ORA-01041: 内部错误, hostdef 扩展名不存在
复制

4.启动数据库到nomount状态

[oracle@enmotech ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 星期六 5月 30 18:57:26 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
已连接到空闲例程。
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> 
复制

5.从备份中还原控制文件

[oracle@enmotech ~]$ rman target /
恢复管理器: Release 19.0.0.0.0 - Production on 星期六 5月 30 18:59:46 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
已连接到目标数据库: ORCL (未装载)
RMAN> restore controlfile from '/home/oracle/rmanbak/ctlbak/ctl_ORCL_20200530_5_1.bkp';
从位于 30-5月 -20 的 restore 开始
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=256 设备类型=DISK
通道 ORA_DISK_1: 正在还原控制文件
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
输出文件名=/u02/oradata/ORCL/control01.ctl
输出文件名=/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl
在 30-5月 -20 完成了 restore
复制

6.启动到mount状态

6.1在执行时选择auto自动应用所有的归档文件(可以从日志的读取修改时间判断,哪个是当前日志)

SYS@orcl> recover database using backup controlfile until cancel;
ORA-00279: ?? 3329195 (? 05/30/2020 18:34:48 ??) ???? 1 ????
ORA-00289: ??: /u02/oradata/orcl_arch_log/1_21_1040302643.arc
ORA-00280: ?? 3329195 (???? 1) ??? #21 ?
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: ������������������������ '/u02/oradata/orcl_arch_log/1_21_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_21_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'
6.2选择应用未归档的redo文件;(可以从日志的读取修改时间判断,哪个是当前日志)
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
/u02/oradata/ORCL/redo03.log
已应用的日志。
完成介质恢复。
7.重储打开数据库
SYS@orcl> alter database open resetlogs;
数据库已更改。
复制

1.3、通过备份控制文件进行不完全恢复

注意:
1.备份了控制文件
2.备份了控制文件之后的归档文件或者redo文件不连续

1、在线或者关闭数据库后损坏了所有控制文件;
2、shutdown abort关闭数据库;
3、startup nomount启动数据库;
4、restore controlfile from ‘xxx’;从备份中还原控制文件;
5、alter database mount;
6、recover database using backup controlfile until cancel,在执行时选择auto自动应用尽可能多的归档文件;
7、alter database open resetlogs;

模拟
1.利用1.2环境中已经备份的控制文件
2.切换当前的redo日志,产生归档。

SYS@orcl> select group#, sequence#,status from v$log;
    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
	 1	    1 CURRENT
	 2	    0 UNUSED
	 3	    0 UNUSED
SYS@orcl> alter system switch logfile;
系统已更改。
SYS@orcl> /
系统已更改。
SYS@orcl> /
系统已更改。
SYS@orcl> /
系统已更改。
SYS@orcl> /
系统已更改。
SYS@orcl> select group#, sequence#,status from v$log;
    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
	 1	    4 INACTIVE
	 2	    5 INACTIVE
	 3	    6 CURRENT
[oracle@enmotech orcl_arch_log]$ ll
总用量 5684
-rw-r----- 1 oracle oinstall 5785088 5月  30 19:23 1_1_1041793920.arc
-rw-r----- 1 oracle oinstall    1024 5月  30 19:23 1_2_1041793920.arc
-rw-r----- 1 oracle oinstall   18944 5月  30 19:23 1_3_1041793920.arc
-rw-r----- 1 oracle oinstall    1024 5月  30 19:23 1_4_1041793920.arc
-rw-r----- 1 oracle oinstall    1024 5月  30 19:23 1_5_1041793920.arc
3.删除1_3_1041793920.arc归档文件
[oracle@enmotech ~]$ rman target /
恢复管理器: Release 19.0.0.0.0 - Production on 星期六 5月 30 19:29:31 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
已连接到目标数据库: ORCL (DBID=1568083377)
RMAN> delete archivelog sequence 3 thread 1;
释放的通道: ORA_DISK_1
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=44 设备类型=DISK
db_unique_name 为 ORCL 的数据库的归档日志副本列表
=====================================================================
关键字     线程序列     S 时间下限
------- ---- ------- - ----------
18      1    3       A 30-5月 -20
        名称: /u02/oradata/orcl_arch_log/1_3_1041793920.arc
是否确定要删除以上对象 (输入 YES 或 NO)? yes
已删除的归档日志
归档日志文件名 = /u02/oradata/orcl_arch_log/1_3_1041793920.arc RECID=18 STAMP=1041794632
1 对象已删除
[oracle@enmotech orcl_arch_log]$ ll
总用量 5664
-rw-r----- 1 oracle oinstall 5785088 5月  30 19:23 1_1_1041793920.arc
-rw-r----- 1 oracle oinstall    1024 5月  30 19:23 1_2_1041793920.arc
-rw-r----- 1 oracle oinstall    1024 5月  30 19:23 1_4_1041793920.arc
-rw-r----- 1 oracle oinstall    1024 5月  30 19:23 1_5_1041793920.arc
复制

4.破坏控制文件control01.ctl,control02.ctl

[oracle@enmotech ~]$ cat /dev/null > /u02/oradata/ORCL/control01.ctl
[oracle@enmotech ~]$ cat /dev/null > /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl 
复制

5.关闭数据库

SYS@orcl> shutdown abort;
ORA-24324: 未初始化服务句柄
ORA-01041: 内部错误, hostdef 扩展名不存在
SYS@orcl> quit
复制

6.启动数据库到nomount状态

[oracle@enmotech ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 星期六 5月 30 19:39:55 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
已连接到空闲例程。
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
复制

7.从备份中还原控制文件

[oracle@enmotech ~]$ rman target /
恢复管理器: Release 19.0.0.0.0 - Production on 星期六 5月 30 19:43:07 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
已连接到目标数据库: ORCL (未装载)
RMAN> restore controlfile from '/home/oracle/rmanbak/ctlbak/ctl_ORCL_20200530_5_1.bkp';
从位于 30-5月 -20 的 restore 开始
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=256 设备类型=DISK
通道 ORA_DISK_1: 正在还原控制文件
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
输出文件名=/u02/oradata/ORCL/control01.ctl
输出文件名=/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl
在 30-5月 -20 完成了 restore
复制

8,启动到mount状态,

SYS@orcl> alter database mount;
数据库已更改。
SYS@orcl> recover database using backup controlfile until cancel;
ORA-00283: 恢复会话因错误而取消 ORA-19909:
数据文件 1 属于孤立的原型 ORA-01110:
数据文件 1: '/u02/oradata/ORCL/system01.dbf'
复制

9.查看控制文件和数据文件的scn号

SYS@orcl> select file#,name,checkpoint_change# from v$datafile_header;
     FILE# NAME 						      CHECKPOINT_CHANGE#
---------- ---------------------------------------------------------- ------------------
	 1 /u02/oradata/ORCL/system01.dbf					 3334516
	 3 /u02/oradata/ORCL/sysaux01.dbf					 3334516
	 4 /u02/oradata/ORCL/undotbs01.dbf					 3334516
	 5 /u02/oradata/ORCL/pdbseed/system01.dbf				 2149302
	 6 /u02/oradata/ORCL/pdbseed/sysaux01.dbf				 2149302
	 7 /u02/oradata/ORCL/users01.dbf					 3334516
	 8 /u02/oradata/ORCL/pdbseed/undotbs01.dbf				 2149302
	 9 /u02/oradata/ORCL/orclpdb/system01.dbf				 3334516
	10 /u02/oradata/ORCL/orclpdb/sysaux01.dbf				 3334516
	11 /u02/oradata/ORCL/orclpdb/undotbs01.dbf				 3334516
	12 /u02/oradata/ORCL/orclpdb/users01.dbf				 3334516
	13 /u02/oradata/ORCL/orclpdb/lob_data01.dbf				 3334516
已选择 12 行。
SYS@orcl> select file#,name,checkpoint_change#,last_change# from v$datafile
  2  ;
     FILE# NAME 						      CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ---------------------------------------------------------- ------------------ ------------
	 1 /u02/oradata/ORCL/system01.dbf					 3329195
	 3 /u02/oradata/ORCL/sysaux01.dbf					 3329195
	 4 /u02/oradata/ORCL/undotbs01.dbf					 3329195
	 5 /u02/oradata/ORCL/pdbseed/system01.dbf				 2149302
	 6 /u02/oradata/ORCL/pdbseed/sysaux01.dbf				 2149302
	 7 /u02/oradata/ORCL/users01.dbf					 3329195
	 8 /u02/oradata/ORCL/pdbseed/undotbs01.dbf				 2149302
	 9 /u02/oradata/ORCL/orclpdb/system01.dbf				 3329195
	10 /u02/oradata/ORCL/orclpdb/sysaux01.dbf				 3329195
	11 /u02/oradata/ORCL/orclpdb/undotbs01.dbf				 3329195
	12 /u02/oradata/ORCL/orclpdb/users01.dbf				 3329195
	13 /u02/oradata/ORCL/orclpdb/lob_data01.dbf				 3329195
已选择 12 行。
复制

10.发现scn号不一致。

11.加入隐含参数,打开数据库

SYS@orcl> alter system set "_allow_resetlogs_corruption"=true scope=spfile;
系统已更改。
SYS@orcl> shu immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
复制

12.重新启动数据库到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
数据库装载完毕。
SYS@orcl> select file#,name,checkpoint_change#,last_change# from v$datafile;
     FILE# NAME 						      CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ---------------------------------------------------------- ------------------ ------------
	 1 /u02/oradata/ORCL/system01.dbf					 3329195
	 3 /u02/oradata/ORCL/sysaux01.dbf					 3329195
	 4 /u02/oradata/ORCL/undotbs01.dbf					 3329195
	 5 /u02/oradata/ORCL/pdbseed/system01.dbf				 2149302
	 6 /u02/oradata/ORCL/pdbseed/sysaux01.dbf				 2149302
	 7 /u02/oradata/ORCL/users01.dbf					 3329195
	 8 /u02/oradata/ORCL/pdbseed/undotbs01.dbf				 2149302
	 9 /u02/oradata/ORCL/orclpdb/system01.dbf			 3329195
	10 /u02/oradata/ORCL/orclpdb/sysaux01.dbf			 3329195
	11 /u02/oradata/ORCL/orclpdb/undotbs01.dbf			 3329195
	12 /u02/oradata/ORCL/orclpdb/users01.dbf			 3329195
	13 /u02/oradata/ORCL/orclpdb/lob_data01.dbf			 3329195
已选择 12 行。
SYS@orcl> select file#,name,checkpoint_change# from v$datafile_header;
     FILE# NAME 						      CHECKPOINT_CHANGE#
---------- ---------------------------------------------------------- ------------------
	 1 /u02/oradata/ORCL/system01.dbf					 3334516
	 3 /u02/oradata/ORCL/sysaux01.dbf					 3334516
	 4 /u02/oradata/ORCL/undotbs01.dbf					 3334516
	 5 /u02/oradata/ORCL/pdbseed/system01.dbf				 2149302
	 6 /u02/oradata/ORCL/pdbseed/sysaux01.dbf				 2149302
	 7 /u02/oradata/ORCL/users01.dbf					 3334516
	 8 /u02/oradata/ORCL/pdbseed/undotbs01.dbf				 2149302
	 9 /u02/oradata/ORCL/orclpdb/system01.dbf			 3334516
	10 /u02/oradata/ORCL/orclpdb/sysaux01.dbf			 3334516
	11 /u02/oradata/ORCL/orclpdb/undotbs01.dbf			 3334516
	12 /u02/oradata/ORCL/orclpdb/users01.dbf			 3334516
	13 /u02/oradata/ORCL/orclpdb/lob_data01.dbf			 3334516
已选择 12 行。
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: 13925
会话 ID: 237 序列号: 40956
SYS@orcl> show parameter undo;
ERROR:
ORA-03114: 未连接到 ORACLE
SYS@orcl> quit
从 Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0 断开
[oracle@enmotech ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 星期六 5月 30 20:21:03 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
已连接到空闲例程。
复制

13.重建undo

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;
系统已更改。
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
数据库装载完毕。
SYS@orcl> alter database open ;
数据库已更改。
SYS@orcl> r
  1* select file#,name,checkpoint_change# from v$datafile_header
     FILE# NAME 						      CHECKPOINT_CHANGE#
---------- ---------------------------------------------------------- ------------------
	 1 /u02/oradata/ORCL/system01.dbf					 3431933
	 3 /u02/oradata/ORCL/sysaux01.dbf					 3431933
	 4 /u02/oradata/ORCL/undotbs01.dbf					 3431933
	 5 /u02/oradata/ORCL/pdbseed/system01.dbf				 2149302
	 6 /u02/oradata/ORCL/pdbseed/sysaux01.dbf				 2149302
	 7 /u02/oradata/ORCL/users01.dbf					 3431933
	 8 /u02/oradata/ORCL/pdbseed/undotbs01.dbf				 2149302
	 9 /u02/oradata/ORCL/orclpdb/system01.dbf			 3431933
	10 /u02/oradata/ORCL/orclpdb/sysaux01.dbf			 3431933
	11 /u02/oradata/ORCL/orclpdb/undotbs01.dbf			 3431933
	12 /u02/oradata/ORCL/orclpdb/users01.dbf			 3431933
	13 /u02/oradata/ORCL/orclpdb/lob_data01.dbf			 3431933
已选择 12 行。
SYS@orcl> select file#,name,checkpoint_change#,last_change# from v$datafile;
     FILE# NAME 						      CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ---------------------------------------------------------- ------------------ ------------
	 1 /u02/oradata/ORCL/system01.dbf					 3431933
	 3 /u02/oradata/ORCL/sysaux01.dbf					 3431933
	 4 /u02/oradata/ORCL/undotbs01.dbf					 3431933
	 5 /u02/oradata/ORCL/pdbseed/system01.dbf				 2149302      2149302
	 6 /u02/oradata/ORCL/pdbseed/sysaux01.dbf				 2149302      2149302
	 7 /u02/oradata/ORCL/users01.dbf					 3431933
	 8 /u02/oradata/ORCL/pdbseed/undotbs01.dbf				 2149302      2149302
	 9 /u02/oradata/ORCL/orclpdb/system01.dbf			 3431933
	10 /u02/oradata/ORCL/orclpdb/sysaux01.dbf			 3431933
	11 /u02/oradata/ORCL/orclpdb/undotbs01.dbf			 3431933
	12 /u02/oradata/ORCL/orclpdb/users01.dbf			 3431933
	13 /u02/oradata/ORCL/orclpdb/lob_data01.dbf			 3431933
已选择 12 行。
SYS@orcl> create undo tablespace undotbs2 datafile '/u02/oradata/ORCL/undotbs02.dbf' size 1024M autoextend on next 50m maxsize unlimited;
表空间已创建。
SYS@orcl> alter system set undo_tablespace=undotbs2 scope=spfile;
系统已更改。
SYS@orcl> alter system set undo_management=auto scope=spfile;
系统已更改。
SYS@orcl> drop tablespace undotbs1 including contents and datafiles cascade constraint;
表空间已删除。
SYS@orcl> shu immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
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
数据库装载完毕。
数据库已经打开。
SYS@orcl> show parameter undo;
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
temp_undo_enabled		     boolean	 FALSE
undo_management 		     string	 AUTO
undo_retention			     integer	 900
undo_tablespace 		     string	 UNDOTBS2
复制

14.如果允许的话,导出数据库,重建实例。如果数据量过大的话,还原隐含参数

alter system set "_allow_resetlogs_corruption"=false scope=spfile;
复制

1.4、通过备份控制文件进行重建的恢复(noresetlogs方式)

1.备份了控制文件

2.redo文件无丢失或者无损坏

1、在线或者关闭数据库后损坏了所有控制文件;
2、shutdown abort关闭数据库;
3、startup nomount启动数据库;
4、restore controlfile from ‘xxx’;从备份中还原控制文件;
5、alter database mount;
6、alter database backup controlfile to trace,生成创建控制文件的脚本;
7、shutdown immediate并启动到startup nomount状态;
8、使用noresetlogs方式创建控制文件;
9、recover database恢复数据库;
10、恢复完后通过alter database open打开数据库;

1.1利用1.2环境中已经备份的控制文件

1.2模拟损坏的控制文件

[oracle@enmotech ~]$  cat /dev/null > /u02/oradata/ORCL/control01.ctl
[oracle@enmotech ~]$  cat /dev/null > /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl
复制

2.关闭数据库

SYS@orcl> shutdown abort;
复制

3.启动到nomount状态,

SYS@orcl> startup nomount;
ORACLE 例程已经启动。
Total System Global Area 1543500832 bytes
Fixed Size		    9135136 bytes
Variable Size		 1023410176 bytes
Database Buffers	  503316480 bytes
Redo Buffers		    7639040 bytes
复制

4重储控制文件

[oracle@enmotech ~]$ rman target /
恢复管理器: Release 19.0.0.0.0 - Production on 星期六 5月 30 22:26:50 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
已连接到目标数据库: ORCL (未装载)
RMAN> restore controlfile from '/home/oracle/rmanbak/ctlbak/ctl_ORCL_20200530_1_1.bkp';
从位于 30-5月 -20 的 restore 开始
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=257 设备类型=DISK
通道 ORA_DISK_1: 正在还原控制文件
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
输出文件名=/u02/oradata/ORCL/control01.ctl
输出文件名=/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl
在 30-5月 -20 完成了 restore
复制

5.启动到mount状态,

SYS@orcl> alter database mount;
数据库已更改。
复制

6.生成控制文件脚本

数据库已更改。
SYS@orcl> alter database backup controlfile to trace as '/home/oracle/controlfile.txt';
复制

7.关闭数据库,并启动到nomount状态

SYS@orcl> shu immediate;
ORA-01109: ??????
已经卸载数据库。
ORACLE 例程已经关闭。
SYS@orcl> startup nomount;
ORACLE 例程已经启动。
Total System Global Area 1543500832 bytes
Fixed Size		    9135136 bytes
Variable Size		 1023410176 bytes
Database Buffers	  503316480 bytes
Redo Buffers		    7639040 bytes
复制

8.重建控制文件

CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 1024
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u02/oradata/ORCL/redo01.log'  SIZE 200M BLOCKSIZE 512,
  GROUP 2 '/u02/oradata/ORCL/redo02.log'  SIZE 200M BLOCKSIZE 512,
  GROUP 3 '/u02/oradata/ORCL/redo03.log'  SIZE 200M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '/u02/oradata/ORCL/system01.dbf',
  '/u02/oradata/ORCL/sysaux01.dbf',
  '/u02/oradata/ORCL/undotbs01.dbf',
  '/u02/oradata/ORCL/pdbseed/system01.dbf',
  '/u02/oradata/ORCL/pdbseed/sysaux01.dbf',
  '/u02/oradata/ORCL/users01.dbf',
  '/u02/oradata/ORCL/pdbseed/undotbs01.dbf',
  '/u02/oradata/ORCL/orclpdb/system01.dbf',
  '/u02/oradata/ORCL/orclpdb/sysaux01.dbf',
  '/u02/oradata/ORCL/orclpdb/undotbs01.dbf',
  '/u02/oradata/ORCL/orclpdb/users01.dbf'
CHARACTER SET AL32UTF8
;
控制文件已创建。
复制

9.恢复数据库

SYS@orcl> RECOVER DATABASE;
完成介质恢复。
SYS@orcl> ALTER SYSTEM ARCHIVE LOG ALL;
系统已更改。
复制

10.打开数据库

SYS@orcl> ALTER DATABASE OPEN;
数据库已更改。
复制

11.打开插件数据库

SYS@orcl> ALTER PLUGGABLE DATABASE ALL OPEN;
插接式数据库已变更。
复制

12.添加临时表空间

SYS@orcl> ALTER TABLESPACE TEMP ADD TEMPFILE '/u02/oradata/ORCL/temp01.dbf' REUSE;
表空间已更改。
SYS@orcl> ALTER SESSION SET CONTAINER = "PDB$SEED";
会话已更改。
SYS@orcl> ALTER TABLESPACE TEMP ADD TEMPFILE '/u02/oradata/ORCL/pdbseed/temp012020-05-13_13-16-23-969-PM.dbf' REUSE;
表空间已更改。
ALTER SESSION SET CONTAINER = "ORCLPDB";
ALTER TABLESPACE TEMP ADD TEMPFILE '/u02/oradata/ORCL/orclpdb/temp01.dbf' REUSE;
会话已更改。
SYS@orcl> 
表空间已更改。
SYS@orcl> ALTER SESSION SET CONTAINER = "CDB$ROOT";
会话已更改。
复制

1.5、通过备份控制文件进行重建的恢复(resetlogs方式)

注意:

1.备份了控制文件

2.redo文件丢失或者损坏

1、在线或者关闭数据库后损坏了所有控制文件;
2、shutdown abort关闭数据库;
3、startup nomount启动数据库;
4、restore controlfile from ‘xxx’;从备份中还原控制文件;
5、alter database mount;
6、alter database backup controlfile to trace,生成创建控制文件的脚本;
7、shutdown immediate并启动到startup nomount状态
8、使用resetlogs方式创建控制文件;
9、如果未归档的redo文件可用时,则直接recover database,然后选用未归档的redo文件应用,
最后通过alter database open resetlogs方式打开数据库。
10、如果未归档的redo文件不可用时,则需要设置隐含参数_allow_resetlogs_corruption为true跳
过一致性检查,最后用alter database open resetlogs方式打开数据库。
注:打开数据库后很多情况下会出现需要推进scn的问题。

1.6、通过手工重建的控制文件进行恢复(noresetlogs方式)

注意
1.无可用的控制文件备份
2.redo文件无丢失和损坏

1、在线或者关闭数据库后损坏了所有控制文件;
2、shutdown abort关闭数据库;
3、startup nomount启动数据库;
4、构造控制文件;
下面的步骤参考1.4的第八步;

1.7、通过手工重建的控制文件进行恢复(resetlogs方式)

注意:
1.无可用的控制文件备份
2.redo文件丢失或者损坏

1、在线或者关闭数据库后损坏了所有控制文件;
2、shutdown abort关闭数据库;
3、startup nomount启动数据库;
4、构造控制文件;

最后修改时间:2020-06-01 16:11:34
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

目录
  • 一、针对不同的恢复方法给出具体的恢复思路:
    • 1.1、通过重新拷贝冗余的控制文件
    • 1.2、 通过备份控制文件进行完全恢复
    • 1.3、通过备份控制文件进行不完全恢复
    • 1.4、通过备份控制文件进行重建的恢复(noresetlogs方式)
    • 1.5、通过备份控制文件进行重建的恢复(resetlogs方式)
    • 1.6、通过手工重建的控制文件进行恢复(noresetlogs方式)
    • 1.7、通过手工重建的控制文件进行恢复(resetlogs方式)