【原创分享计划】记一次oracle数据库的数据恢复
  

sailyang 5768

{{ttag.title}}


今年新型冠状肺炎爆发,好多企业持续停工,我们也是放假在家,由于小区、道路被社区工作人员封闭,出不来,于是机房缺少运维,等复工后发现了一台有十四块硬盘做的是raid5的IBM DS5020磁盘阵列,其中3块硬盘故障亮灯掉线。
917885e86d5a8b7379.png

这台ds5020磁盘阵列通过fc光纤通道卡连接一台IBMX3850服务器,经硬盘数据恢复后提取出oracle的dbf文件及控制文件。
212685e86acd3ce448.png

重新将磁盘阵列挂到服务器上,oracle无法启动,报控制文件损坏,先后试过冷备份启动及控制文件替换或者重建的方式先后宣告失败。于是使用PRM 灾难恢复工具对oracle的DBF文件进行了成功恢复。
一、使用冷备份方式(失败的尝试):
1.安装oracle 数据库并创建一个要恢复的数据库相同一的实例
2,以sysdba身份登录:对控制文件进行备份;sqlplus /nolog
3.conn /as sysdba;登录
4.备份控件文件到udmp目录的trace文件 alter database backup controlfile to trace;
5.找到oracle的安装目录:..\oracle\product\10.2.0\db_1\admin\实例名\udump文件夹下,找到最近的trace文件。
6.shutdown immediate停止数据库实例;
7.备份..\oracle\product\10.2.0\oradata\orcl,接着将该实例文件夹删除,把恢复的DBF直接替换原来orcl
8.以sysdba进入并执行startup nomount。把数据库启动到nomount状态。
9.trace文件中拷贝CREATE CONTROLFILE部分语句来重建控制文件:
最后启动数据库报ORA-01578 数据库system表空间坏块。可能是控制文件不匹配原因 宣告失败。

二、使用oracle紧急救援工具
   我选择prm-dul紧急救灾工具(社区版),这可能是数据库恢复的最后一根稻草。由于prm-dul使用的java语音编写,所以需要安装JDK。从网上下载prm-dul,无需安装解压后执行prm.bat。
780295e86adb29d1a6.png 735715e86ae5bdbbe9.png

2.打开系统后选择菜单栏中的文件—恢复向导
32325e86ceae54965.png

3.根据自身条件,选择模式。我选择是的默认的字典模式。
255005e86cef8bdfdc.png

4.选择字符编码及偏移量,由于是磁盘阵列亮灯掉线,不存在数据损坏的情况,所以偏移量为0
564395e86cf366bea0.png

5.选择dbf文件,选择加载,要把所有的文件都选择上,不能只选择需要恢复的表。
836385e86cf7046680.png

6.系统自动默认加载DBF文件,等待
95645e86cfa8e0703.png

7.加载完成选择需要恢复的用户下面的表
153565e86d017a8742.png

8.由于我下载的是社区版,社区版如果直接导入oracle 有一万行的限制,如果是企业版就要付费,所以没有采用付费方式的企业版,我使用的是抽取数据表另存为的方式,这样就不受版本的限制了
294575e86d08101d71.png

9.点击抽取另存为,对相关的数据表进行保存。一个数据表输出是文件和。ctl两个文件形式。
649665e86d0cc4d021.png

10.ctl后缀文件用记事本打开后是建表的表结构语句。
471815e86d7e0c8e11.png

11.不带后缀的文件形式用及时本打开是就是我们保存在数据库里面的数据
66335e86d17248ef6.png

12.剩下工作就是重新安装oracle数据库,配置监听端口,然后通过这些ctl文件对数据库进行重新新建数据表,最后把文件里面的表格数据全部倒入到新建的数据库中,形成新的数据库。恢复完成。
986645e86d1d2a4951.png

总结:
1.信息化建设不能只重视建设,轻运维。
2.要定期对数据进行备份并且导出。
3.合适的情况下购置存储备份设备。
4.在数据量不大的情况下,缺少运维技术时候不要选用oracle,因为控制文件和日志文件不能有一丝不一致,易加载失败。就像这次磁盘阵列掉线,服务器环境并无改变,磁盘阵列恢复后依然无法加载,最后不得以进行数据恢复。

打赏鼓励作者,期待更多好文!

打赏
17人已打赏

YxY 发表于 2020-4-11 15:17
  
本帖最后由 YxY 于 2020-4-11 15:21 编辑

如果数据库较大,且数据库中存在blob、long字段这中方法比较局限。
通常在重建控制文件后,报system表空间块损坏需要考虑BBED;报system表空间需要媒体恢复时可以尝试在线日志来恢复或者忽略一致性检查启动数据库,再导出数据库。或者使用xtts迁移数据。
如果有RMAN备份就更好了,做个restore + recovery就好了。
Sangfor_闪电回_朱丽 发表于 2020-4-3 14:49
  
您好,感谢您参与社区原创分享计划8,您的文章已被收录到计划中,交由专家评审小组评审,文章标签在专家评审后设置,奖励将在活动结束后统一安排发放!发文越多,奖励越多,期待您更多的精彩文章哦!:感恩:
关于技术文章的管理流程,请参考:http://bbs.sangfor.com.cn/forum.php?mod=viewthread&tid=90279
新手819559 发表于 2020-4-3 16:37
  
感谢分享
cow977 发表于 2020-4-3 19:28
  
RAID5同时坏这么多盘,数据肯定有丢失了。只能用DUL等第三方工具来抽取部分数据,肯定是不完整的。

DBA的基本工作就是做好数据备份,否则只有删库跑路了。
sdhd_耿建峰 发表于 2020-4-3 21:36
  
厉害厉害学习了!:加油:
一一氵 发表于 2020-4-4 11:54
  
学习打卡,感谢分享。
清风慕竹 发表于 2020-4-4 13:58
  
首先感谢楼主的精彩分享,看着楼主写的这个文章,感觉很高大上档次,没有一定的oracle基础不敢随意的去操作,如果让我去做肯定心里慌慌的!服务器做的raid5坏了三块盘,数据会不会有丢失啊,所以说数据备份很重要,这个时候请考虑一下深信服的超融合,做好数据备份很重要,再次感谢楼主的精彩分享。
flying 发表于 2020-4-4 16:14
  
学习一下,谢谢分享
新手081074 发表于 2020-4-4 17:44
  
感谢分享
新之助 发表于 2020-4-4 22:51
  
感谢分享      
发表新帖
热门标签
全部标签>
每日一问
技术盲盒
技术笔记
每周精选
干货满满
技术咨询
安装部署配置
标准化排查
信服课堂视频
自助服务平台操作指引
产品连连看
新版本体验
秒懂零信任
GIF动图学习
功能体验
玩转零信任
通用技术
2023技术争霸赛专题
技术晨报
社区帮助指南
安全攻防
每日一记
深信服技术支持平台
天逸直播
华北区交付直播
畅聊IT
答题自测
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
上网策略
测试报告
日志审计
问题分析处理
流量管理
运维工具
云计算知识
用户认证
原创分享
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
答题榜单公布
纪元平台
卧龙计划
华北区拉练
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV

本版达人

新手89785...

本周建议达人

新手78183...

本周分享达人