热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

oracle恢复sql文件,SQL误删Oracle数据文件的恢复方法

环境:数据库在Open的状态,然后rm-rfusers.dbf(删除users表空间),最后找回users.dbf文件。在回复的时候&#x

环境:数据库在Open的状态,然后rm -rf users.dbf (删除users表空间),最后找回users.dbf文件。

在回复的时候,回复的方法跟数据库的版本关系不大(因为是物理文件),只是跟操作系统有一定的关系,如:Red hat Linux  , Solaris Linux 等等。

下面进行演示:

删除users表空间.

1、我们首先进入Sqlplus,然后执行SQL语句:

select name from v$datafile;

NAME

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

/u01/app/oracle/oradata/prod/disk4/system01.dbf

/u01/app/oracle/oradata/prod/disk2/undotbs01.dbf

/u01/app/oracle/oradata/prod/disk5/sysaux01.dbf

/u01/app/oracle/oradata/prod/disk5/bigtbs01.dbf

/u01/app/oracle/oradata/prod/disk5/indx01.dbf

/u01/app/oracle/oradata/prod/disk2/users01.dbf

/u01/app/oracle/oradata/prod/disk3/oltp01.dbf

7 rows selected.

SQL> !rm /u01/app/oracle/oradata/prod/disk2/users01.dbf今天尝试了一下,在Linux下删除一个数据文件,然后进行回复。

72160175_1.png

2、此时,users表空间已经被删除了,我们已经无法在users表空间上建立表了。

尝试在users表空间上建立名字为abcd123的表,已经没法建立了。

SQL> create table abcd123 tablespace users as select * from v$instance;

create table abcd123 tablespace users as select * from v$instance

*

ERROR at line 1:

ORA-01116: error in opening database file 6

ORA-01110: data file 6: '/u01/app/oracle/oradata/prod/disk2/users01.dbf'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3

72160175_2.png

3、确认dbwr进程PID

通过命令,我们可以看到当前数据库实例的dbwr的PID。因为我同一台主机上有两个实例,故有2个。

一个为prod,另一个为oms。

$ ps -ef|grep dbw0|grep -v grep

oracle   11872     1  0 21:46 ?        00:00:00 ora_dbw0_prod

oracle   11951     1  0 21:47 ?        00:00:01 ora_dbw0_oms

72160175_3.png

4、因为dbwr会打开所有数据文件的句柄。所以可以进入proc目录进行查找,格式为:

cd /prod/PID/fd

我们可以清楚的看到 /u01/app/oracle/oradata/prod/disk2/users01.dbf (deleted) 的字样,表示此文件已经被删掉了。

5、进行恢复

通过cp命令,把语句柄拷贝回原来的位置。

cp 24 /u01/app/oracle/oradata/prod/disk2/users01.dbf

此处的24为其给出的编号。

6、进入recovery

执行以下SQL命令:

SQL>  alter database datafile 6 offline;

Database altered.

SQL> recover datafile 6;

Media recovery complete.

SQL> alter database datafile 6 online;

Database altered.

SQL>

72160175_5.png

至此,回复完成!

7、测试

我们重新尝试在users 表空间上建立一个table

SQL> create table abcd123 tablespace users as select * from v$instance;

Table created.

SQL> select * from abcd123;

INSTANCE_NUMBER INSTANCE_NAME

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

HOST_NAME

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

VERSION           STARTUP_T STATUS       PAR    THREAD# ARCHIVE LOG_SWITCH_WAIT

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

LOGINS     SHU DATABASE_STATUS   INSTANCE_ROLE      ACTIVE_ST BLO

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

1 prod

prod

10.2.0.1.0        16-APR-12 OPEN         NO           1 STARTED

ALLOWED    NO  ACTIVE            PRIMARY_INSTANCE   NORMAL    NO

SQL>

72160175_6.png

我们可以发现,建立成功了,说明回复成功,



推荐阅读
author-avatar
皇家城市_579
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有