TFS:TF30042 資料庫已滿 處理方法

weixin_34067049發表於2015-03-06
原文: TFS:TF30042 資料庫已滿 處理方法

今天早上,公司打來電話,說TFS(Team Foundation Server)微軟原始碼管理軟體簽入不了,報錯:TF30042 資料庫已滿。



經過差不多半個小時的處理,基本上好了,再次總結一下:

根據提示,我先檢查磁碟空間,發現都有幾十G(公司的TFS資料庫比較大,光壓縮備份就有20G以上),足夠用來備份。

檢查完硬碟空間後,接著檢查資料庫空間,發現日誌檔案的確滿了,按照常規思路,做了一次日誌備份。正常來說,這已經能清空日誌了。但是發現還是不行。為此也頭疼了一下。看看恢復模式,是完整的,然後我就換成大容量日誌,其實這一步我覺得有點多餘,因為作為原始碼管理,頻繁簽出簽入是很正常,但是幾乎沒有大容量插入的,所以換這個模式作用不大,只是作為“試探性”的動作而已。

後來看到網上的提示說檢查一下SQLServer的錯誤日誌,再次說明一下,很多DBA書籍上對問題檢查都是這樣的順序:1、檢查windows錯誤日誌;2、檢查SQLServer的錯誤日誌然後再去做對應的處理。我由於經驗不足,直接跳過了,反倒是問題處理延緩了。在檢查了錯誤日誌後,的確發現一些有用資訊:


根據【訊息】,我去資料庫用以下程式碼查詢:

SELECT name, log_reuse_wait_desc FROM sys.databases  where 
log_reuse_wait_desc = 'Replication'

發現只有一條記錄,就是我的TFS資料庫:Tfs_HKITCollection。然後到MSDN上查。發現Replication這個狀態是因為還原了某些釋出的資料庫或者沒有正確移除而導致的,而我的伺服器上沒有任何複製資料庫,但在我接手之前我就不清楚了。還是先解決問題

執行:

sp_removedbreplication '指定資料庫'

根據聯機叢書對這個儲存過程的解釋:
只有當其他刪除複製物件的方法都失敗後,才應當使用此過程。

執行完後,在查詢上面的語句:
SELECT name, log_reuse_wait_desc FROM sys.databases  where name='Tfs_HKITCollection'

發現log_reuse_wait_desc這一列已經變回log backup,證明處理成功,然後我再做一次日誌備份。資料庫TFS就可以訪問了。
到此為止,問題算是處理完畢。另外,如果有必要,可以收縮一下資料庫。

補充一些相關知識:
--檢查當前資料庫是否可以用於複製,1 = TRUE,0 = FALSE,可以更改DB_NAME()來檢查其他資料庫。2008之前不知道可否使用。
SELECT DATABASEPROPERTYEX ( DB_NAME() , 'IsPublished' )

至於複製,超過本文範圍,本文主要記錄處理心得,希望有同樣情況的人能得到解決,也作為自己的一個記錄。

相關文章