2013-11-04 45 views
1

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

问候。

RP

+0

第一步:立即关闭它并获取所有postgresql相关目录的文件系统级副本。 – bma

+0

是否做到了。数据文件夹脱机。 –

+0

您是否已经尝试将文件系统副本复制到另一台服务器并启动该群集?它开始了吗? – bma

回答

2

如果你希望你的数据备份在赶时间,它的价值的东西给你,那么专业的支持选项应该足够简单。

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

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

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

  3. 记下所发生的一切以及之前发生的情况。这将有助于为您或顾问进行故障排除。

  4. 同样检查日志 - 将记录此错误,找到第一个匹配项并查看之前是否有任何奇怪的事件。

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

  6. 尝试以用户postgres连接到数据库postgres或数据库模板1。如果有效,那么该文件就是您的数据库文件之一,而不是全局用户列表或其他文件。

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

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

    SELECT oid,datname,dattablespace FROM pg_database; SELECT * FROM pg_class WHERE relfilenode = 16691;

记住请确保您有修修补补前的文件系统备份。

+0

谢谢,理查德! 只是一些言论:我不知道发生了什么事情,它可能是一个电源故障。我可以连接到两个数据库(template1和损坏的数据库)。在日志中没有什么奇怪的,最让我感到困扰的是没有任何文件/目录(1663/17269/16691)存在。 我会联系专业支持。 –

+0

他们听到你的声音在8.0时可能会哭泣 - 这是2005年发布的!我很惊讶目录不存在 - 特别是1663 - 这应该是你的数据库。我已经编辑了答案,并提供了一些可以解决的问题。 –