oracle恢复数据库文件,oracle数据库恢复系列之控制文件恢复

一、不同场景控制文件损坏时的恢复方法场景恢复方法恢复条件

其中一个控制文件损坏1.1拷贝冗余的控制文件1、具有多路冗余控制文件镜像

2、其它冗余控制文件没有损坏

1.2修改control_files参数去除损坏文件同上、但不推荐该方法进行恢复

所有的控制文件损坏有备份2.1通过rman备份控制文件进行完全恢复1、通过rman备份了控制文件

2、备份了控制文件之后有连续的归档和redo文件

2.2通过rman备份控制文件进行不完全恢复1、通过rman备份了控制文件

2、备份了控制文件之后归档或redo文件丢失

2.3通过trace备份控制文件进行完全恢复1、通过trace备份了控制文件

2、备份了控制文件之后有连续的归档和redo文件

2.4通过trace备份控制文件进行不完全恢复1、通过trace备份了控制文件

2、备份了控制文件之后归档或redo文件丢失

无备份2.5通过手工重建控制文件进行恢复(noresetlogs)1、无有效的备份控制文件

2、redo文件无丢失和无损坏

2.6通过手工重建控制文件进行恢复(resetlogs)1、无有效的备份控制文件

2、redo文件丢失或损坏

2.7通过SNAPSHOT CONTROLFILE文件进行恢复此处为记录一个恢复控制文件的方法(不常使用)

二、不同场景控制文件损坏的恢复思路及演示

2.1其中一个控制文件损坏恢复思路

A. shutdown abort关闭数据库(控制文件损坏后不能正常关闭数据库,只能使用abort强制关闭)

B.拷贝其中一个完好的控制文件(推荐)或者修改control_files参数去除损坏文件(不推荐)

C. startup启动数据库

2.2其中一个控制文件损坏恢复演示SQL> show parameter control_files

NAME                                        TYPE                    VALUE

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

control_files                           string                   /u/app/oracle/oradata/racdg/control01.ctl,/u/app/oracle/ora

data/racdg/control02.ctl

SQL> !mv/u/app/oracle/oradata/racdg/control02.ctl /u/app/oracle/oradata/racdg/control02.ctl.bak

SQL> shutdown immediate;  --无正常关闭数据库,需要abort强制关闭

ORA-00210: cannot open the specifiedcontrol file

ORA-00202: control file:'/u/app/oracle/oradata/racdg/control02.ctl'

ORA-27041: unable to open file

Linux-x86_64 Error: 2: No such file ordirectory

Additional information: 3

SQL> shutdown abort;  --只能shutdown abort强制关闭

ORACLE instance shut down.

SQL> startup;  --启动数据库

ORACLE instance started.

ORA-00205: error in identifying controlfile, check alert log for more info  --启动报错,找不到指定的控制文件,在告警日志文件alert_sid.log中可以看到如下报错:

ORA-00210: cannot open the specifiedcontrol file

ORA-00202: control file:'/u/app/oracle/oradata/racdg/control02.ctl'

SQL> !pwd

/u/app/oracle/oradata/racdg

SQL> !cp control01.ctl control02.ctl

--或者:

SQL>alter system set control_files=’ /u/app/oracle/oradata/racdg/control01.ctl’scope=both; --不建议,因为这样一来就只剩一份控制文件了,起不到冗余作用,再此次发生丢失,恢复就变得麻烦了。

SQL> alter database mount;

Database altered.

使用ASM存放控制文件,其中一个控制文件损坏恢复演示SQL> show parameter control_files;

NAME                                        TYPE       VALUE

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

control_files                           string     +DATA/racdb/controlfile/current.256.935676497, +DATA/racdb/c

ontrolfile/current.478.957977179

SQL> shutdown abort;  --这里我是为了演示才直接关闭数据的,因为在线情况下asm的文件是不能删除的

ORACLE instance shut down.

SQL> !su - grid -c "asmcmd -p rm +DATA/racdb/controlfile/current.478.957977179"

Password:

SQL> startup nomount;  --将数据库启动到nomount状态

ORACLE instance started.

SQL> !rman target /  --这里使用rman来恢复,当然使用之前的两种方法拷贝和去除也是可以的

Recovery Manager: Release 11.2.0.4.0 -Production on Sat Oct 21 16:53:15 2017

Copyright (c) 1982, 2011, Oracle and/or itsaffiliates.  All rights reserved.

connected to target database: RACDB (notmounted)

RMAN> restore controlfile from'+DATA/racdb/controlfile/current.256.935676497';  --其实这里就是拷贝的方式

Starting restore at 2017/10/21 16:54:18

using target database control file insteadof recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=143 instance=racdb1device type=DISK

channel ORA_DISK_1: copied control filecopy

output filename=+DATA/racdb/controlfile/current.256.935676497

output filename=+DATA/racdb/controlfile/current.478.957977659

Finished restore at 2017/10/21 16:54:22

RMAN> sql 'alter database mount';

sql statement: alter database mount

released channel: ORA_DISK_1

说明一下,这里我分了文件系统和ASM存储存放控制文件的情况,其恢复原理都是一样的,无论是在线或者关闭数据库后损坏了其中部分控制文件,恢复方法都是一样的。

2.3所有的控制文件损坏,有备份场景

2.3.1通过rman备份控制文件进行完全恢复思路

A.若在线损坏,shutdown abort关闭数据库;若关闭数据库后损坏,到第二步

B. startup nomount启动数据库到nomount状态。

C.使用rman从备份中恢复控制文件:restorecontrolfile from '/path';

D. alter database mount;启动数据库到mount状态

E. recover database using backupcontrolfile until cancel;应用归档文件

F.再执行recover databaseusing backup controlfile;应用未归档的redo文件

G. alter database open resetlogs;以resetlogs的方式打开数据库

2.3.2通过rman备份控制文件进行完全恢复演示SQL> show parameter control_files;

NAME                                        TYPE                    VALUE

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

control_files                           string                   /u/app/oracle/oradata/racdg/control01.ctl,/u/app/oracle/ora

data/racdg/control02.ctl, /u/app/oracle/oradata/racdg/control03

.ctl

SQL> !rm control01.ctl control02.ctlcontrol03.ctl  --删除所有的控制文件,模拟控制文件丢失

SQL> shutdown abort; --强制关闭数据库

ORACLE instance shut down.

SQL> startup;      --启动数据到nomount状态

ORACLE instance started.

ORA-00205: error in identifying controlfile, check alert log for more info  --报错,同时查看告警日志,会发现所有控制文件都已经丢失。

SQL> !rman target /   --此前有做过RMAN控制文件备份,使用rman进行恢复

Recovery Manager: Release 11.2.0.4.0 -Production on Sat Oct 21 17:24:11 2017

Copyright (c) 1982, 2011, Oracle and/or itsaffiliates.  All rights reserved.

connected to target database: RACDG (notmounted)

RMAN> restore controlfile from'/u/app/oracle/zwdir/RACDG_20171021_0fshj32i_1_1.ctl'; --恢复控制文件

Starting restore at 2017/10/21 17:24:57

using target database control file insteadof recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=135 devicetype=DISK

channel ORA_DISK_1: restoring control file

channel ORA_DISK_1: restore complete,elapsed time: 00:00:03

output filename=/u/app/oracle/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值