在运行PostgreSQL数据库系统时,我如何知道我的数据库整体上具有100%的完整性?基本上,我如何知道我的数据文件和页面是否全部100%良好且没有损坏?
在Microsoft SQL Server世界中,有一个命令可以执行DBCC CHECKDB,该命令将告诉您是否存在问题。如果您打算进一步了解该命令,则这里是一个链接。DBCC CHECKDB(Transact-SQL)
我是一个偏执狂的数据库完整性专家(任何以DBA类型角色使用数据库的人都应该这样),这种类型的事情使我很难在晚上睡个好觉。像这样的实用程序是必须的!在Google上进行的搜索已经找到了一些类似工具的尝试,我认为除非它是PostgreSQL项目正式接受的工具,否则我不会因为它的重要性而相信它。
这里有一些链接,人们在问类似的问题时,我认为没有真正的答案。在我看来,PostgreSQL需要拥有一些Oracle和Microsoft SQL Server似乎具备的工具。
第一个链接是我在该主题上找到的最有趣的链接。我认为对这篇文章的评论可能是这样总结的:“ Postgres在识别数据库损坏并修复它时非常la脚。检测到它的唯一方法是通过转储数据库或从数据库的每个表中选择* 。”
我相信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