我是靠谱客的博主 想人陪日记本,最近开发中收集的这篇文章主要介绍oracle控制版本不一致,控制文件版本不一致下恢复数据库,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

控制文件跟重做日志文件一般都形成多路径冗余,区别在于日志文件只在日志文件组内

形成相互映像,而控制文件是所有控制文件相互形成映像。再者,控制文件需要保持高度的

一致性,例如控制文件的内容等,总的来说就是版本保持一致性。以下是测试控制文件版本

不一致对数据库的影响,进而恢复的过程:

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

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

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文件的记录,手动重新创建控制文件来恢复数据库。

最后

以上就是想人陪日记本为你收集整理的oracle控制版本不一致,控制文件版本不一致下恢复数据库的全部内容,希望文章能够帮你解决oracle控制版本不一致,控制文件版本不一致下恢复数据库所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部