数据恢复:如何恢复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 条评论
登录 后参与评论

相关文章

来自专栏Grace development

暴力解说之首次部署NGINX

本章讲解下在项目上线部署的时候对NGINX的操作。有些童鞋在网上百度类似LNMP安装就跟着命令一条一条执行了,如果没报错还好,一旦报错就懵逼状态了。这是对自己...

642
来自专栏各种机器学习基础算法

关于Docker的一些常识

一、为什么使用Docker Docker一词意为码头工人,而Docker的功能也与集装箱类似。通常一个webapp并不会用到操作系统/虚拟机的全部功能,即操作...

3439
来自专栏CSDN技术头条

进阶指南|三个月大数据工程师学习计划

本文来自作者在GitChat(ID:GitChat_Club)上的精彩分享,CSDN独家合作发布。 申明:本文旨在为普通程序员(Java程序员最佳)提供一个入门...

26610
来自专栏张戈的专栏

自动管理员身份执行小工具—asroot

推荐使用的典型环境: 用户为普通帐号,没有管理员权限,但又必须取得程序安装权限,比如产线作业员需要时常更新驱动: 为了安全而使用普通帐号的个人电脑 还记得记得以...

3459
来自专栏木宛城主

SharePoint自动化部署,利用PowerShell 导出/导入AD中的用户

这几个月一直在帮客户改需求,部署。我已经心力憔悴,经过一段时间的摸索,我对用PowerShell实现自动化部署也有了一些心得,比如说利用PowerShell导...

1856
来自专栏运维小白

15.1 FTP介绍

FTP介绍 FTP多用于Windows传文件到linux rz sz在文件超过4G,就无法使用了——>安装包yum install -y install lrz...

2055
来自专栏从零开始学自动化测试

Appium+python自动化16-启动ios上Safari浏览器

前言 在mac上搭建appium踩了不少坑,先是版本低了,启动后无限重启模拟器。后来全部升级最新版本,就稳稳的了。本篇介绍如何用appium启动ios上的saf...

3944
来自专栏逸鹏说道

保障MySQL数据安全的14个最佳方法

有的企业在安装MySQL时用的是默认选项,由此造成其数据不安全,且服务器也面临被入侵的风险,并有可能在短时间内就出现性能问题。本文将提供保障MySQL安全的最佳...

42110
来自专栏木宛城主

SharePoint 2013 Farm 安装指南——构建一个双层SharePoint Farm

最近要对公司里的SharePoint进行升级,由于旧的系统SharePoint 2010已经有2年了,上面改动比较多,而且权限也很混乱了,所以下定决心要对其做...

2509
来自专栏大宽宽的碎碎念

怎么避免MYSQL误删除避免混淆开发环境的DB和生产环境的DB用事务保护使用安全更新模式对DROP和TRUNCATE慎之又慎最终的招数最终的话

33613

扫码关注云+社区