Subversion Berkeley DB 讀取當機的處理方式
今天在用 TortoiseSVN 把支線(branch) 專案合併到 trunk 的時候發現內建的合併(Merge)功能根本無效。後來換了 Kdiff3、WinMerge 來做合併的狀況也是一樣。
反正檔案只有一個,乾脆就先手動合併之後再升級最新的 TortoiseSVN 1.3.0-RC2 試試,結果反而發現只要一讀取檔案庫的根目錄就當在那邊了。後來再 Downgrade 到 TortoiseSVN 1.2.6 狀況也還是一樣。
這時只好改用 svnadmin 檢查一下,看起來似乎檔案庫出了問題,出現 Invalid Argument 的訊息,而且還出現要用 Berkeley DB 4.2 環境的提示。
從 Subversion 1.20 開始,如果拿 Windows 當 Subversion Server ,Berkeley DB 依官方說法是要升級到 4.3 ,出現要 BDB 4.2 的訊息真的匪夷所思。
於是我就先把 Subversion 的版本從 1.2.0 升級到 1.2.3 ,這時果然剛剛的出現的 BDB 4.2 錯誤訊息不見了,而檔案庫(repeository) 用 svnadmin 來存取的狀況也跟 TortoiseSVN 一樣,完全沒有任何反應(就是當在那邊)。
至少跟 TortoiseSVN 的反應一樣就好辦了,索性把 Berkeley DB 的記憶體暫存檔(db/__db.*) 全給刪了,這時 svnadmin 可以正常存取檔案庫(repeository)了,使用 TortoiseSVN 果然也正常了。
至於發生的原因應該是在 TortoiseSVN 1.3.0-RC2 讀取檔案庫的時候不知道做了什麼事,導致 TortoiseSVN Crash 掉後出現了回報錯誤的視窗,再來檔案庫就無法再讀取了。
註: 剛剛看到 Suberversion 出 1.3.0 了,只是現在案子趕,沒時間升級了。