环境:RHEL 5.4 + Oracle 11.2.0.3

背景:数据库没有备份,数据库文件被误操作rm,此时数据库尚未关闭,也就是对应句柄存在,如何快速恢复?

1.某个普通数据文件被删除

**1.1 模拟5号数据文件被rm误删除**

SQL> select name, open_mode from v$database;

NAME      OPEN_MODE
--------- --------------------
PROD2 READ WRITE SQL> col name for a55
SQL> select file#, name from v$datafile; FILE# NAME
---------- -------------------------------------------------------
1 /u03/oradata/PROD2/system01.dbf
2 /u03/oradata/PROD2/sysaux01.dbf
3 /u03/oradata/PROD2/undotbs01.dbf
4 /u03/oradata/PROD2/users01.dbf
5 /u03/oradata/PROD2/example01.dbf SQL> !ls -lrth /u03/oradata/PROD2/example01.dbf
-rw-r----- 1 oracle oinstall 346M May 20 10:58 /u03/oradata/PROD2/example01.dbf SQL> !rm /u03/oradata/PROD2/example01.dbf SQL> !ls -lrth /u03/oradata/PROD2/example01.dbf
ls: /u03/oradata/PROD2/example01.dbf: No such file or directory SQL> exit

1.2 依据句柄号拷贝恢复5号数据文件

[oracle@edbjr2p2 PROD2]$ pwd
/u03/oradata/PROD2
[oracle@edbjr2p2 PROD2]$ ls -lrth
total 1.7G
-rw-r----- 1 oracle oinstall 21M May 20 02:50 temp01.dbf
-rw-r----- 1 oracle oinstall 5.1M May 20 10:58 users01.dbf
-rw-r----- 1 oracle oinstall 51M May 20 10:58 redo03.log
-rw-r----- 1 oracle oinstall 51M May 20 10:58 redo01.log
-rw-r----- 1 oracle oinstall 91M May 20 15:34 undotbs01.dbf
-rw-r----- 1 oracle oinstall 731M May 20 15:34 system01.dbf
-rw-r----- 1 oracle oinstall 751M May 20 15:34 sysaux01.dbf
-rw-r----- 1 oracle oinstall 51M May 20 15:38 redo02.log
-rw-r----- 1 oracle oinstall 9.3M May 20 15:38 control01.ctl
[oracle@edbjr2p2 PROD2]$ ps -ef|grep dbw0_PROD2|grep -v grep
oracle 28526 1 0 10:58 ? 00:00:01 ora_dbw0_PROD2
[oracle@edbjr2p2 PROD2]$ cd /proc/28526/fd/
[oracle@edbjr2p2 fd]$ ls -lrth|grep deleted
lrwx------ 1 oracle oinstall 64 May 20 15:39 261 -> /u03/oradata/PROD2/example01.dbf (deleted)
[oracle@edbjr2p2 fd]$ cp 261 /u03/oradata/PROD2/example01.dbf

恢复之后,数据库没有发现有异常报错,继续进行操作或重启库都没有问题。

2.所有数据文件被删除

如果是所有数据文件被删除,恢复的方法和上面一样,但测试这种情况一般还需要特殊处理后才可以开库。
比如我这里的实验遇到了2个错误:
- ORA-600 [kcratr_scan_lastbwr] (文档 ID 1267231.1)
- ORA-600 [3020] "Stuck Recovery" (文档 ID 30866.1)

具体现象如下:

SQL> select file#, checkpoint_change# from v$datafile
2 ; FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 2150244
2 2150244
3 2150244
4 2150244
5 2150244 SQL> select file#, checkpoint_change# from v$datafile_header; FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 2150244
2 2150244
3 2150244
4 2150244
5 2150244 SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [kcratr_scan_lastbwr], [], [], [],
[], [], [], [], [], [], [], [] SQL> recover database;
ORA-00600: internal error code, arguments: [3020], [3], [2070], [12584982], [],
[], [], [], [], [], [], []
ORA-10567: Redo is inconsistent with data block (file# 3, block# 2070, file
offset is 16957440 bytes)
ORA-10564: tablespace UNDOTBS1
ORA-01110: data file 3: '/u03/oradata/PROD2/undotbs01.dbf'
ORA-10560: block type 'KTU UNDO BLOCK' RMAN> recover database until scn 2150244; Starting recover at 20-MAY-19
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=10 device type=DISK starting media recovery
Oracle Error:
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u03/oradata/PROD2/system01.dbf' media recovery complete, elapsed time: 00:00:01 Finished recover at 20-MAY-19 RMAN>
SQL> select file#, checkpoint_change# from v$datafile; FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 2150244
2 2150244
3 2150244
4 2150244
5 2150244 SQL> select file#, checkpoint_change# from v$datafile_header; FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 2150244
2 2150244
3 2150244
4 2150244
5 2150244 SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u03/oradata/PROD2/system01.dbf'

此时尝试设置隐藏参数:

_allow_resetlogs_corruption=true

再次尝试成功开库:

SQL> alter database open resetlogs;

Database altered.

