2012-08-22 30 views
3

我剛剛發生了一件非常奇怪的事情發生在我與Firebird數據庫。如何處理一個火鳥表,這顯然是在那裏,不存在

我試圖創建一個表,並且CREATE TABLE由於某種原因失敗。但現在它陷入了一個非常奇怪的狀態:

如果我再次嘗試CREATE TABLE具有相同的表名,它會給出一個錯誤:表已經存在。但如果我嘗試DROP TABLE那個表,它會給出一個錯誤:表不存在。試圖SELECT * FROM該表給出了「表不存在」的錯誤,並且名稱不會在元數據查詢顯示:

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

所以,出於某種原因,該表似乎真的不應該存在的,但我無法創建它,因爲某處某處表明它確實存在。

有沒有人有任何想法如何解決這個問題?我已經試過關閉所有與該數據庫的連接,這對過去的不一致問題有所幫助,但是這一次沒有幫助。

+0

您是否嘗試過手動清理數據庫? http://www.firebirdsql.org/manual/gfix-housekeeping.html#d0e29976 –

回答

2

當您嘗試創建表格時,您沒有提供有關錯誤的詳細信息,因此我無法對其進行註釋。但RDB$RELATIONS不是創建表時受影響的唯一系統表。也許你現在處於一種不一致的情況,那就是某些系統表中存在關於該表的一些信息,而其他系統表中卻不存在。

另一種選擇是系統表中的索引損壞,所以記錄不存在,但索引認爲它仍然存在。

嘗試做一個備份/恢復,看看它是否有幫助。它不起作用,嘗試在其他系統表(RDB$RELATION_FIELDS等)中搜索與「未創建」表相關的記錄,如果找到任何記錄,請嘗試刪除它們。

作爲最後一個選項,您可以使用IBDataPump創建一個包含正確元數據的新干淨數據庫,並將數據抽取到該數據庫。

+0

可以添加分段符,因此不會發布文字牆。將它分成單獨的段落使得它更易於閱讀 - 這就是爲什麼它們是首先發明的原因。 :-) –

+0

我認爲你是對的;最有可能的情況是RDB $ RELATIONS.RDB $ RELATION_NAME上唯一索引中的條目無效 –