【问题标题】:Repair Corrupt database postgresql修复损坏的数据库 postgresql
【发布时间】:2012-06-14 09:23:40
【问题描述】:

我的 postgresql 数据库出现多个错误,这是在电源浪涌后导致的:

我无法从我的数据库中访问大多数表。例如,当我尝试select * from ac_cash_collection 时,我得到了一个愚蠢的错误:

错误:pg_toast_2619 中的 toast 值 118486855 缺少块号 0

当我尝试 pg_dump 时,我收到以下错误:

来自服务器的错误消息:错误:关系“public.st_stock_item_newlist”不存在 pg_dump:命令是:LOCK TABLE public.st_stock_item_newlist IN ACCESS SHARE MODE

我继续尝试运行整个数据库的reindex,实际上我让它运行,进入睡眠状态,我发现它早上没有做任何事情,所以我不得不取消它。

我需要一些帮助来尽快解决这个问题,请帮忙。

【问题讨论】:

  • 我猜是电源故障以某种方式损坏了硬盘,您很可能需要恢复备份
  • 你试过Google it吗?
  • 电源浪涌也损坏了备份...
  • 也许this 会有所帮助。

标签: postgresql corrupt-data


【解决方案1】:

在你做任何事情之前,http://wiki.postgresql.org/wiki/Corruption并按照指示行事。不这样做可能会使问题变得更糟。


Fine Manual 中列出了两个可能有用的配置参数:ignore_system_indexeszero_damaged_pages。我从未使用过它们,但如果我绝望的话,我会使用它们......

我不知道它们是否有助于防止烤面包。在任何情况下,如果设置它们会导致您的数据库再次可用,我会 {backup + drop + restore} 让所有表和目录再次恢复为新的形状。成功!

【讨论】:

  • 添加了关于先复制的警告;这非常重要。 zero_damaged_pages 确实 影响 TOAST 表(以及索引和其他所有内容)。它的工作原理是擦除数据,而不是恢复它。在使用它之前非常非常仔细地考虑它,或者pg_resetxlog,或者任何其他“大锤”​​恢复工具。
  • 很好的建议,恕我直言。重读 OQ,似乎还涉及损坏的目录。
  • 此处可能无法进行备份。如果您的表使用扩展存储,预计 pg_dump 会失败并出现 compressed data is corrupt 之类的错误。
  • 这很可能是现存最没有帮助的维基页面之一。您在此处的回答比该页面上的任何内容都提供了更多的细节。
  • 对我来说,解决这个问题的唯一方法是从表中删除数据(这对应用程序来说并不重要)。
【解决方案2】:

如果您有备份,只需从它们恢复。

如果没有 - 您刚刚了解了为什么需要定期备份。如果硬件出现问题,PostgreSQL 将无能为力。

此外,如果您再次遇到这种情况,请先停止 PostgreSQL 并对所有内容(所有表空间、WAL 等)进行完整的文件级备份。这样您就有了一个已知的起点。

所以 - 如果您仍想恢复一些数据。

  1. 尝试转储单个表。用这种方式得到你能得到的。
  2. 如果索引导致问题,请删除索引
  3. 转储表的部分(id=0..9999、1000..19999 等) - 这样您就可以确定某些行可能损坏的位置并转储更小的部分以恢复仍然完好的部分。
  4. 尝试仅转储某些列 - 大文本值被离线存储(在 toast 表中),因此避免它们可能会导致其余数据丢失。
  5. 如果您的系统表已损坏,那么您将投入大量工作。

这是很多工作,然后您需要仔细检查并审核您已恢复的内容,并尝试找出丢失/不正确的内容。

您可以做更多的事情(在某些情况下创建空块可以让您转储部分数据),但它们都更加复杂和繁琐,除非数据特别有价值,否则不值得努力。

要从中消除的关键信息 - 确保定期备份,并确保它们正常工作。

【讨论】:

  • +1 今天我很高兴了解了备份的重要性,并且我已经成功恢复了一个数据库。
【解决方案3】:

在您执行任何其他操作之前,请获取损坏数据库的完整文件系统级副本。

http://wiki.postgresql.org/wiki/Corruption

不这样做会破坏导致损坏的证据,这意味着如果您的修复工作不顺利并使情况变得更糟,您将无法撤消它们。

复制它现在

【讨论】:

    猜你喜欢
    • 2018-01-02
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 2017-08-29
    • 2012-01-06
    • 1970-01-01
    相关资源
    最近更新 更多