1

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

问候。

反相

4

1 回答 1

2

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

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

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

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

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

  4. 同样检查日志 - 将记录此错误,找到第一个出现的地方,看看之前是否有任何奇怪的地方。

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

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

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

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

    从 pg_database 中选择 oid、数据名、数据表空间;SELECT * FROM pg_class WHERE relfilenode = 16691;

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

于 2013-11-04T17:49:49.347 回答