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