PostgreSQL数据库数据文件完整性检查


12

在运行PostgreSQL数据库系统时,我如何知道我的数据库整体上具有100%的完整性?基本上,我如何知道我的数据文件和页面是否全部100%良好且没有损坏?

在Microsoft SQL Server世界中,有一个命令可以执行DBCC CHECKDB,该命令将告诉您是否存在问题。如果您打算进一步了解该命令,则这里是一个链接。DBCC CHECKDB(Transact-SQL)

我是一个偏执狂的数据库完整性专家(任何以DBA类型角色使用数据库的人都应该这样),这种类型的事情使我很难在晚上睡个好觉。像这样的实用程序是必须的!在Google上进行的搜索已经找到了一些类似工具的尝试,我认为除非它是PostgreSQL项目正式接受的工具,否则我不会因为它的重要性而相信它。

这里有一些链接,人们在问类似的问题时,我认为没有真正的答案。在我看来,PostgreSQL需要拥有一些Oracle和Microsoft SQL Server似乎具备的工具。

第一个链接是我在该主题上找到的最有趣的链接。我认为对这篇文章的评论可能是这样总结的:“ Postgres在识别数据库损坏并修复它时非常la脚。检测到它的唯一方法是通过转储数据库或从数据库的每个表中选择* 。”

PostgreSQL如何防止部分页面写入和数据损坏

检查数据和索引文件损坏-Dev Shed

帮助:我的桌子坏了!

PostgreSQL:主键损坏,表不一致

我相信9.3有可能具有某些损坏检查功能。如果选择的话,似乎希望对页面文件进行汇总检查。因此,如果您考虑使用ZFS和/或带有页面检查求和的Postgres的将来版本,那么情况看起来就很好。 https://commitfest.postgresql.org/action/patch_view?id=759

更新:2012年1月14日-好像使用基于ZFS的文件系统一样,可以通过检查每个数据块的总和来检测损坏。我将不得不对此进行进一步的研究,看看是否可以通过一种解决方法,让一个晚上知道他们的数据库数据没有被无提示地破坏,从而使其睡个好觉。

更新:2012年1月17日-如何使用ZFS查找损坏的文件。http://docs.oracle.com/cd/E18752_01/html/819-5461/gbbwl.html#gbcuz

更新:2014年4月14日9.3确实获得了数据校验和。https://wiki.postgresql.org/wiki/What's_new_in_PostgreSQL_9.3


2
完整性是指页面文件等的完整性。只有当您编写碰巧碰到具有损坏的页面的查询时,您才能正常看到的东西类型。例如,当磁盘驱动器开始出现故障时,磁盘上的某些数据可能开始变质。您将如何发现?
Kuberchaun 2012年

Answers:


8

9.3之前的PostgreSQL没有块校验和。该功能已在9.3中添加(此问题发布很久之后)。

为了满足您的需求,我可能会开发自己的校验和(触发?)-处理属性值,而不是数据页。


4
值得一提的是,自Postgres 9.3起,您可以选择启用校验和
a_horse_with_no_name 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.