bluet00 2020-05-31
操作系统环境:
Red Hat Enterprise Linux Server release 7.7 (Maipo)
数据库环境:
Version 19.3.0.0.0
查看控制文件位置:
[ ~]$ 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
> 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.模拟损坏控制文件
[ ~]$ cat /dev/null > /u02/oradata/ORCL/control01.ctl
2.恢复控制文件
[ ~]$ 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.
已连接到空闲例程。
> 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: ?????????, ??????, ???????
>
3.查看告警日志
[ ~]$ [ 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.恢复控制文件
[ trace]$ cd /u02/oradata/ORCL/
[ ORCL]$ mv control01.ctl control01.ctl20200530error
[ ORCL]$ cp /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl ./control01.ctl
5.打开数据库
> 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.备份控制文件
[ ~]$ mkdir -p /home/oracle/rmanbak/ctlbak/
[ ~]$ 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
[ ~]$ cat /dev/null > /u02/oradata/ORCL/control01.ctl
[ ~]$ cat /dev/null > /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl
3.关闭数据库
> shutdown abort;
ORA-24324: 未初始化服务句柄
ORA-01041: 内部错误, hostdef 扩展名不存在
4.启动数据库到nomount状态
[ ~]$ 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.
已连接到空闲例程。
> 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
>
5.从备份中还原控制文件
[ ~]$ 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自动应用所有的归档文件(可以从日志的读取修改时间判断,哪个是当前日志)
> 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.重储打开数据库
> 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日志,产生归档。
> select group#, sequence#,status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 1 CURRENT
2 0 UNUSED
3 0 UNUSED
> alter system switch logfile;
系统已更改。
> /
系统已更改。
> /
系统已更改。
> /
系统已更改。
> /
系统已更改。
> select group#, sequence#,status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 4 INACTIVE
2 5 INACTIVE
3 6 CURRENT
[ 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归档文件
[ ~]$ 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 对象已删除
[ 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
[ ~]$ cat /dev/null > /u02/oradata/ORCL/control01.ctl
[ ~]$ cat /dev/null > /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl
5.关闭数据库
> shutdown abort;
ORA-24324: 未初始化服务句柄
ORA-01041: 内部错误, hostdef 扩展名不存在
> quit
6.启动数据库到nomount状态
[ ~]$ 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.
已连接到空闲例程。
> 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.从备份中还原控制文件
[ ~]$ 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状态,
> alter database mount;
数据库已更改。
> recover database using backup controlfile until cancel;
ORA-00283: 恢复会话因错误而取消 ORA-19909:
数据文件 1 属于孤立的原型 ORA-01110:
数据文件 1: ‘/u02/oradata/ORCL/system01.dbf‘
9.查看控制文件和数据文件的scn号
> 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 行。
> 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.加入隐含参数,打开数据库
> alter system set "_allow_resetlogs_corruption"=true scope=spfile;
系统已更改。
> shu immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
12.重新启动数据库到mount状态
> 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
数据库装载完毕。
> 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 行。
> 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 行。
> 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
> show parameter undo;
ERROR:
ORA-03114: 未连接到 ORACLE
> quit
从 Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0 断开
[ ~]$ 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
> 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
数据库装载完毕。
> show parameter undo;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
temp_undo_enabled boolean FALSE
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
> alter system set undo_management=manual scope=spfile;
系统已更改。
> alter system set undo_tablespace=system scope=spfile;
系统已更改。
> shu immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
> 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
数据库装载完毕。
> alter database open ;
数据库已更改。
> 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 行。
> 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 行。
> create undo tablespace undotbs2 datafile ‘/u02/oradata/ORCL/undotbs02.dbf‘ size 1024M autoextend on next 50m maxsize unlimited;
表空间已创建。
> alter system set undo_tablespace=undotbs2 scope=spfile;
系统已更改。
> alter system set undo_management=auto scope=spfile;
系统已更改。
> drop tablespace undotbs1 including contents and datafiles cascade constraint;
表空间已删除。
> shu immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
> startup
ORACLE 例程已经启动。
Total System Global Area 1543500832 bytes
Fixed Size 9135136 bytes
Variable Size 989855744 bytes
Database Buffers 536870912 bytes
Redo Buffers 7639040 bytes
数据库装载完毕。
数据库已经打开。
> 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"=true 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模拟损坏的控制文件
[ ~]$ cat /dev/null > /u02/oradata/ORCL/control01.ctl
[ ~]$ cat /dev/null > /u01/app/oracle/fast_recovery_area/ORCL/control02.ctl
2.关闭数据库
> shutdown abort;
3.启动到nomount状态,
> 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重储控制文件
[ ~]$ 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状态,
> alter database mount;
数据库已更改。
6.生成控制文件脚本
数据库已更改。
> alter database backup controlfile to trace as ‘/home/oracle/controlfile.txt‘;
7.关闭数据库,并启动到nomount状态
> shu immediate;
ORA-01109: ??????
已经卸载数据库。
ORACLE 例程已经关闭。
> 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.恢复数据库
> RECOVER DATABASE;
完成介质恢复。
> ALTER SYSTEM ARCHIVE LOG ALL;
系统已更改。
10.打开数据库
> ALTER DATABASE OPEN;
数据库已更改。
11.打开插件数据库
> ALTER PLUGGABLE DATABASE ALL OPEN;
插接式数据库已变更。
12.添加临时表空间
> ALTER TABLESPACE TEMP ADD TEMPFILE ‘/u02/oradata/ORCL/temp01.dbf‘ REUSE;
表空间已更改。
> ALTER SESSION SET CONTAINER = "PDB$SEED";
会话已更改。
> 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;
会话已更改。
>
表空间已更改。
> 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、构造控制文件;