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