控制文件丢失后,进行数据库恢复的过程

控制文件一般在一个数据库中有多了,当一个损坏的时候,我们一般直接shutdown abort数据库然后将尚正常的一个复制到损坏的位置就OK,当全部损坏的时候,如果备份了控制文件还好,如果控制文件没有备份就比较悲催了。下面的例子演示了当丢失了全部数据库文件后进行数据库恢复的过程。

1.用rman备份数据库

rman>backup database;

2.建一个表,插入几条数据

sql>create table test1(id number,name varchar(10));
sql>insert into test1 values(1,'aa');
sql>insert into test1 values(2,'bb');
sql>commit;

2.删除控制文件

用下面的命令查出控制文件的所有位置   
sql>show parameter control_files 

删除控制,如果在win系统下,需要shutdown abort 关闭数据库才允许被删除,如果是在Linux环境下,自己rm删除就OK了。

3.继续进行写入业务,会提示报错

windows下进行智能通过startup命令来直接启动数据库,启动报错发现控制文件缺失;Linux/UNIX环境下可能不需要关闭在启动数据库,有业务发生的时候就会报错。

4.关闭数据库,启动到nomount状态

5.通过rman恢复控制文件

C:\app\oracle\product\12.1.0\dbhome_1\BIN>rman target /

恢复管理器: Release 12.1.0.2.0 - Production on 星期二 1月 5 19:59:25 2016

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

已连接到目标数据库: CYANG (未装载)

RMAN> restore controlfile from autobackup;

启动 restore 于 2016-01-05 19:59:56
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=355 设备类型=DISK

恢复区目标: C:\app\oracle\fast_recovery_area
用于搜索的数据库名 (或数据库的唯一名称): CYANG
通道 ORA_DISK_1: 在恢复区中找到 AUTOBACKUP C:\APP\ORACLE\FAST_RECOVERY_AREA\CYANG\AUTOBACKUP\2016_01_05\O1_MF_S_900357995_C8QB3CFN_.BKP
由于未设置 DBID 而未尝试使用格式 "%F" 搜索 AUTOBACKUP
通道 ORA_DISK_1: 正在从 AUTOBACKUP C:\APP\ORACLE\FAST_RECOVERY_AREA\CYANG\AUTOBACKUP\2016_01_05\O1_MF_S_900357995_C8QB3CFN_.BKP 还原控制文件
通道 ORA_DISK_1: 从 AUTOBACKUP 还原控制文件已完成
输出文件名=C:\APP\ORACLE\ORADATA\CYANG\CONTROLFILE\O1_MF_BYCM08MV_.CTL
输出文件名=C:\APP\ORACLE\FAST_RECOVERY_AREA\CYANG\CONTROLFILE\O1_MF_BYCM08PY_.CTL
完成 restore 于 2016-01-05 19:59:59

RMAN> alter database mount;

已处理语句
释放的通道: ORA_DISK_1

RMAN> alter database open;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: sql statement 命令 (在 01/05/2016 20:00:36 上) 失败
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

RMAN>

6.进行恢复

此时打开数据库会提示要进行resetlogs或者noresetlogs恢复,使用这些选项后又提示需要介质恢复,执行recover database,又提示需要进行 BACKUP CONTROLFILE 的恢复。

执行sql> recover database using backup controlfile; 提示需要归档目录中的某个归档日志,但是归档日志中又没有该日志,应该利用联机日志进行恢复,可以输入联机重演日志的绝对路径+联机重演日志名来进行逐个尝试恢复。介质恢复成功后,进行reset logs打开就OK了。


sys@CYANG> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项


sys@CYANG> alter database open noresetlogs;
alter database open noresetlogs
*
第 1 行出现错误:
ORA-01588: 要打开数据库则必须使用 RESETLOGS 选项


sys@CYANG> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-01113: 文件 1 需要介质恢复
ORA-01110: 数据文件 1: 'C:\APP\ORACLE\ORADATA\CYANG\DATAFILE\O1_MF_SYSTEM_BYCLTN26_.DBF'


sys@CYANG> recover database;
ORA-00283: 恢复会话因错误而取消
ORA-01610: 使用 BACKUP CONTROLFILE 选项的恢复必须已完成


sys@CYANG> recover database using backup controlfile;
ORA-00279: 更改 5071878 (在 01/05/2016 19:25:57 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\APP\ORACLE\FAST_RECOVERY_AREA\CYANG\ARCHIVELOG\2016_01_05\O1_MF_1_7_%U_.ARC
ORA-00280: 更改 5071878 (用于线程 1) 在序列 #7 中


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
C:\app\oracle\oradata\CYANG\ONLINELOG\O1_MF_1_BYCM0F07_.LOG
已应用的日志。
完成介质恢复。
sys@CYANG> alter database open noresetlogs;
alter database open noresetlogs
*
第 1 行出现错误:
ORA-01588: 要打开数据库则必须使用 RESETLOGS 选项


sys@CYANG> alter database open resetlogs;

数据库已更改。

sys@CYANG> conn sys/dbPass00@localhost/pyang1 as sysdba
已连接。
idle> select * from test;
select * from test
              *
第 1 行出现错误:
ORA-01219: 数据库或可插入数据库未打开: 仅允许在固定表或视图中查询


idle> startup
插接式数据库已打开。
idle> select * from test1;

        ID NAME
---------- ----------------------
         1 aa
         2 bb

idle> exit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贤时间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值