在运行 PostgreSQL 数据库系统时,我如何知道我的数据库作为一个整体具有 100% 的完整性?基本上我怎么知道我的数据文件和页面是否都是 100% 好,没有损坏?
在 Microsoft SQL Server 世界中,有一个命令可以执行 DBCC CHECKDB,它会告诉您是否存在问题。如果您有兴趣了解有关命令的更多信息,请访问这里的链接。DBCC CHECKDB (Transact-SQL)
我是一个偏执的数据库完整性的人(任何以 DBA 类型角色使用数据库的人都应该是),这种类型的东西让我很难在晚上睡个好觉。这样的实用程序是必须的!在 google 上搜索发现了一些类似这样的工具的尝试,在我看来,除非它是 PostgreSQL 项目官方接受的工具,否则我不会相信它来处理如此重要的事情。
这里有一些链接,指向人们提出类似问题,但我认为没有真正明确的答案。在我看来,PostgreSQL 需要有一些工具,而 Oracle 和 Microsoft SQL Server 似乎也有这些工具。
第一个链接是我在这个主题上发现的最有趣的链接。我认为对这篇文章的评论可能总结道:“在识别数据库损坏和修复它时,Postgres 非常蹩脚。检测它的唯一方法是通过转储数据库或从数据库中的每个表中选择 * .”
我相信 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
更新:14-APR-2014 9.3 确实获得了数据校验和。https://wiki.postgresql.org/wiki/What's_new_in_PostgreSQL_9.3