1、概念
控制文件是一个跟踪数据库的二进制文件,每个数据库有唯一的控制文件,可以维护多个相同的拷贝。控制文件是oracle数据库用来查找数据库文件,并从总体上管理数据库状态的文件。控制文件包含以下信息:
(1)数据库名称和数据库唯一标识符(DBID);
(2)创建数据库的时间戳;
(3)有关数据库文件、联机重做日志、归档日志的信息;
(4)表空间的信息;
(5)RMAN备份信息。
2、控制文件的作用
1、包含数据文件、重做日志文件等打开数据库所需要的信息。
控制文件跟踪数据库的结构变化。当添加、重命名、删除数据文件或重做日志文件时,数据库将更新控制文件,记录相应的修改。
2、包含数据库打开时需要使用的元数据。
控制文件中包含包括检查点等用于恢复数据库所需的信息。在实例恢复过程中,检查点能指示出redo stream需要的起始SCN。每次提交更改之前检查点确保SCN已保存到磁盘上的数据文件中。
在数据库使用期间,数据库不断读取和写入控制文件,并且只要数据库处于打开状态,控制文件就必须是可用的。
3、使用RMAN备份控制文件
3.1 备份控制文件
我们可以使用backup current controlfile命令对控制文件的进行备份:
RMAN> backup current controlfile format '/app/rmanbak/control_%d_%I_%T_%t_%s_%p.ctl';
3.2 查看控制文件备份信息
我们可以使用list backup命令查询控制文件的备份信息:
RMAN> list backup of controlfile;
4、使用RMAN恢复控制文件
我们将模拟生产坏境中数据的插入,模拟控制文件丢失
--模拟数据插入
SQL> insert into t1 values(1,'Tome');1 row created.
SQL> commit;
--查询控制文件位置
SQL> select name from v$controlfile;
--删除控制文件
SQL> host rm /app/oracle/oradata/ORCL/control01.ctl
SQL> host rm /app/oracle/oradata/ORCL/control02.ctl
4.1 重启数据库
我们在重启数据库的时候,由于缺少控制文件,数据库只能启动到nomount状态。
--强制重启数据库
SQL> startup force;
ORACLE instance started.
Total System Global Area 8002730448 bytes
Fixed Size 8915408 bytes
Variable Size 1308622848 bytes
Database Buffers 6677331968 bytes
Redo Buffers 7860224 bytes
ORA-00205: error in identifying control file, check alert log for more info
--查询数据库状态
SQL> select status from v$instance;
STATUS
------------------------------------
STARTED
4.2 使用RMAN恢复控制文件
我们使用 restore命令恢复控制文件
RMAN> restore controlfile from '/app/rmanbak/control_ORCL_1651659091_20230203_1127833229_267_1.ctl';
控制文件恢复成功后,我们使用alter database mount命令挂载数据库。
RMAN> alter database mount;
4.3 使用rman恢复数据库
使用recover database命令恢复数据
RMAN> recover database;
数据库恢复完成之后,必须以resetlogs模式才能打开数据库。
--打开数据库
RMAN> alter database open;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of sql statement command at 02/03/2023 15:24:43
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
--以resetlogs模式打开数据库
RMAN> alter database open RESETLOGS;
Statement processed
我们登陆数据库查询数据
SQL> select * from t1;
ID NAME
---------- --------------------------------------------------
1 Tome
数据正常,至此控制文件恢复完成。