`

恢复被rm意外删除数据文件

 
阅读更多

一.模拟数据文件删除

[oracle@node1 ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 11.2.0.3.0 Production on Sat Dec 31 22:00:52 2011
 
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
 
--数据库版本
Connected to :
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
 
--所有数据文件
SQL> select name from v$datafile;
 
NAME
--------------------------------------------------------------------------------
/opt/oracle/oradata/ora11g/system01.dbf
/opt/oracle/oradata/ora11g/sysaux01.dbf
/opt/oracle/oradata/ora11g/undotbs01.dbf
/opt/oracle/oradata/ora11g/users01.dbf
/opt/oracle/oradata/ora11g/example01.dbf
 
--删除example01.dbf数据文件
SQL> !rm /opt/oracle/oradata/ora11g/example01.dbf
 
SQL> !ls -l /opt/oracle/oradata/ora11g/example01.dbf
ls: /opt/oracle/oradata/ora11g/example01.dbf: 没有那个文件或目录
 
--因为数据文件被删除,创建表失败
SQL> create table t_xifenfei tablespace example
   as select * from dba_tables;
as select * from dba_tables
                  *
ERROR at line 2:
ORA-01116: error in opening database file 5
ORA-01110: data file 5: '/opt/oracle/oradata/ora11g/example01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
 
--被删除数据文件离线
SQL> alter database datafile 5 offline;
 
Database altered.

二.找回数据文件

--查找dbw进程spid
[oracle@node1 ~]$ ps -ef| grep dbw| grep - v grep
oracle   18387     1  0 Dec22 ?        00:00:12 ora_dbw0_ora11g
 
--查看该进程所有文件句柄
[oracle@node1 ~]$ ll /proc/18387/fd
总计 0
lr-x------ 1 oracle oinstall 64 12-31 22:03 0 -> /dev/null
l-wx------ 1 oracle oinstall 64 12-31 22:03 1 -> /dev/null
lr-x------ 1 oracle oinstall 64 12-31 22:03 10 -> /dev/zero
lr-x------ 1 oracle oinstall 64 12-31 22:03 11 -> /dev/zero
lr-x------ 1 oracle oinstall 64 12-31 22:03 12 -> /opt/oracle/product/11 .2.0 /db_1/rdbms/mesg/orazhs .msb
lrwx------ 1 oracle oinstall 64 12-31 22:03 13 -> /opt/oracle/product/11 .2.0 /db_1/dbs/hc_ora11g .dat
lr-x------ 1 oracle oinstall 64 12-31 22:03 14 -> /proc/18387/fd
lr-x------ 1 oracle oinstall 64 12-31 22:03 15 -> /dev/zero
lr-x------ 1 oracle oinstall 64 12-31 22:03 16 -> /opt/oracle/product/11 .2.0 /db_1/rdbms/mesg/oraus .msb
lrwx------ 1 oracle oinstall 64 12-31 22:03 17 -> /opt/oracle/product/11 .2.0 /db_1/dbs/hc_ora11g .dat
lrwx------ 1 oracle oinstall 64 12-31 22:03 18 -> /opt/oracle/product/11 .2.0 /db_1/dbs/lkORA11G
lr-x------ 1 oracle oinstall 64 12-31 22:03 19 -> /opt/oracle/product/11 .2.0 /db_1/rdbms/mesg/orazhs .msb
l-wx------ 1 oracle oinstall 64 12-31 22:03 2 -> /dev/null
lr-x------ 1 oracle oinstall 64 12-31 22:03 20 -> /opt/oracle/product/11 .2.0 /db_1/rdbms/mesg/oraus .msb
lrwx------ 1 oracle oinstall 64 12-31 22:03 21 -> socket:[441562]
lrwx------ 1 oracle oinstall 64 12-31 22:03 256 -> /opt/oracle/oradata/ora11g/control01 .ctl
lrwx------ 1 oracle oinstall 64 12-31 22:03 257 -> /opt/oracle/oradata/ora11g/system01 .dbf
lrwx------ 1 oracle oinstall 64 12-31 22:03 258 -> /opt/oracle/oradata/ora11g/sysaux01 .dbf
lrwx------ 1 oracle oinstall 64 12-31 22:03 259 -> /opt/oracle/oradata/ora11g/undotbs01 .dbf
lrwx------ 1 oracle oinstall 64 12-31 22:03 260 -> /opt/oracle/oradata/ora11g/users01 .dbf
lrwx------ 1 oracle oinstall 64 12-31 22:03 261 -> /opt/oracle/oradata/ora11g/example01 .dbf (deleted)
lrwx------ 1 oracle oinstall 64 12-31 22:03 262 -> /opt/oracle/oradata/ora11g/temp01 .dbf
lr-x------ 1 oracle oinstall 64 12-31 22:03 3 -> /dev/null
lr-x------ 1 oracle oinstall 64 12-31 22:03 4 -> /dev/null
lrwx------ 1 oracle oinstall 64 12-31 22:03 5 -> /opt/oracle/product/11 .2.0 /db_1/dbs/hc_ora11g .dat
lr-x------ 1 oracle oinstall 64 12-31 22:03 6 -> /dev/null
lr-x------ 1 oracle oinstall 64 12-31 22:03 7 -> /dev/null
lr-x------ 1 oracle oinstall 64 12-31 22:03 8 -> /dev/null
lr-x------ 1 oracle oinstall 64 12-31 22:03 9 -> /dev/null
--通过句柄恢复数据文件[被删除数据文件会被标示(deleted)]
[oracle@node1 ~]$ cp /proc/18387/fd/261 /opt/oracle/oradata/ora11g/example01 .dbf
--确认该数据文件已经恢复成功
[oracle@node1 ~]$ ll /opt/oracle/oradata/ora11g/example01 .dbf
-rw-r----- 1 oracle oinstall 362422272 12-31 22:05 /opt/oracle/oradata/ora11g/example01 .dbf

三.数据文件online

--恢复数据文件
SQL> recover datafile 5;
Media recovery complete.
 
--数据文件online
SQL> alter database datafile 5 online;
 
Database altered.
 
--创建表测试
SQL> create table t_xifenfei tablespace example
   as select * from dba_tables;
 
Table created.

四.补充说明
在意外使用os命令删除掉数据文件时,千万不要慌张重启数据库或者操作系统,可以通过dbwn进程相关句柄找回数据文件

 

如果是unix系统,可能需要先通过lsof找到句柄,然后通过cp实现

[root@node1 ~] # lsof -p 18387 |grep deleted
oracle  18387 oracle  261uW  REG    8,6 362422272   13598733 /opt/oracle/oradata/ora11g/example01 .dbf (deleted)
cd /proc/18387 /fd/
cp 261 /opt/oracle/oradata/ora11g/example01 .dbf
分享到:
评论

相关推荐

    误删除文件恢复,绝对可以使用

    7. **数据备份**:恢复成功后,记住及时备份这些重要文件,防止再次意外删除或硬件故障。 需要注意的是,不是所有删除的文件都能成功恢复,尤其是如果硬盘空间已被新的数据覆盖,那么文件恢复就无法实现了。此外,...

    Oracle 11g数据恢复向导恢复数据文件

    - 完成上述步骤后,应该验证数据文件是否已经被成功恢复。可以通过查询相关的表来测试数据的完整性。 #### 四、注意事项 - 在执行任何恢复操作之前,强烈建议备份现有的数据库文件,以防意外情况的发生。 - 使用...

    linux下恢复被删除的文件.zip

    2. **extundelete**:这是另一个强大的开源工具,专为ext3和ext4设计,用于恢复意外删除的文件。其原理与ext3grep类似,但提供了更友好的交互界面和更多的选项。 - 安装extundelete:`sudo apt-get install ...

    记录服务器rm -rf误删文件的恢复过程

    首先,当意外执行rm -rf命令导致文件被删除时,如果文件系统是ext3,可以使用ext3grep工具进行数据恢复。ext3grep能够扫描文件系统,恢复通过rm删除的文件。使用ext3grep之前,确保已经将包含被删文件的磁盘分区卸载...

    删除文件找回 超好用

    在Windows系统中,如果这些文件被意外删除,可以使用类似上述的Windows文件恢复方法。不过,由于文件的特殊性质(exe文件),在尝试恢复之前应确保它们不是恶意软件,以保障系统的安全。 总的来说,了解如何找回...

    shell中反向删除文件

    在shell中,使用`rm -i`可以交互式地确认每个文件的删除,而`rm -f`则会强制删除,即使文件被锁定或者有其他权限问题也会尝试删除。然而,这些命令都不会提供撤销删除的功能。 当用户意外执行了`rm`命令后,以下是...

    safe-rm.rar

    为了解决这个问题,社区开发了一个名为`safe-rm`的实用程序,它作为一个安全的替代品,增加了额外的安全层,防止用户意外删除重要文件。 `safe-rm`的核心功能是提供一个更为谨慎的删除过程,它有以下几个关键特性:...

    safe-rm-0.12.tgz

    此外,它还具备回收站功能,被删除的文件不会立即被永久移除,而是移动到一个特定的回收站目录,用户可以在之后检查并恢复误删的文件。这对于那些没有启用`回收站`或` Trash`功能的文件系统(如ext3、ext4)来说尤其...

    rm.rar_linux rm_rm_rm -i的用处_rm-i和rm-r

    这种模式对于避免意外删除是有帮助的,尤其是在处理大量文件或不确定文件重要性时。 `rm -r`(递归模式)则用于删除目录及其包含的所有文件和子目录。当你需要清除整个目录结构时,`rm -r`是必不可少的。例如,`rm ...

    把文件删除到回收站中

    它的存在主要是为了防止用户意外删除重要文件。在Windows系统中,回收站通常在桌面的左上角有一个小垃圾桶的图标。当文件被删除时,它们会被移动到回收站,而不是永久性地从硬盘上抹去。用户可以在回收站中查看这些...

    记linux下rm误删bin文件的解决方式.docx

    在Linux操作系统中,`rm`命令是一个非常强大的工具,用于删除文件或目录。然而,如果不小心使用了错误的参数或语法,可能会导致严重的问题,比如...另外,定期备份你的系统和重要数据,以便在发生意外时可以快速恢复。

    服务器误删文件的恢复过程.docx

    尽管存在一些疑问(例如为什么正在运行中的MySQL数据库文件可以被删除),但当前的重点是数据恢复。 考虑到最近的备份文件存在问题,仅有的可用备份文件仅有1KB大小,并且包含了无效的mysqldump注释。此外,最近的...

    MAC苹果机数据恢复软件DoYourData Recovery Pro 5.5 for Mac

    1. **误删除恢复**:当用户意外删除了重要文件,而清空了废纸篓或使用`rm`命令永久删除时,DoYourData可以扫描磁盘,找到被标记为已删除但实际上尚未覆盖的数据并进行恢复。 2. **格式化恢复**:如果硬盘、SD卡或...

    Linux-ETX3-system-delete-ex.rar_文件系统

    在Linux ETX3系统中,如果意外删除了重要文件,有几种可能的恢复策略: 1. **回收站**:某些Linux桌面环境如Gnome、KDE提供了回收站功能,删除的文件会被移动到特定的隐藏目录,可以在此找回。 2. **undelete工具**...

    Linux 删除文件命令使用说明

    - `-f`:强制删除,即使文件被锁定或设置为只读也会删除。 - `-r` 或 `-R`:递归处理,用于删除目录及其下的所有文件和子目录。 - `-v`:详细模式,显示正在删除的文件。 例如,要删除一个名为`example.txt`的文件...

    linux强制删除文件教程

    要强制删除一个文件,可以在 `rm` 命令后加上 `-f` 参数,表示 "force",这样即使文件被锁定或正在使用,也能被删除。例如,要删除 `/var/log/httpd/access.log` 文件,可以输入: ``` rm -f /var/log/httpd/...

    1-4-文件系统的管理方法和xfs文件系统备份恢复-随堂笔记1

    - `/tmp`和`/var/tmp`:临时文件存储目录,具有特殊的权限设置,防止意外删除。 文件管理涉及创建、复制、移动和删除文件。例如,`mkdir`用于创建目录,`touch`用于创建文件,`cp`用于复制文件或目录,`mv`用于移动...

    删除文件整个目录

    意外删除可能会导致数据丢失,难以恢复。 - **权限问题**:如果没有足够的权限,可能无法删除某些目录。此时需要管理员权限才能执行删除操作。 - **网络共享**:如果目录是网络共享的,删除可能会影响其他用户访问...

Global site tag (gtag.js) - Google Analytics