Oracle的控制文件多路复用,控制文件备份,控制文件手工恢复

一.配置控制文件多路复用 

 1.查询Oracle的控制文件所在位置

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/fast_recovery_area/orcl/control02.ctl

 spfile多路复用控制文件

2.修改control_files参数:

SQL> alter system set 
control_files='/u01/app/oracle/oradata/orcl/control02.ctl',
'/u01/app/oracle/oradata/orcl/control03.ctl',
'/u01/app/oracle/oradata/orcl/control05.ctl' 
scope=spfile;

3.关闭数据库 

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down

 4. 进行文件拷贝(必须在数据库关闭下复制文件)

[oracle@cz ~]$ cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control02.ctl
[oracle@cz ~]$ cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control03.ctl
[oracle@cz ~]$ cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control05.ctl

5. 连接数据库 

[oracle@cz ~]$ sqlplus / as sysdba

6. 启动数据库

SQL> startup;
ORACLE instance started.

Total System Global Area 1169149952 bytes
Fixed Size		    2252624 bytes
Variable Size		  738197680 bytes
Database Buffers	  419430400 bytes
Redo Buffers		    9269248 bytes
Database mounted.
Database opened.

 7.查询控制文件信息

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control02.ctl
/u01/app/oracle/oradata/orcl/control03.ctl
/u01/app/oracle/oradata/orcl/control05.ctl

二.控制文件的损坏模拟与重建

1.关闭数据库,并模拟损坏

关闭数据库
SQL> shutdown immediate;
模拟单个控制文件损坏
SQL> !rm -rf /u01/app/oracle/oradata/orcl/control05.ctl

 2.尝试启动数据库,显然报错

SQL> startup;
ORACLE instance started.

Total System Global Area 1169149952 bytes
Fixed Size		    2252624 bytes
Variable Size		  738197680 bytes
Database Buffers	  419430400 bytes
Redo Buffers		    9269248 bytes
ORA-00205: error in identifying control file, check alert log for more info

3.拷贝其他路径在的控制文件给损坏的那个路径的控制文件

SQL> !cp /u01/app/oracle/oradata/orcl/control02.ctl /u01/app/oracle/oradata/orcl/control05.ctl

4.尝试启动数据库,显然成功了

SQL> startup
ORACLE instance started.

Total System Global Area 1169149952 bytes
Fixed Size		    2252624 bytes
Variable Size		  738197680 bytes
Database Buffers	  419430400 bytes
Redo Buffers		    9269248 bytes
Database mounted.
Database opened.

5. 查看控制文件和实例状态

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control02.ctl
/u01/app/oracle/oradata/orcl/control03.ctl
/u01/app/oracle/oradata/orcl/control05.ctl

 实例状态

SQL> select status from v$instance;

STATUS
------------
OPEN

三.通过 TRACE 备份  

严格意义上来说,不是针对控制文件的备份,而是根据现在系统情况生成了一份 trace
文件,这个 trace 文件中记录了创建控制文件的基本信息。
SQL> alter database backup controlfile to trace as '/u01/app/oracle/oradata/orcl/controfiles.bak';

Database altered.

四.所有控制文件损坏、丢失 

1.TRACE 备份  的优势与缺点

这种情况可以利用前面生成的 trace 文件进行手工重建。但是要注意,手工重建新 的,导致原来在的一些备份资料库元数据丢失,如果采用 RMAN 则不会。
Trace 文件是我们事先导出的,如果在发生故障之前从来没有生成过该如何处理?需 要从其他好的机器上 trace 一份模板,然后按照模板把该库对应的所有数据文件、日志文 件等信息找出来,然后对应到模板上进行重建。
trace 文件中有两段代码:第一段 sql 是在所有 online redolog 没有丢失,以 noresetlogs 选项打开数据库的情况下使用的。第二段则是在丢失了 online redolog 需要 resetlogs 的情况下使用。

2.模拟所有控制文件丢失,手工重建。

SQL> !rm -rf /u01/app/oracle/oradata/orcl/control02.ctl

SQL> !rm -rf /u01/app/oracle/oradata/orcl/control03.ctl

SQL> !rm -rf /u01/app/oracle/oradata/orcl/control05.ctl

SQL> startup
ORACLE instance started.

Total System Global Area 1169149952 bytes
Fixed Size		    2252624 bytes
Variable Size		  738197680 bytes
Database Buffers	  419430400 bytes
Redo Buffers		    9269248 bytes
ORA-00205: error in identifying control file, check alert log for more info

 启动报错

QL> startup
ORACLE instance started.

Total System Global Area 1169149952 bytes
Fixed Size		    2252624 bytes
Variable Size		  738197680 bytes
Database Buffers	  419430400 bytes
Redo Buffers		    9269248 bytes
Database mounted.
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
ORA-01207: file is more recent than control file - old control file

 3.trace 文件第一段 sql 编辑成文件并执行。

把下面方框中的sql编辑成脚本并执行

 创建脚本文件

[oracle@cz orcl]$ vim control.sql

 把上面的sql粘贴进去作为脚本

 执行脚本

SQL> @control.sql
SP2-0734: unknown command beginning "TARTUP NOM..." - rest of line ignored.

Control file created.

 查看实例状态数据库恢复正常

SQL> select status from v$instance;

STATUS
------------
OPEN
这时,控制文件里面的 SCN 号就追平了数据文件头部的 SCN 号了。
SQL> select file#,checkpoint_change# from v$datafile;
SQL> select file#,checkpoint_change# from v$datafile_header;

 

数据库正常打开,注意:这时候还有一个临时表空间不要忘了重新创建,实际临时表
空间文件并没有删除,但是由于删除了控制文件,数据字典中无法查到临时表空间文件。
所以临时表空间也需要重新建立。

4.临时表空间是空值

SQL> select * from v$tempfile;

no rows selected
数据字典查询是空值,但是 OS 系统层面依然存在 temp01.dbf 。所以需要重新建立。

5.重新建立临时表空间

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf' SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

Tablespace altered.

6.再次查询$v$tempfile;

SQL> select name from v$tempfile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/temp01.dbf
总结:这个重建控制文件的过程主要有两大部分内容:
第一部分是脚本中的可见信息:定义了几个参数的最大值,在线日志的物理信息,数
据文件的物理信息,使用的字符集。
第二部分是隐含的不可见信息,比如 SCN 信息,重建最关键的是将当前所有数据文
件头部的最新 SCN 信息复制到了控制文件中,以便接下来打开数据库。

 

  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值