美创科技技术社区

注册

 

发新话题 回复该主题

数据库文件被意外删除的恢复实验 [复制链接]

1#

从操作系统层面使用rm命令删除数据文件(*.dbf),操作得当是可以及时恢复的。

能够恢复的前提条件:

1.数据库开启归档模式

2.从被删除数据库表空间和数据文件创建开始至少的归档日志都存在(我在试验之时将第一次创建的测试表空间和数据文件的初始归档日志删除,导致最后无法顺利recover,重新创建表空间和数据文件才试验成功)

3.数据文件在被意外删除之后数据库没有被重启

本次试验操作系统是 red hat linux6版本的,数据库是11g

在数据库创建安装好之后进行如下步骤

1.检查数据库归档是否开启

archive log list;

2.开启归档(需要在mount状态下才能开启)

alter database archivelog;

3.查看归档路径和大小

show parameter db_recover

4.修改归档闪回恢复区

alter system set db_recovery_file_dest_size=4G;

5.修改归档路径

alter system set log_archive_dest_1='location=/oracle/archive';

6.打开数据库

alter database open;

7.创建测试数据文件test01.dbf,同时创建测试表空间和测试用户及授权

create tablespace test datafile '/oracle/data/test01.dbf'size 100M autoextend on;

create user test identified by oracle default tablespace test;

grant dba,connect,resource to test;

8.新建一些测试表导入到test用户中(我用的是个人的一些信息表)

create table kfxx1997 as select * from rjinfo.kfxx t where t.gender='F' and t.birthday>'1997%';

9.切换归档日志(此时/oracle/archive目录下面会产生归档文件)

alter system switch logfile;

10.删除test01.dbf文件(在我自己的/oracle/data目录下面)

rm  -rf  test01.dbf

11.进行相关的状态测试操作—-【可跳过的操作】

alter tablespace test read only;  【报错】

shutdown immediate 【报错】

select status from v$instance; 【可以正常运行】

12.强制关闭数据库

shutdown abort

13.把数据库启动到mount状态

startup mount;

14.重建被丢失的数据文件(在删除数据文件之前记得使用select * from v$datafile; 查询出test01.dbf的文件编号,我的本地编号是6 )

alter database create datafile 6

做完此部操作可以在/oracle/data目录下面看到被删除的test01.dbf文件已经被重建恢复了

15.通过归档日志和redo log对数据文件进行恢复(具体的datafile编号根据实际情况确认)—【必须】

recover datafile 6;

16.打开数据库

alter database open;

此时数据库已经成功恢复。可以查询数据是否正常。


很多时候会出现在最后recover的时候报错,基本都是归档日志有问题,我都一次因为将第一次切换生成的归档删除,导致无法恢复,最后使用命令删除test表空间和数据文件,再重新创建之后实验成功。并且经过反复测试都是可以顺利恢复的

分享 转发
TOP
发新话题 回复该主题