linux错误的文件描述符,Linux下利用文件描述符恢复的成功失败实验

SQL> alter system checkpoint;

System altered

--alert log中信息如下:

Sun Feb 02 02:27:51 2014

Beginning global checkpoint up to RBA [0x1ef.2532.10], SCN: 5374358

Errors in file /u01/diag/rdbms/wilson/wilson/trace/wilson_ckpt_4814.trc:

ORA-01171: datafile 11 going offline due to error advancing checkpoint

ORA-01116: error in opening database file 11

ORA-01110: data file 11: '/u01/oradata/WILSON/datafile/rmdtest01.dbf'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3

Completed checkpoint up to RBA [0x1ef.2532.10], SCN: 5374358

Sun Feb 02 02:27:52 2014

Checker run found 1 new persistent data failures

Check Point是Oracle内部控制的一件大事。经过check point,Oracle要保证所有数据文件、控制文件SCN信息保持一致,和日志文件在恢复时间点(RBA+SCN)达成一致。这个过程就强制回去访问到数据文件,结果文件丢失被发现。

此后,查询出错。

SQL> select count(*) from rmtest.rm_tab;

select count(*) from rmtest.rm_tab

ORA-00376: 此时无法读取文件 11

ORA-01110: 数据文件 11: '/u01/oradata/WILSON/datafile/rmdtest01.dbf'

注意:如果放任不管,Oracle自动的incremental checkpoint也会有类似的效果。同时,周期性的Global Check也会发现“文件丢失了”。

这个时候,我们进行修复操作。使用文件描述符恢复文件的方法,第一步找到一个Oracle后台进程,最典型的就是dbwr。

[oracle@bspdev datafile]$ ps -ef | grep dbw

oracle    4806    1  0 02:12 ?        00:00:00 ora_dbw0_wilson

oracle    9076  4491  0 02:29 pts/0    00:00:00 grep dbw

使用lsof –p命令,找出dbwr进程对应的文件描述符信息。

[root@bspdev datafile]# lsof -p 4806

COMMAND  PID  USER  FD  TYPE DEVICE  SIZE/OFF      NODE NAME

oracle  4806 oracle  cwd    DIR  253,0      4096  10574090 /u01/oracle/dbs

oracle  4806 oracle  rtd    DIR  253,0      4096        2 /

oracle  4806 oracle  txt    REG  253,0  173515991  10579756 /u01/oracle/bin/oracle

(篇幅原因,有省略……)

racle  4806 oracle  33uW  REG  253,0  10493952  2978999 /u01/oradata/WILSON/datafile/mvtbltest01.dbf

oracle  4806 oracle  34uW  REG  253,0  30416896    524875 /u01/oradata/WILSON/datafile/o1_mf_temp_7xt46489_.tmp

oracle  4806 oracle  35r  REG  253,0    1074176  10595009 /u01/oracle/rdbms/mesg/oraus.msb

里面包括了dbwr打开的所有文件描述符,我们没有能看到删除的文件rmdtest01.dbf。文件描述符目录也没有相应的FD内容。说明:由于一些情况,Oracle进程将文件描述符删除了!

此时,我们检查文件状态。

SQL> select online_status from dba_data_files where file_id=11;

ONLINE_STATUS

-------------

RECOVER

文件已经被offline,强制剔除文件体系了。仔细想起来,这个过程是check point的一个结果。

Check Point的最终效果,是所有数据文件在文件头标注相同的SCN记录,之前脏块被写入到数据文件中。如果一个数据文件实体不存在了,这个操作一定不能完成。Oracle选择了一种方法,就是强制将这个文件“剔除”。所以我们在日志中,看到了下面一段内容。

ORA-01171: datafile 11 going offline due to error advancing checkpoint

被剔除的文件,Oracle关闭文件描述符也是可以理解的了。

这个实验失败,告诉我们一个道理:使用文件描述符进行数据恢复,并不是100%有效。如果时间很长,或者进行过很多特殊操作,这个微弱的文件描述符是会消失的!

下面我们进行一次成功的实验。0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值