第8章 控制文件的备份与恢复

控制文件通常有多个,互为镜像,实例读的是第一个文件,写的是全部文件。

第一个文件是show parameter control_files查询出来的排第一的那个文件。

控制文件损坏,实例通常只能启动到nomount状态。

备份控制文件

  • 在线镜像备份
  • 多个互为镜像的控制文件,建议存放在不同磁盘路径下,控制文件损坏时的首选恢复,只要用正常的文件替换损坏的文件即可。
  • 自动备份
#开启显式自动备份,默认是OFF
#备份路径在快速恢复区的autobackup目录内
configure controlfile autobackup on;

#备份时机:
#1、RMAN执行任何备份操作
#2、数据库物理结构发生变化,比如新增数据文件(延迟备份,并非每新增一个数据文件就立即启动备份,所以一次新增多个数据文件时可能只有一个自动备份)
#使用RMAN命令备份第一个数据文件时,备份路径在backupset目录
#以下三个命令都会被分datafile 1
backup datafile 1;
backup database;
backup tablespace system;
  • 手动备份
#RMAN方式
backup as backupset current controlfile;

#列出备份集备份
list backup of controlfile;
#RMAN方式
backup as copy current controlfile format '/backup/control.bak';

#SQL PLUS方式
alter database backup controlfile to '/backup/control.bak2';

#列出镜像复制备份
list copy of controlfile;
#创建跟踪文件
alter database backup controlfile to trace;

#查看转储文件路径
select value from v$diag_info where name='Default Trace File';

#查看转储文件
more ...

恢复控制文件

先从备份还原,然后使用重做日志恢复。

  • 在线镜像备份
  • 多路控制文件中的一个,所有信息与当前控制文件都是相同的
  • 结构备份
  • 数据库的物理结构信息与当前控制文件相同,序列号、SCN等信息比当前控制文件旧
  • 历史备份
  • 数据库的物理结构信息、序列号、SCN等信息都比当前控制文件旧

结构备份、历史备份恢复时有三个步骤:

  1. 从备份中还原控制文件
  2. 使用重做日志恢复
  3. 以resetlogs的方式打开数据库
利用自动备份恢复
#1、启动实例到nomount状态
startup nomount;

#2、rman下从自动备份还原控制文件(启用了快速恢复区)
#参数 db_recovery_file_dest 指定了快速恢复区路径
restore controlfile from autobackup;

#3、rman下启动实例到mount状态
mount database;

#4、rman下恢复数据库(找到current状态的在线重做日志作为恢复的终点,读取日志文件(包括归档日志)恢复数据文件和控制文件的部分信息)
recover database;

#5、resetlogs方式打开数据库(仅用来重设日志序列号,没有丢失事务,与不完全恢复的resetlogs不同)
alter database open resetlogs;
利用手动备份恢复

除第2步需手工指定备份文件路径,其余步骤与自动备份相同

#1、启动实例到nomount状态
startup nomount;

#2、rman下从备份还原控制文件(手工指定备份文件路径)
restore controlfile from '/backup/controlfile.bak';

#3、rman下启动实例到mount状态
mount database;

#4、rman下恢复数据库
recover database;

#5、resetlogs方式打开数据库(仅用来重设日志序列号,没有丢失事务,与不完全恢复的resetlogs不同)
alter database open resetlogs;
利用历史备份恢复
  • 自动修复不一致
#场景:备份了控制文件后新建了数据文件或表空间,备份的控制文件中不包含新建的文件信息,此时控制文件损坏需要恢复

#恢复步骤
RMAN> restore controlfile from '/u01/oracle/app/oracle/fast_recovery_area/HISDB/backupset/2024_06_04/o1_mf_ncnnf_TAG20240604T205454_m5y3nzjb_.bkp';
RMAN> mount database;
RMAN> recover database;
RMAN> alter database open resetlogs;

#检查新建的数据文件已在控制文件中
SQL> select name from v$datafile;

Oracle11g数据库恢复技术_读书笔记_第8章 控制文件的备份与恢复_数据库

  • 手动修复不一致
#场景:备份了控制文件后删除了某个数据文件或表空间,备份的控制文件中包含已被删除的文件信息,此时控制文件损坏需要恢复

#还原控制文件、mount数据库
RMAN> restore controlfile from '/u01/oracle/app/oracle/fast_recovery_area/HISDB/backupset/2024_06_04/o1_mf_ncnnf_TAG20240604T205454_m5y3nzjb_.bkp';
RMAN> mount database;

#检查控制文件信息,发现之前已被删除的5号文件还在控制文件中
SQL> select file#, name from v$datafile;

#使5号文件离线
SQL> alter database datafile 5 offline;
#或者直接跳过被删除的表空间,更简单。152页
RMAN> recover database skip tablespace newts;
RMAN> alter database open resetlogs;

#查询在线重做日志信息
SQL> SELECT member FROM V$logfile;

#在sqlplus中恢复控制文件,在提示框中输入在线重做日志文件路径,从最小一个开始输,如下图
SQL> recover database using backup controlfile;

#打开数据库
RMAN> alter database open resetlogs;

#检查新建的数据文件已在控制文件中
SQL> select name from v$datafile;

Oracle11g数据库恢复技术_读书笔记_第8章 控制文件的备份与恢复_数据库_02

缺失归档日志时的恢复
#1、还原控制文件
RMAN> restore controlfile from autobackup;

#2、装载数据库
RMAN> mount database;

#3、恢复数据库,会报错
RMAN> recover database;

#4、生成控制文件信息到trace中
SQL> alter database backup controlfile to trace;

#5、确认trace文件路径
SQL> select value from v$diag_info where name='Default Trace File';

#6、重启数据库到nomount
SQL> startup force nomount;

#7、查看trace文件,在其中找到并在sqlplus中执行NORESETLOGS版本的create controlfile命令   156页
more /u01/oracle/app/oracle/diag/rdbms/testdb/TESTDB/trace/TESTDB_ora_3568.trc

#8、恢复数据库,会报错,只在归档目录中找日志,不在在线日志目录中找
RMAN> recover database;

#9、根据报错的序号查询在线重做日志
SQL> select sequence#,status,group# from v$log;

#10、在sqlplus中恢复控制文件,在提示框中输入在线重做日志文件路径,输第9步查询到的序号日志路径
SQL> recover database using backup controlfile;

#10、打开数据库
SQL> alter database open resetlogs;

#11、找回临时数据
SQL> alter tablespace temp add tempfile '/u01/data/TESTDB/temp01.dbf' reuse;

以noresetlogs收尾

158页


第1章 重做日志(Redo Log)

第2章 控制文件(Control File)

第3章 补充日志(Supplemental Logging)

第4章 恢复管理器(RMAN)

第5章 恢复编录(Recovery Catalog)

第6章 数据泵(Data Pump)

第7章 参数文件的备份与还原

第8章 控制文件的备份与恢复

第9章 关键数据文件备份与恢复

第10章 普通数据文件备份与恢复

第11章 只读数据文件备份与恢复

第12章 不完全数据库恢复

第13章 无备份情况下的恢复

第14章 闪回技术(Flashback)

第15章 恢复受损的数据块