误删Oracle数据文件的恢复方法

简介: 今天尝试了一下,在Linux下删除一个数据文件,然后进行回复。 环境:数据库在Open的状态,然后rm -rf users.dbf (删除users表空间),最后找回users.dbf文件。

今天尝试了一下,在Linux下删除一个数据文件,然后进行回复。

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

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

下面进行演示:

删除users表空间.

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

 

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

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

3、确认dbwr进程PID

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

一个为prod,另一个为oms。

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

cd /prod/PID/fd

此处,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命令:

至此,回复完成!

 

7、测试

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

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

目录
相关文章
|
2月前
|
SQL Oracle 关系型数据库
Oracle 将表中的数据查出更改某一字段的值后再插入该表
Oracle 将表中的数据查出更改某一字段的值后再插入该表
32 2
|
2月前
|
存储 Oracle NoSQL
Oracle 表空间、数据文件、schema的关系
Oracle 表空间、数据文件、schema的关系
32 2
|
2月前
|
SQL Oracle 关系型数据库
Oracle查询优化-查询只包含数字或字母的数据
【2月更文挑战第4天】【2月更文挑战第10篇】查询只包含数字或字母的数据
86 1
|
30天前
|
XML Java 数据库连接
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
10 0
|
3月前
|
Oracle 关系型数据库
Oracle查询优化-从表中随机返回N条数据
【1月更文挑战第2天】【1月更文挑战第5篇】有些场景需要抽验数据,例如为了防止做假或者抽检行为,就需要随机抽查。
42 0
|
4月前
|
SQL Oracle 关系型数据库
Oracle之如何限制字段内数据的录入
Oracle之如何限制字段内数据的录入
42 0
|
4月前
|
SQL Oracle 关系型数据库
Oracle之如何从表中随机取出一些数据
Oracle之如何从表中随机取出一些数据
65 0
|
3月前
|
Oracle 关系型数据库 数据库
Oracle查询优化-复制表的定义及数据
【1月更文挑战第5天】【1月更文挑战第14篇】在Oracle数据库中,复制表定义和复制表数据是两个常见的操作。
51 1
|
3月前
|
Oracle 关系型数据库 Java
这个错误是由于在尝试从 Oracle 数据库的 socket 中读取数据时,没有更多的数据可供读取
这个错误是由于在尝试从 Oracle 数据库的 socket 中读取数据时,没有更多的数据可供读取
50 2
|
1月前
|
SQL Oracle 关系型数据库
Oracle insert数据时字符串中有‘单引号问题
Oracle insert数据时字符串中有‘单引号问题