普通数据文件丢失的恢复方法


普通数据文件是相对重要的数据文件system和undo来说的。并不是这些数据文件不重要,而是这些数据文件丢失可能不会使数据库实例崩溃。
使用RMAN恢复普通数据文件比较简单,通常是先将损坏的数据文件offline,然后执行restore数据文件,接下来执行recover数据文件,最后再将该数据文件online。

我们来看看下面的试验:

实验一,实例关闭状态下丢失了example01.dbf文件的恢复方式

1,当前数据库数据文件地址
select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u01/oradata/practice/system01.dbf
/u01/oradata/practice/sysaux01.dbf
/u01/oradata/practice/undotbs01.dbf
/u01/oradata/practice/users01.dbf
/u01/oradata/practice/example01.dbf

2,完全关闭数据库
shutdown immediate;

3,人为造成数据文件example01.dbf的丢失。使用mv的方式比rm更加安全些,建议使用。
[oracle@single ~]$ mv /u01/oradata/practice/example01.dbf /u01/oradata/practice/example01.dbf.bak

4,尝试启动实例,提示无法找到5号数据文件
startup;
ORACLE instance started.

Total System Global Area  580395008 bytes
Fixed Size                  2255392 bytes
Variable Size             406848992 bytes
Database Buffers          167772160 bytes
Redo Buffers                3518464 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/u01/oradata/practice/example01.dbf’

5,实例启动失败,但是当前处于mount状态。使用rman执行下列恢复步骤

RMAN> run{
2> sql 'alter database datafile 5 offline';
3> restore datafile 5;
4> recover datafile 5;
5> sql 'alter database datafile 5 online';
6> alter database open;
7> }

6,再一次登录sqlplus验证恢复是否成功
SYS@practice >col name for a40
SYS@practice >select name,status from v$datafile;

NAME                                     STATUS
---------------------------------------- -------
/u01/oradata/practice/system01.dbf       SYSTEM
/u01/oradata/practice/sysaux01.dbf       ONLINE
/u01/oradata/practice/undotbs01.dbf      ONLINE
/u01/oradata/practice/users01.dbf        ONLINE
/u01/oradata/practice/example01.dbf      ONLINE

实验二,实例运行状态下丢失了example01.dbf文件的恢复方式

1,承接刚才的试验,现在实例处于运行状态,手工删除example01.dbf
$ mv /u01/oradata/practice/example01.dbf /u01/oradata/practice/example01.dbf.bak2

2,查询属于example01.dbf数据文件中的数据,会提示找不到该数据文件
SYS@practice >select * from hr.employees;
select * from hr.employees
                 *
ERROR at line 1:
ORA-01116: error in opening database file 5
ORA-01110: data file 5: '/u01/oradata/practice/example01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

3,在线使用RMAN恢复数据文件

RMAN> run{
2> sql 'alter database datafile 5 offline';
3> restore datafile 5;
4> recover datafile 5;
5> sql 'alter database datafile 5 online';
6> }

4,检测恢复效果
SYS@practice >select count(*) from hr.employees;

  COUNT(*)
----------
       107

5,如果刚才丢失数据文件后触发了检查点alter system checkpoint就不会这么幸运了,实例会被abort。我们接着刚才的例子再次删除数据文件example01.dbf

mv /u01/oradata/practice/example01.dbf /u01/oradata/practice/example01.dbf.bak2

6,手工发起检查点事件,end of file on communication channel,直接失联。系统遭到了一次致命的恐怖袭击。

SYS@practice >alter system checkpoint;
alter system checkpoint
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 25239
Session ID: 38 Serial number: 3


SYS@practice >select open_mode from v$database;
ERROR:
ORA-03114: not connected to ORACLE


SYS@practice >!ps -ef | grep ora_
oracle   25692 25236  0 12:43 pts/3    00:00:00 /bin/bash -c ps -ef | grep ora_
oracle   25694 25692  0 12:43 pts/3    00:00:00 grep ora_

7,恢复方法很容易,和第一次执行的恢复方法基本相同。需要注意的是先启动实例到numount状态,将丢失的数据文件offline后迅速将实例启动,保证其它数据可以访问,然后在还原、恢复丢失的数据文件,最后将该数据文件online。与第一次操作的区别是,缩短了数据库open的时间。

RMAN> run{
2> startup mount;
3> sql 'alter database datafile 5 offline';
4> alter database open;
5> restore datafile 5;
6> recover datafile 5;
7> sql 'alter database datafile 5 online';
8> }

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

转载于:http://blog.itpub.net/29047826/viewspace-1290849/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值