我刚刚在Firebird数据库中遇到了一些非常奇怪的事情。
我试图创建一个表,而CREATE TABLE由于某种原因失败了。但现在它处于一个非常奇怪的状态:
如果我再次使用相同的表名尝试CREATE TABLE
,则会出错:表已存在。但是,如果我尝试DROP TABLE
该表,则会出错:表不存在。尝试SELECT * FROM
该表给出“表不存在”错误,并且名称未显示在元数据查询中:
SELECT RDB$RELATION_NAME
FROM RDB$RELATIONS
WHERE RDB$SYSTEM_FLAG=0
因此出于某种原因,该表似乎不存在,但我无法创建它,因为某处某处表明它确实存在。
有没有人知道如何解决这个问题?我已经尝试关闭与该数据库的所有连接,这有助于解决过去的不一致问题,但这次没有帮助。
答案 0 :(得分:2)
您没有详细说明尝试创建表时的错误,因此我无法对其进行评论。但是RDB$RELATIONS
并不是创建表时唯一受影响的系统表。也许您现在处于一种不一致的情况,其中某些系统表中存在有关该表的某些信息,而其他系统表中则不存在。
另一个选项是系统表中的索引已损坏,因此记录不存在,但索引认为它仍然存在。
尝试进行备份/恢复,看看是否有帮助。它不起作用,尝试在其他系统表(RDB$RELATION_FIELDS
等)中搜索与“非创建”表相关的记录,如果找到,请尝试删除它们。
作为最后一个选项,您可以使用正确的元数据创建一个新的干净数据库,并使用IBDataPump
将数据提取到该数据库。