Rub*_*nsh 6 postgresql corruption data-integrity postgresql-9.3
我有一个在 ubuntu 服务器上运行的 postgres 9.3 db。
大约一个月前,我们的 VPS 托管公司解决了服务器上的硬件问题。
问题很快得到解决,一切似乎都运行良好。
我们使用另一台服务器上的酒保运行备份 - 备份和恢复工作正常(我检查过)。
数据损坏的第一个迹象是几天前:我决定在我们的数据库上做一个完整的 pg_dump,就像我每隔一段时间做的那样,它失败了(块中的页头无效......) - 数据似乎已经很久以前就损坏了 - 大约在硬件问题发生的时候(那是损坏记录上的日期)。我求助于查找损坏的记录,然后将其删除并手动恢复。
在那之后,我能够做一个完整的 pg_dump。
为了检查其他损坏 - 我从备份中设置了不同的数据库服务器并对所有表运行 pg_repack 以验证我能够重建所有索引和表。
我的问题是:
1. 我如何确定我的数据库中没有任何额外的损坏?
2. 如何定期检查我的数据完整性?
3. 除了转储整个数据库并重新索引它(我已经这样做了)之外,我还能做些什么来验证我们数据库的完整性?
PS - 我没有启用块校验和。
正如其他地方所述,核心 PostgreSQL 中没有类似于 SQL Server (SQL Server DBCC CHECKDB
) 或 Oracle 中的损坏专用工具。这并不意味着您不能关注腐败并尽力防止腐败。一些想法:
fsync
。在您的情况下不可调整,但仍然很重要。pg_dump
。最好使用 Barman 进行自动物理备份,但这不会检查损坏。只有pg_dump
(它将读取所有表中的所有行)才能为您提供防止表损坏的保险。这绝对是你应该自动化的事情。如果您没有该位置,请重定向pg_dump
至/dev/null
。如果您有正确的表,则始终可以重建损坏的索引。我认为有一些索引损坏查找工具。