前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >rm -rf误操作删除了数据文件后如何快速恢复?

rm -rf误操作删除了数据文件后如何快速恢复?

作者头像
AiDBA宝典
发布2019-09-30 17:19:10
5.6K0
发布2019-09-30 17:19:10
举报
文章被收录于专栏:小麦苗的DB宝专栏

Q

题目

rm -rf误操作删除了数据文件后如何快速恢复?

A

答案

如果执行了rm -rf操作删除了所有的基于FS的数据文件,但是数据库还处于OPEN状态,那么,在这种情况下如何快速地恢复数据库呢?这里的前提条件是没有任何可用的RMAN备份、数据库冷备份等,也就是说,没有任何备份。在这种情况下可以通过系统的文件句柄号来恢复数据文件。整个恢复过程可以简单分为如下几步:

(1)找到被删除文件的文件句柄所在的目录

首先通过命令“ps -ef|grep ora_lgwr”找到LGWR的进程号。假设这里的进程号为31863,则被删除的文件句柄在/proc/31863/fd目录下。

(2)采用操作系统cp命令拷贝文件句柄到原数据库文件路径

假设这里看到的是如下的情况,被删除的文件末尾一般都有deleted标识。

代码语言:javascript
复制
[root@orclalhr fd]# ll | grep deleted
lrwx------ 1 oracle oinstall 64 May  5 14:48 256 -> /u02/app/oracle/oradata/oratest/control01.ctl (deleted)
lrwx------ 1 oracle oinstall 64 May  5 14:48 257 -> /u02/app/oracle/flash_recovery_area/oratest/control02.ctl (deleted)
lrwx------ 1 oracle oinstall 64 May  5 14:48 258 -> /u02/app/oracle/oradata/oratest/redo01.log (deleted)
lrwx------ 1 oracle oinstall 64 May  5 14:48 259 -> /u02/app/oracle/oradata/oratest/redo02.log (deleted)
lrwx------ 1 oracle oinstall 64 May  5 14:48 260 -> /u02/app/oracle/oradata/oratest/redo03.log (deleted)
lrwx------ 1 oracle oinstall 64 May  5 14:48 261 -> /u02/app/oracle/oradata/oratest/system01.dbf (deleted)
lrwx------ 1 oracle oinstall 64 May  5 14:48 262 -> /u02/app/oracle/oradata/oratest/sysaux01.dbf (deleted)
lrwx------ 1 oracle oinstall 64 May  5 14:48 263 -> /u02/app/oracle/oradata/oratest/undotbs01.dbf (deleted)
lrwx------ 1 oracle oinstall 64 May  5 14:48 264 -> /u02/app/oracle/oradata/oratest/users01.dbf (deleted)
lrwx------ 1 oracle oinstall 64 May  5 14:48 265 -> /u02/app/oracle/oradata/oratest/example01.dbf (deleted)
lrwx------ 1 oracle oinstall 64 May  5 14:48 266 -> /u02/app/oracle/oradata/oratest/temp01.dbf (deleted)

执行cp命令,拷贝数据文件到原路径:

代码语言:javascript
复制
cp 256 /u02/app/oracle/oradata/oratest/control01.ctl 
cp 257 /u02/app/oracle/flash_recovery_area/oratest/control02.ctl 
cp 258 /u02/app/oracle/oradata/oratest/redo01.log 
cp 259 /u02/app/oracle/oradata/oratest/redo02.log 
cp 260 /u02/app/oracle/oradata/oratest/redo03.log 
cp 261 /u02/app/oracle/oradata/oratest/system01.dbf 
cp 262 /u02/app/oracle/oradata/oratest/sysaux01.dbf 
cp 263 /u02/app/oracle/oradata/oratest/undotbs01.dbf 
cp 264 /u02/app/oracle/oradata/oratest/users01.dbf 
cp 265 /u02/app/oracle/oradata/oratest/example01.dbf 
cp 266 /u02/app/oracle/oradata/oratest/temp01.dbf 

需要注意的是,最好使用Oracle用户去执行cp命令。如果使用root用户执行cp命令的话,那么Oracle进程是没有权限操作的。当然也可以在使用root用户拷贝完数据文件后,再执行赋权操作,命令如下所示:

[root@ora10g fd]# chown oracle.oinstall /u02/app/oracle -R

但是一定要注意,必须要等全部数据文件恢复后才可以执行chown操作。因为一旦执行了该操作,原来的ora_进程就会停止,那么就不能恢复所有的数据文件了。

(3)其它检查工作,例如数据检查、备份等

最后需要特别注意的是,当执行操作系统命令rm的时候,切记不可随意加-rf参数,就算一定要用,也要确定再三后才能执行,否则对于数据库而言,可以说是灾难性的。由于rm操作是在数据库OPEN状态下直接进行了破坏性操作,对于Redo Buffer还来不及写入Online Redo Logfile的那部分操作,肯定是会丢失的。因为通过文件句柄号恢复出来的日志文件中,并不一定包含数据库的最新变更。即便如此,本小节对于rm -rf误操作的恢复,还是有一定意义的,至少可以在没有任何备份的情况下,多了一根救命稻草来拯救数据库。最后再次强调一下,执行rm -rf后,千万不要着急地关闭数据库重启,否则在没有任何备份的情况下基本上是很难恢复数据文件的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档