博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PG 数据库遭遇 pg_clog file missing 故障.
阅读量:2499 次
发布时间:2019-05-11

本文共 1313 字,大约阅读时间需要 4 分钟。

今天业务系统遭遇了一起数据库故障.  


数据库端报了一些错误.[code]

2017-07-24 00:16:25.514 CST,"pcauto","pcauto",24404,"192.168.11.60:49721",5974c895.5f54,1,"SELECT",2017-07-24 00:02:29 CST,4/149911010,0,ERROR,58P01,"could not access status of transaction 909258544","Could not open file ""pg_clog/0363"": No such file or directory.",,,,,

[/code]


从报错日志上看 好像是事务日志缺失了. 好大件事.  

然后发现对这个表的全部扫描也失败了.因为绕不过跟这个事务相关的几十行记录. 


然后发现这个事务涉及的sql 在从库上是可以运行.  

为了不阻塞业务, 于是启动了ha 切换. 

然后回来处理这个问题.   发现这个问题很棘手. 目前还没有成熟快速的套路. 

借鉴 了同行们的几个方案均失败. 会跳过这个事务报错. 但是会报另一个错误. block head 损坏. 


最终还是无法解决. 

终极的解决方法.  truncate table  或者drop table  然后从备份集中 恢复数据回去. 



我们保留了现场: 然后进行了各种演练. 最终都是无解. 

参考方案:  
https://www.postgresql.org/message-id/alpine.GSO.2.01.0907231353180.6160@westnet.com


根据 BRUCE  大神 在邮件列表中的一个回复:  
 http://www.postgresql-archive.org/files-under-pg-clog-directories-are-missing-td2844464.html

根据我们主从之间是sync 同步的. 


我们初步认为 .这是一个数据库中行数据的物理损坏, 对应于oracle 的数据块的物理损坏. 

oracle 中会有一个比较完善的报错,诊断机制. 会报 block 损坏. 

pg 这里的这个报错.我么猜测是 数据的物理损坏导致  min max 的事务状态的记录溢出 . 

因为报错中请求的  应该存在于去年的clog 目录下面才对. 

我们最小的clog 文件 03D1  是2017年一月9号的. 这其中已经过了  8个多月了. 对一个频繁访问的业务表.

去年丢的某个日志, 不应该到现在才报错. 然后同步的从库是没有问题. 从库也没有0363 这个文件,但是却可以访问这些记录. 

这业验证了.这个错误可能是数据记录 物理损坏了.如果是逻辑出错的话,应该会通过事务日志传递到从库. 








来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/133735/viewspace-2142485/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/133735/viewspace-2142485/

你可能感兴趣的文章
JavaEE开发使用Maven管理的SpringMVC工程
查看>>
我的linux学习之路——(一)
查看>>
selenium 获取input输入框中的值的方法
查看>>
判断属性是否存在于实例对象和原型对象中
查看>>
内置函数二 & 递归 & 二分查找
查看>>
HDOJ 2007 平方和与立方和
查看>>
oracle-->select
查看>>
Python WxPython 的安装以及使用
查看>>
关于重写
查看>>
BZOJ4025 二分图 线段树分治、带权并查集
查看>>
CozyRSS开发记录17-Html2Xaml
查看>>
使用pygal 做chart图的经验分享
查看>>
内存泄露调试之 visual leak detector 工具【转】...
查看>>
java操作sqlserver
查看>>
vmware converter linux p2v lvm
查看>>
js正则表达式中的exec
查看>>
官方文档-----》
查看>>
MySql的数据库文件
查看>>
找出一组数里出现频率最高的3个数(1.3)
查看>>
BigDecimal默认用四舍五入方式
查看>>