原文地址:http://www.itpub.net/thread-1044449-1-2.html

帖子中提到如下场景:Oracle on Linux的环境,在没有shutdown数据库的情况下误删数据文件system01.dbf。对于有完好rman备份或者Data Guard的情况下,神马都是浮云,但古语有云“屋漏偏逢连夜雨,船迟又遇打头风”,祸不单行的事情海了去,对于nobackup有什么好办法呢?

少说废话,直接上处理过程:

首先是模拟出这个囧境:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[ora11g@test06 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Thu Feb 10 15:43:36 2011
Copyright (c) 1982, 2010, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u02/oradata/ORCL/system01.dbf
/u02/oradata/ORCL/sysaux01.dbf
/u02/oradata/ORCL/undotbs01.dbf
/u02/oradata/ORCL/users01.dbf
SQL> !
[ora11g@test06 ~]$ ll /u02/oradata/ORCL/system01.dbf
-rw-r----- 1 ora11g oradba 765468672 Feb 10 15:44 /u02/oradata/ORCL/system01.dbf
[ora11g@test06 ~]$ rm -rf /u02/oradata/ORCL/system01.dbf
[ora11g@test06 ~]$ ll /u02/oradata/ORCL/system01.dbf                                              
ls: /u02/oradata/ORCL/system01.dbf: No such file or directory
[ora11g@test06 ~]$
SQL> connect scott/tiger
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-01116: error in opening database file 1
ORA-01110: data file 1: '/u02/oradata/ORCL/system01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Warning: You are no longer connected to ORACLE.

数据文件system01.dbf让俺“误”删了,有后悔药可以吃吗?

先找出 db writer 进程,该进程肯定会写数据文件的,也可以通过lsof命令找出打开system01.dbf的所有进程。

1
2
3
4
[ora11g@test06 ~]$ ps -ef | grep ora_db
ora11g   24861     1  0 Jan24 ?        00:00:00 ora_dbrm_ORA11G
ora11g   24867     1  0 Jan24 ?        00:00:28 ora_dbw0_ORA11G
ora11g   32637 32587  0 15:45 pts/3    00:00:00 grep ora_db

进程号是 24867

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[ora11g@test06 ~]$ cd /proc/24867/fd/
[ora11g@test06 fd]$ ll
total 0
lr-x------ 1 ora11g oradba 64 Feb 10 15:33 0 -> /dev/null
l-wx------ 1 ora11g oradba 64 Feb 10 15:33 1 -> /dev/null
lr-x------ 1 ora11g oradba 64 Feb 10 15:33 10 -> /u01/app/ora11g/product/11.2.0.2/db_1/rdbms/mesg/oraus.msb
lr-x------ 1 ora11g oradba 64 Feb 10 15:33 11 -> /proc/24867/fd
lr-x------ 1 ora11g oradba 64 Feb 10 15:33 12 -> /dev/zero
lr-x------ 1 ora11g oradba 64 Feb 10 15:33 13 -> /dev/zero
lrwx------ 1 ora11g oradba 64 Feb 10 15:33 14 -> /u01/app/ora11g/product/11.2.0.2/db_1/dbs/hc_ORA11G.dat
lr-x------ 1 ora11g oradba 64 Feb 10 15:33 15 -> /u01/app/ora11g/product/11.2.0.2/db_1/network/mesg/nlus.msb
l-wx------ 1 ora11g oradba 64 Feb 10 15:33 16 -> /u01/app/ora11g/product/11.2.0.2/db_1/network/log/sqlnet.log
lr-x------ 1 ora11g oradba 64 Feb 10 15:33 17 -> /dev/zero
lrwx------ 1 ora11g oradba 64 Feb 10 15:33 18 -> /u01/app/ora11g/product/11.2.0.2/db_1/dbs/hc_ORA11G.dat
lrwx------ 1 ora11g oradba 64 Feb 10 15:33 19 -> /u01/app/ora11g/product/11.2.0.2/db_1/dbs/lkORCL
l-wx------ 1 ora11g oradba 64 Feb 10 15:33 2 -> /dev/null
lr-x------ 1 ora11g oradba 64 Feb 10 15:33 22 -> /u01/app/ora11g/product/11.2.0.2/db_1/rdbms/mesg/oraus.msb
lrwx------ 1 ora11g oradba 64 Feb 10 15:33 256 -> /u02/oradata/ORCL/control01.ctl
lrwx------ 1 ora11g oradba 64 Feb 10 15:33 257 -> /u01/app/ora11g/fast_recovery_area/ORCL/control02.ctl
lrwx------ 1 ora11g oradba 64 Feb 10 15:33 258 -> /u02/oradata/ORCL/system01.dbf (deleted)
lrwx------ 1 ora11g oradba 64 Feb 10 15:33 259 -> /u02/oradata/ORCL/sysaux01.dbf
lrwx------ 1 ora11g oradba 64 Feb 10 15:33 260 -> /u02/oradata/ORCL/undotbs01.dbf
lrwx------ 1 ora11g oradba 64 Feb 10 15:33 261 -> /u02/oradata/ORCL/users01.dbf
lrwx------ 1 ora11g oradba 64 Feb 10 15:33 262 -> /u02/oradata/ORCL/temp01.dbf
lr-x------ 1 ora11g oradba 64 Feb 10 15:33 3 -> /dev/null
lr-x------ 1 ora11g oradba 64 Feb 10 15:33 4 -> /dev/null
lrwx------ 1 ora11g oradba 64 Feb 10 15:33 5 -> /u01/app/ora11g/product/11.2.0.2/db_1/dbs/hc_ORA11G.dat
lr-x------ 1 ora11g oradba 64 Feb 10 15:33 6 -> /dev/null
lr-x------ 1 ora11g oradba 64 Feb 10 15:33 7 -> /dev/null
lr-x------ 1 ora11g oradba 64 Feb 10 15:33 8 -> /dev/null
lr-x------ 1 ora11g oradba 64 Feb 10 15:33 9 -> /dev/null

可以看到 258 对应的文件是在闪烁的,并且有一个 (deleted) 标记符,先将这个文件复制到另外的目录:

1
2
[ora11g@test06 fd]$ cat 258 > /home/ora11g/system01.dbf
[ora11g@test06 fd]$ cp /home/ora11g/system01.dbf /u02/oradata/ORCL/system01.dbf

1
2
SQL> connect scott/tiger
Connected.

貌似没问题了,重启一下数据库看看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SQL> connect /  as sysdba
Connected.
SQL>
SQL>
SQL> shutdown immediate ;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup ;
ORACLE instance started.
Total System Global Area  534462464 bytes
Fixed Size                  2228200 bytes
Variable Size             394264600 bytes
Database Buffers          130023424 bytes
Redo Buffers                7946240 bytes
Database mounted.
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/u02/oradata/ORCL/system01.dbf'
SQL>  select OPEN_MODE from v$database;
OPEN_MODE
--------------------
MOUNTED

这个问题不大,system01.dbf相当于没有alter database begin backup那样进行了热备,recover 一下就好:

1
2
3
4
5
6
7
8
9
10
11
SQL> recover database ; 
Media recovery complete.
SQL> alter database open ;
Database altered.
SQL>  select OPEN_MODE from v$database;  
OPEN_MODE
--------------------
READ WRITE

搞定。

PS:添加自己的总结:

如果是生产库,没有办法重启的情况下如何进行数据恢复操作。(实际上就是更新一下数据文件头部的SCN号)

1. 首先需要将需要恢复的数据文件offline,
  alter database datafile file#(数据文件号) offline;
     2. 执行在线恢复并且online该数据文件。
    recover datafile file#
    alter database datafile file# online;
     3. 进行验证
    create table test tablespace 表空间(所在的数据文件)

利用Linux的特性恢复误删的数据文件相关推荐

  1. 如何利用MySQL的binlog恢复误删数据库详解

    文章来源: 学习通http://www.bdgxy.com/ 目录 1 查看当前数据库内容并备份数据库 2 开启bin_log功能 3 模拟误操作(插入3条数据,删除数据库) 4 数据恢复 5 总结 ...

  2. 文件误删怎么办?恢复误删的数据,就靠这4种方法

    现在是信息爆炸的时代,我们每天都会保存许多重要信息.这让我们的电脑保存了大量的文件.图片.视频等数据.为了保存电脑整洁,提高它的运行速度,我们必须要对它进行定期地清理.在清理的过程中,重要文件误删怎么 ...

  3. MySQL如何恢复误删的数据?

    本节目标 1.了解binlog日志 2.掌握如何恢复误删除的数据[重点] 什么是binlog日志 binlog日志的作用 1.在企业应用中,我们不是单台节点运行的,不会在一台服务器上装mysql来跑, ...

  4. origin修复中_从Word文档中的Origin图恢复误删的Origin文件数据的方法

    在平时工作中,由于不小心将原始的Origin文件删掉了或找不到了,万幸的是Word文件中还有一份图,如何恢复数据呢?本文就教大家一种从Word文档中的Origin图恢复误删的Origin文件数据的方法 ...

  5. Recuva—轻松恢复误删的数据

    https://www.ccleaner.com/recuva    Recuva-轻松恢复误删的数据 如果是文件已经删除才安,记得不在下载安装到丢失文件所在的分区 转载于:https://www.c ...

  6. 技术分享 | OceanBase 手滑误删了数据文件怎么办

    作者:张乾 外星人2号,现兼任六位喵星人的资深铲屎官. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源. 手滑误删了数据文件,并且没有可替换的节点时, ...

  7. Linux 系统中恢复已删除的文件

    注:文章内容仅用于本人日常学习记录 Linux 系统中恢复已删除的文件 当用户意外地删除了一个仍然需要的文件时,大多数情况下,是没有简便的方法可以重新找回或重建这个文件.不过,幸运的是文件是可以通过一 ...

  8. 利用linux的df和du命令查看文件和目录的内存占用

    版权声明:本文为博主原创文章,转载请超链接注明出处.    https://blog.csdn.net/ljc1026774829/article/details/74935658 当磁盘大小超过标准 ...

  9. 如何恢复手机删除数据文件

    如何恢复手机删除数据文件 随着现在手机功能的不断增强,人们对电脑的依赖性有所下降,不知道有多少朋友跟我一样.下班回家,都不会打开电脑,要想娱乐一下,一个手机和一个舒服的沙发就够了.再开电脑根本就是浪费 ...

最新文章

  1. 报告 | 2017年云商业智能市场分析:云计算比大数据更重要
  2. python 多进程 requests_python多进程(二)
  3. C语言 某班级有30名学生,要求从键盘输入每个学生的数学课程成绩(百分制),并进行以下处理
  4. LeetCode 23合并K个升序链表24两两交换链表中的节点
  5. java中改变字符串编码
  6. 云炬Android开发笔记 使用新版本Android studio快速Build低版本项目的仓库代码(标红部分)
  7. RAC RMAN 备份 RMAN-03009 ORA-19504 ORA-27040 RMAN-06012 channel c3 not allocated 错误分析
  8. VI-ORB环境配置
  9. Canvas制作排序算法演示动画
  10. 【今日头条】【抖音火山】前端开发实习生
  11. qtabwidget放大_Qt自定义弹窗屏蔽父窗口(QWidget设置setWindowModality(Qt::ApplicationModal);以后再show)...
  12. OpenCV:H1.type() == H2.type() H1.depth() == CV_32F
  13. HTML高仿哔哩哔哩(B站)视频网站整站模板
  14. iOS开发之跳转指定的tabbar控制器(二级页面跳转到指定的tabbar页面)
  15. 《架构探险——从零开始写javaweb框架》.pdf
  16. 用USBoot制作U盘启动盘
  17. [精简]托福核心词汇102
  18. 135编辑器中html使用方法,135编辑器使用小技巧 135编辑器特色功能使用技巧方法...
  19. 伟大的民族英雄赵充国
  20. 博雅数智|第四次直播|PageRank算法

热门文章

  1. Android实现自定义圆角边框渐变
  2. 活死人黎明 Dawn of the Dead
  3. 如何使用JW Player来播放Flash并隐藏控制按钮和自定义播放完成后执行的JS
  4. BUI+Spring+Mybatis
  5. 用Python删除电脑中的重复文件!竟然这么简单!
  6. 第三天:avoid_duplicate_name用法
  7. xm-select 二级联动 layui
  8. 构建RAID5磁盘阵列
  9. 将大写字母转换为小写字母(将该字符串中的大写字母转换成小写字母,之后返回新的字符串。)
  10. 怎样用最小代价实现双电源供电自动切换,希望压降在0.2V以内