数据恢复:如何恢复Linux中意外删除的Oracle和MySQL数据库

张乐奕

云和恩墨副总经理,Oracle ACE总监,ACOUG 联合创始人

没有删除过数据库的DBA职业生涯是不完整的,删除过数据库还能幸存的DBA一定是订阅了“Oracle”公众号。

昨晚有朋友在微信群中求助讨论,误删除了一个MySQL的数据库,整个恢复过程和以下文章中提到的步骤完全相同,只要MySQL主进程还没有退出,从文件句柄中可以恢复文件最终挽回损失。类似的lsof找到那些被标记为Deleted的文件(以下是参考示意图)。

让我们完整的再复习一下这篇文章的步骤,一定要记住这种方法:

今天有客户的数据库意外被删除了整个目录中的数据文件,操作系统级别的删除,然而幸运的是这个数据库没有崩溃,仍然处于 open 状态的时候,客户就发现了问题,求助到我们,最终完整地恢复了所有数据文件。

在 Linux 下大致重新演示一下恢复的过程,恢复的步骤与数据库版本没有太大关系,与操作系统的不同会有所不同。

1. 在数据库 open 的时候,直接删除 users 表空间中的数据文件。

2. 尝试在 users 表空间中创建表,开始报错。

在告警日志中,同样也可以看到类似信息。

3. 检查 dbwr 的进程 PID

4. dbwr 会打开所有数据文件的句柄。在 proc 目录中可以查到,目录名是进程 PID,fd 表示文件描述符。

注意其中“/app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf (deleted)”字样,表示该文件已经被删除,如果是 Solaris 操作系统,ls 命令不会有如此清晰的显示,为了在 Solaris 系统中确认哪个句柄对应哪个文件,则需要使用 lsof 程序。

5. 直接 cp 该句柄文件名回原位置。

6. 进行数据文件 recover

完成数据文件恢复。

恢复的原理是,在 Linux 操作系统中,如果文件从操作系统级别被rm掉,之前打开该文件的进程仍然持有相应的文件句柄,所指向的文件仍然可以读写,并且该文件的文件描述符可以从 /proc 目录中获得。但是要注意的是,此时如果关闭数据库,则此句柄会消失,那么除了扫描磁盘进行文件恢复之外就没有其它方法了,因此在数据库出现问题的时候,如果不确认情况的复杂程度,千万不要随便关闭数据库。重启数据库往往是没有意义的,甚至是致命的。

当然,客户的操作系统是Solaris,并且客户删除的文件还包括 current online redo log,因此还有其它更复杂的操作,不在这里描述。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-04-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Elasticsearch实验室

Mysql数据导入Elasticsearch最佳实践

  Elasticsearch(ES)可用于全文检索、日志分析、指标分析、APM等众多场景,而且搭建部署容易,后期弹性扩容、故障处理简单。ES在一定程度上实...

2K9
来自专栏JackeyGao的博客

Django小技巧04: 自动日期时间字段

Django 的DateTimeField和DateField有两个非常有用的参数,用于自动管理时间。如果你需要跟踪保存纪录的创建时间和更改时间,则无须手动执行...

3383
来自专栏cmazxiaoma的架构师之路

MySQL复制性能优化和常见问题分析

二进制日志文件并不是每次写的时候都会同步到磁盘,当发生宕机的时候,可能会有最后一部分数据没有写入到binlog中,这给恢复和复制带来了问题。当sync_binl...

1382
来自专栏恰童鞋骚年

【大型网站技术实践】初级篇:搭建MySQL主从复制经典架构

  随着网站业务的不断发展,用户量的不断增加,数据量成倍地增长,数据库的访问量也呈线性地增长。特别是在用户访问高峰期间,并发访问量突然增大,数据库的负载压力也会...

1264
来自专栏腾讯云Elasticsearch Service

Elasticsearch最佳实践从Mysql到Elasticsearch

  Elasticsearch(ES)可用于全文检索、日志分析、指标分析、APM等众多场景,而且搭建部署容易,后期弹性扩容、故障处理简单。ES在一定程度上实...

2.1K1
来自专栏FreeBuf

搭建开源入侵检测系统Snort,并实现与防火墙联动

之前做入侵检测与防火墙联动时,发现这方面资料较少,研究成功后拿出来和大家分享一下。 Snort作为一款优秀的开源主机入侵检测系统,在windows和Linux平...

1.1K5
来自专栏沈唁志

整合ThinkPHP功能系列之微信公众号模板消息发送

所有服务号都可以在功能、添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限

1992
来自专栏Zephery

谈谈个人网站的建立(六)—— 数据库同步

先来回顾一下上一篇的小集群架构,tomcat集群,nginx进行反向代理,服务器异地: ? 由上一篇讲到,部署的时候,将war部署在不同的服务器里,通过spri...

4775
来自专栏java一日一条

数据库的读写分离

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务...

1673
来自专栏蔡鹏的专栏

开源分布式监控系统 OWLv5.0.0 安装部署完整手册

OWL 是TalkingData公司推出的一款开源分布式监控系统 . 目前使用OWL监控了二十几台服务器,便捷很多 Go语言开发,部署维护简单

5588

扫码关注云+社区

领取腾讯云代金券