【问题标题】:How to Recover PostgreSQL 8.0 Database如何恢复 PostgreSQL 8.0 数据库
【发布时间】:2013-11-15 07:42:02
【问题描述】:

在我的 PostgreSQL 8.0 数据库上,我开始收到“错误:无法打开关系 1663/17269/16691:没有这样的文件或目录”消息,现在我的数据无法访问。 关于如何恢复至少部分数据的任何想法?专业支持是一种选择。

问候。

RP

【问题讨论】:

  • 第一步:立即关闭并获取所有postgresql相关目录的文件系统级副本。
  • 做到了。使数据文件夹脱机。
  • 您是否已经尝试将文件系统副本复制到另一台服务器并启动该集群?开始了吗?
  • 我做了,复制到一个完全不同的服务器(两个 Windows)。它开始了,但是每当我尝试做任何事情时,我都会收到该错误消息。你知道有什么专业的支持吗?
  • 从这里开始:postgresql.org/support/professional_support - 如果您有最近的数据库备份,这可能是最简单/最具成本效益的解决方案。

标签: postgresql recovery


【解决方案1】:

如果您希望尽快恢复您的数据并且它对您有价值,那么专业支持选项应该足够简单。

有些事情需要检查,现在您已经对所有数据库(即 base、pg_clog、pg_xlog 和该级别的所有其他文件夹)进行了完整备份。

  1. 那个文件真的存在吗?这可能是权限问题,而不是文件实际上丢失了。

  2. 检查您的防病毒/安全软件包 - 他们是否错误地隔离了文件?如果您可以从扫描/主动扫描中排除 PostgreSQL 的数据库目录,那也是值得的。

  3. 记下所有你能记住的关于这件事发生的时间和之前发生的事情。这将有助于您或顾问进行故障排除。

  4. 同样检查日志 - 将记录此错误,查找第一次出现的错误并查看之前是否有任何异常。

  5. 仔细检查您是否确实备份了所有现有文件,然后重新启动 PostgreSQL。

  6. 尝试以用户 postgres 的身份连接到数据库 postgres 或数据库 template1。如果可行,则该文件是您的数据库文件之一,而不是全局用户列表或类似文件。

  7. 尝试使用正确的名称(和权限 - 检查其他文件)创建一个空文件。如果你真的很幸运,它只是一个索引。否则它可能是一个你可以不用的数据表。然后您可以单独转储其他表。

  8. 好的 - 如果你在这里,那么你可以连接到你的数据库。文件路径中的这些数字是 PostgreSQL 标识系统对象的 OID。您可以在此处尝试几个有用的查询。这两个查询应该为您提供数据库的 ID,然后是缺少文件的对象。这对您的专业人士来说也是有用的信息。

    从 pg_database 中选择 oid、datname、dattablespace; SELECT * FROM pg_class WHERE relfilenode = 16691;

记住在修改之前确保你有文件系统备份

【讨论】:

  • 谢谢,理查德!只是一些评论:我不知道发生了什么,可能是电源故障。我可以连接到两个数据库(template1 和损坏的那个)。日志中没有什么奇怪的,最让我烦恼的是文件/目录(1663/17269/16691)都不存在。我会联系专业支持。
  • 他们可能会在听到您使用 8.0 时哭泣——该版本于 2005 年发布!我很惊讶目录不存在——尤其是 1663——应该是你的数据库。我已经编辑了答案,您可以进行更多故障排除。
猜你喜欢
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 2014-10-28
  • 2014-09-03
  • 2015-03-30
  • 1970-01-01
相关资源
最近更新 更多