Bo's Oracle Station

查看: 2383|回复: 3

磁盘损坏的问题请教

[复制链接]

81

主题

181

帖子

781

积分

高级会员

Rank: 4

积分
781
发表于 2017-7-26 09:00:35 | 显示全部楼层 |阅读模式
唐老师
    前几天在执行dump计划任务的时候失败,邮箱收到的告警如下:ORA-27072: File I/Oerror~Linux-x86_64
  如果检查点发生的时候遇到这样的错误,数据库就会down掉
  由此想到一个概念性的问题,记得上课时提过,但是当时不甚理解
  原理上说,肯定是先写磁盘,然后才写日志,否则如果写磁盘失败,日志却记录已经写过了
  
  我感觉写完才记日志也不对,如果写磁盘了,但是接下来日志文件写入失败,一样会导致数据库down掉,
  假设这次写磁盘,预期rba指针到10,但是因为IO错误,写日志却失败了
  那么再启动的时候控制文件的rba指针已经到10,还是停留在9?
  如果控制文件的rba指针到10 ,而实际日志文件上最多只有9,因为最后一个写失败了,此时启动控制文件指挥前滚到10,肯定不对

  如果因为日志没有写成功,控制文件的rba指针还在9,停留在上一次写的位置,那么前滚到9,重新走日志到最后一条,可是这个时候数据文件已经写到10了,感觉也不对。


   先写日志不对,先写磁盘也不对,那么是什么机制保障不会出错的?
日志中有没有一个“准备写”的记录动作,写完以后再做确认。 即日志先记录了这个时间点要写磁盘了,然后再记录写完磁盘了


  


回复

使用道具 举报

1005

主题

1469

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12012
发表于 2017-7-26 12:20:56 | 显示全部楼层
无论如何,这句是不对的:
原理上说,肯定是先写磁盘,然后才写日志,否则如果写磁盘失败,日志却记录已经写过了


一定先写日志。这没有问题,RDB指针会指示在莫个位置,之前对应的数据块全写了。
回复 支持 反对

使用道具 举报

81

主题

181

帖子

781

积分

高级会员

Rank: 4

积分
781
 楼主| 发表于 2017-7-26 13:37:27 | 显示全部楼层
botang 发表于 2017-7-26 12:20
无论如何,这句是不对的:

一定先写日志。这没有问题,RDB指针会指示在莫个位置,之前对应的数据块全写 ...

控制文件先记录rba指针,然后再写日志,还是写完日志,控制文件才更新rba指针?

另外,如果日志先写,此时rba指针已经更新了,然后再写磁盘,但是写磁盘的时候失败了。
这样当磁盘故障修复以后,控制文件前滚的时候从rba指针开始,到日志最后一条。
而这个时候rba指针对应的日志认为已经写过磁盘了,而实际当时磁盘写入失败。
感觉这个过程不对。
请唐老师指教
回复 支持 反对

使用道具 举报

1005

主题

1469

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12012
发表于 2017-7-26 15:18:01 | 显示全部楼层
lujiaguai 发表于 2017-7-26 13:37
控制文件先记录rba指针,然后再写日志,还是写完日志,控制文件才更新rba指针?

另外,如果日志先写, ...

Oracle内部会有一些列“互斥”机制处理,我们不必纠结这种细节了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Bo's Oracle Station   

GMT+8, 2024-3-29 13:42 , Processed in 0.035187 second(s), 24 queries .

快速回复 返回顶部 返回列表