控制文件版本不一致下恢复数据库

控制文件跟重做日志文件一般都形成多路径冗余,区别在于日志文件只在日志文件组内
形成相互映像,而控制文件是所有控制文件相互形成映像。再者,控制文件需要保持高度的
一致性,例如控制文件的内容等,总的来说就是版本保持一致性。以下是测试控制文件版本
不一致对数据库的影响,进而恢复的过程:

----控制文件的恢复:

---查看控制文件的信息:

sys@PROD>col name for a50

sys@PROD>select name,status from v$controlfile;

NAME                                               STATUS

-------------------------------------------------- -------

/u01/app/oracle/oradata/PROD/control01.ctl

/u01/app/oracle/fast_recovery_area/PROD/control02.ctl

 

---系统上做一个备份用于切换:

[oracle@enmo ~]$ cd /u01/app/oracle/fast_recovery_area/PROD/

[oracle@enmo PROD]$ ls

archivelog  autobackup  control02.ctl  onlinelog

[oracle@enmo PROD]$ cp control02.ctl control02.ctl.bak

[oracle@enmo PROD]$ ls

archivelog  autobackup  control02.ctl  control02.ctl.bak  onlinelog

[oracle@enmo PROD]$

 

---触发一个检测点:

sys@PROD>alter system checkpoint;

System altered.

  #从这里已经开始导致控制文件的版本不一致。

---删除原来的2号控制文件并把备份切换过来作为2号控制文件:

[oracle@enmo PROD]$ rm control02.ctl

[oracle@enmo PROD]$ mv control02.ctl.bak control02.ctl

[oracle@enmo PROD]$


---再触发一次检测点:

sys@PROD>alter system checkpoint;

System altered.

 

---尝试创建一个测试表:

sys@PROD>create table tests(id number(2),name varchar2(10));

create table tests(id number(2),name varchar2(10))

*

ERROR at line 1:

ORA-03135: connection lost contact

Process ID: 17656

Session ID: 1 Serial number: 7

#此时报错,无法连接数据库。
 

---尝试关闭数据库:

sys@PROD>shutdown immediate;

ORA-24324: service handle not initialized

ORA-01041: internal error. hostdef extension doesn't exist

sys@PROD>

 

---退出sqlplus重新登录并尝试登录数据库:

[oracle@enmo ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Tue Nov 22 23:01:14 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

 

PROD>startup

ORACLE instance started.

Total System Global Area  835104768 bytes

Fixed Size                  2257840 bytes

Variable Size             507513936 bytes

Database Buffers          322961408 bytes

Redo Buffers                2371584 bytes

ORA-00214: control file '/u01/app/oracle/oradata/PROD/control01.ctl' version

4951 inconsistent with file

'/u01/app/oracle/fast_recovery_area/PROD/control02.ctl' version 4946

#此时报错,两个控制文件的版本不一致。

 

---查看此时实例的状态:

PROD>select status from v$instance;

STATUS

------------

STARTED

 

---到操作系统层删除2号控制文件,并从1号控制文件复制一份保持版本一致:

[oracle@enmo PROD]$ pwd

/u01/app/oracle/fast_recovery_area/PROD

[oracle@enmo PROD]$ rm control02.ctl

[oracle@enmo PROD]$ ls

archivelog  autobackup  onlinelog

 

[oracle@enmo PROD]$ pwd

/u01/app/oracle/oradata/PROD

[oracle@enmo PROD]$

[oracle@enmo PROD]$ cp control01.ctl /u01/app/oracle/fast_recovery_area/PROD/control02.ctl

 

[oracle@enmo PROD]$ pwd

/u01/app/oracle/fast_recovery_area/PROD

[oracle@enmo PROD]$ ls

archivelog  autobackup  control02.ctl  onlinelog

#已经完成复制保持着两个控制文件的版本一致。

 

---尝试把实例调至mount状态:

PROD>alter database mount;

Database altered.

 

--alter日志的记录:

Tue Nov 22 23:11:34 2016

alter database mount

Tue Nov 22 23:11:38 2016

Successful mount of redo thread 1, with mount id 340427558

Database mounted in Exclusive Mode

Lost write protection disabled

Completed: alter database mount

 

--查看当前实例的状态:

PROD>select status from v$instance;

STATUS

------------

MOUNTED

#实例mount状态。 

 

---尝试打开数据库到open状态:

PROD>alter database open;

Database altered.

PROD>select status from v$instance;

STATUS

------------

OPEN

#数据库已经打开成功。

--控制文件版本不一致的恢复也相对简单一些,与丢失一个的恢复过程与难度相似,只是前者比后者
稍微多了一些删除步骤,后面同样的从一个最新版本复制一个副本到旧版本的路径目录下,然后在打开数据库。
当然,还有当全部的控制文件丢失或者损坏的情况下,可以通过最近最新的rman控制文件自动备份文件恢复,
或者把控制文件转储备份到trace文件,通过trace文件的记录,手动重新创建控制文件来恢复数据库。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31392094/viewspace-2128912/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31392094/viewspace-2128912/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值