如何处理Firebird表,显然两者都存在而不存在

时间:2012-08-22 23:24:38

标签: sql firebird

我刚刚在Firebird数据库中遇到了一些非常奇怪的事情。

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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