实验Oracle数据文件被误删除的场景恢复的更多相关文章

  1. oracle rm -fr datafile 数据文件被误删的场景恢复(没有rman备份)

    环境: Linux release 7.5 oracle19c (无pdb,从11.2.0.4升级上去的) 一:单个非系统表空间的数据文件被删除 我先备份一下,虽然是测试环境. [oracle@19c ...

  2. Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据

    Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据 PRM 全称为ParnassusData Recovery Manager ,由 诗檀软 ...

  3. 收缩Oracle数据文件

    最近有网友提到收缩Oracle数据文件的问题,这是DBA经常碰到的一个常见问题.通常我们需要收缩相应的数据文件以减少来自磁盘空间的压力以及提高数据库的整体性能.但这并非对于所有情形都是适用的,尤其是生 ...

  4. 数据文件个数大于1024时ORACLE数据文件FILE_ID及RELATIVE_FNO的变化示例

    通过ROWID计算数据块的相关信息:  --详见: 数据文件头块保留大小.ROWID.数据文件最大大小等数据库限制的说明 根据small file tablespace的ROWID,计算出表空间.数据 ...

  5. oracle数据文件不小心被删除,导致对应的表空间删不掉的处理方法

    问题现象:数据文件被无意删除,导致数据库表空间无法删除,并且重新刷表空间提示表空间已经存在:解决方法:1.oracle用户登录服务器,使用sysdba连接数据库 >sqlplus / as sy ...

  6. Oracle数据文件在open状态被删除的恢复记录

    1.查看当前状态: SQL> select status from v$instance; STATUS------------OPEN SQL> show parameter name; ...

  7. 批量迁移Oracle数据文件,日志文件及控制文件

    有些时候需要将Oracle的多个数据文件以及日志文件重定位或者迁移到新的分区或新的位置,比如磁盘空间不足,或因为特殊需求.对于这种情形可以采取批量迁移的方式将多个数据文件或者日志文件实现一次性迁移.当 ...

  8. Oracle 数据文件 reuse 属性 说明(转载)

    Oracle 表空间 创建参数 说明 http://blog.csdn.net/tianlesoftware/archive/2011/01/27/6166928.aspx 当我们对表空间添加数据文件 ...

  9. Oracle 数据文件迁移

    背景 这两天做一个oracle数据库迁移,以前都是用exp.imp来走,这次用到了expdp.impdp,的确有些优势,但同时又想起了只是拷贝数据文件迁移的方式,其实这个方式不常用做迁移,更多用在磁盘 ...

随机推荐

  1. 个人永久性免费-Excel催化剂功能第87波-将批量发送邮件做到极致化,需借力Outlook

    在过往的功能中,已经实现过批量发送邮件的功能,但收到的反馈是部分企业邮箱不能用,原因是无解的,因为程序员能找到的公开的类库只能实现一些通用性的场景,太复杂的企业环境可能会失灵.近期认真来学习Outlo ...

  2. JS浅学

    (变量的名字.focus(); )让打开的新的页面获取焦点 (变量的名字.close();)关闭打开的页面 可以用(!变量名)直接判断是否打开过新的页面 用(变量名.closed)判断是不是被关闭了 ...

  3. 如何在Eclipse中查看Java类库的源代码

    你的JDK安装目录下%Java_home%/src.zip文件就是源码,解压缩找到对应包下面的类即可. 如果是Eclipse开发,ctr+鼠标左击,出现不了源码的话,在弹出的视图中点击attach s ...

  4. liunx软件安装与网络管理和远程访问

    三.软件安装1.RPM包管理器进行软件安装 语法:rpm[选项][软件包] -i 安装一个以前从来未安装过的软件包 -v 将安装过程打印在屏幕上 -h 以字符“#”显示安装进度条 rpm -q[软件包 ...

  5. Node + js实现大文件分片上传基本原理及实践(一)

    _ 阅读目录 一:什么是分片上传? 二:理解Blob对象中的slice方法对文件进行分割及其他知识点 三. 使用 spark-md5 生成 md5文件 四. 使用koa+js实现大文件分片上传实践 回 ...

  6. dedecms新建内容模型“把数据保存到数据库附加表时出错‘xxx’出错”错误的原因分析和解决方案(转)

    把数据保存到数据库附加表 `bc_addonarticle17` 时出错,请把相关信息提交给DedeCms官方.INSERT INTO `bc_addonarticle17`(aid,typeid,r ...

  7. css常用知识与用法

    1 类选择器就是再 某一个标签后面加上class  =“”     然后再到前面去定义这个class   一定要记住前面加. 2 id选择器和类选择器是差不多的   不过id选择器前面不加.而加#   ...

  8. 剖析std::function接口与实现

    目录 前言 一.std::function的原理与接口 1.1 std::function是函数包装器 1.2 C++注重运行时效率 1.3 用函数指针实现多态 1.4 std::function的接 ...

  9. ASP.NET Core on K8S深入学习(2)部署过程解析与Dashboard

    上一篇<K8S集群部署>中搭建好了一个最小化的K8S集群,这一篇我们来部署一个ASP.NET Core WebAPI项目来介绍一下整个部署过程的运行机制,然后部署一下Dashboard,完 ...

  10. 10个常用的linux的命令

    以下就是今天我们要介绍的Linux命令:  man  touch, cat and less  sort and grep  cut  sed  tar  find  diff  uniq  chmo ...