我有一個9.0.1數據庫有兩個損壞的表(一個表有20行,其他140)。 似乎細進行讀/選擇操作,但在表中產生錯誤消息更新某些行的表:調試postgres 9.0.1表損壞
update media set updated_at = now() at time zone 'UTC';
錯誤:在文件無法讀取塊2「鹼/16485分之16384」:只讀0的8192個字節
update media_status set updated_at = now() at time zone 'UTC';
2011-04-14 0點15分15秒UTC ERROR:不能在文件讀取塊3 「鹼/16543分之16384」:只讀0 8192個字節
2011-04- 14 00:15:15 UTC STATEMENT:update'media_status set updated_at = now()at'UTC';
檢查損壞的文件在文件系統中(Linux)的,它們不是零字節: LL鹼/一萬六千四百八十五分之一萬六千三百八十四 -rwx ------ 1個Postgres的postgres的16384 2011-04-07 9時43基地/ 16384/16485
我運行了一個「真空(FULL,VERBOSE)」命令和腐敗(至少在更新上的錯誤)已經消失。預計「真空(FULL)」命令是否會/可以修復表損壞?這是否提供了可能發生的線索?
有什麼方法可以確定如何/何時發生這種腐敗?
我懷疑它可能發生在文件系統級備份期間(即pg_start_backup(),tar -czf ...,pg_stop_backup()),因爲我執行了備份並將數據庫移至其他系統。恢復文件並啓動postgres後,我開始收到這些錯誤。我曾嘗試使用相同的tar歸檔進行多次恢復(在不同的系統上)。
感謝, 丹
謝謝@Peter,這是僅使用本地存儲(RAID 1)。我實際上仍然有文件損壞版本的副本,但不知道如何解釋/讀取它們。我能夠'貓'他們。 – 2011-04-14 15:52:29