3

我刚刚用 Firebird 数据库发生了一些非常奇怪的事情。

我试图创建一个表,但 CREATE TABLE 由于某种原因失败了。但是现在它陷入了一种非常奇怪的状态:

如果我再次尝试CREATE TABLE使用相同的表名,则会出现错误:该表已存在。但是,如果我尝试访问DROP TABLE该表,则会出现错误:该表不存在。尝试使用SELECT * FROM该表会出现“表不存在”错误,并且该名称不会出现在元数据查询中:

SELECT RDB$RELATION_NAME
  FROM RDB$RELATIONS
 WHERE RDB$SYSTEM_FLAG=0

因此,出于某种原因,该表似乎确实不存在,但我无法创建它,因为某处的某些东西表明它确实存在。

有谁知道如何解决这个问题?我已经尝试关闭与该数据库的所有连接,这在过去有助于解决不一致问题,但这次没有帮助。

4

1 回答 1

2

当您尝试创建表时,您没有详细说明错误是什么,所以我无法评论它。但RDB$RELATIONS不是创建表时唯一受影响的系统表。也许您现在处于一种不一致的情况,即有关该表的某些信息存在于某些系统表中,而在其他系统表中不存在。

另一种选择是系统表中的索引损坏,因此记录不存在,但索引认为它仍然存在。

尝试进行备份/恢复,看看是否有帮助。如果它不起作用,请尝试在其他系统表(RDB$RELATION_FIELDS等)中搜索与该“未创建”表相关的记录,如果找到,请尝试删除它们。

作为最后一个选项,您可以使用正确的元数据创建一个新的干净数据库,并使用IBDataPump.

于 2012-08-23T00:10:04.623 回答