Chinaunix首页 | 论坛 | 博客
  • 博客访问: 679910
  • 博文数量: 163
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1625
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-24 11:40
个人简介

资深Oracle数据库专家 OCM认证大师 10年数据库相关服务及开发经验 各类数据库相关方案的编写,管理及实施 数据中心数据库日常运维、大型项目割接、性能优化等方面有丰富的实战经验 客户包括: 电信,银行,保险,航空,国网,汽车,烟草等 想要一起学习探讨数据安全技术的请加qq群 256041954

文章分类

全部博文(163)

文章存档

2017年(2)

2016年(112)

2015年(38)

2014年(11)

我的朋友

分类: Oracle

2016-04-09 00:24:55

一、数据文件被删除的恢复

实验场景:由于维护人员的误操作,导致数据库部分数据文件被删除,数据库报错。

>>>> 故障模拟

10 点59分,误操作删除文件

11 点20分数据库alert日志显示出现ora-01116等错误,根据后台日志显示此时ts_test01.dbf文件已经无法正常打开。

但是数据库没有因此关闭,还处于read write状态。

>>>> 问题分析

数据文件被误删,数据库仍然处于open状态。对于此问题可以通过linux系统的“文件描述符”找回丢失的数据文件。在Linux系统中一切皆可以看成是文件,文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,所有执行I/O操作的系统调用都通过文件描述符。文件描述符打开的文件句柄以及i-node的关系如图:

在linux 系统中,数据文件被删除后,其文件句柄还被相关数据库进程所打开使用,可以通过该句柄信息直接复制将其恢复。需要注意的是,在此期间数据库不能关闭。否则相关句柄将被释放,文件就无法找回。

>>>> 恢复步骤

尝试通过oracle dbwr进程找到被误删除的文件句柄

当前的oracle dbwr进程的spid是3293 可以通过该进程找到丢失的ts_test01.dbf 文件句柄

含一些数字命名的目录,它们是进程目录,其下的fd子目录包含进程相关的所有的文件描述符。子本例中oracle的dbwr 进程的fd目录下正有已经被删除的ts_test01.dbf文件的描述符(注:文件描述符为25,当前的状态是deleted)

通过copy的方式恢复已删除的数据文件,并设置正确的属组权限。

通过将offline 相关表空间并重置文件路径的方式完成文件重定向。

由于前期数据文件无法open的问题,部分已更改的数据无法写入数据文件,导致datafile header 上的checkpoint#和controlfile文件的checkpoint_change#不一致,需要对数据文件进行介质恢复。

进行介质恢复之后,表空间可以正常online,故障处理也算完成。

阅读(1491) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~