這是微軟社區精英項目傳過來的一個案例。 我當時給瞭解決方案。
問題描述:
環境說明:
作業系統 win2003
資料庫 SQL SERVER 2000 SP4
資料庫資料大小 150GB左右
具體故障描述:
串連門戶系統
提示無法串連到設定管理員
去伺服器本地查看
右下角提示
資料庫所在的磁碟已滿
於是把SQL服務停掉
該磁碟立即有十幾GB的空間釋放
重新啟動SQL服務
串連門戶系統
依然提示無法串連設定資料庫
在SQL控制台串連該資料庫也是連不上
門戶系統共三台伺服器 :
10.205.1.6 應用系統伺服器 SharePoint
10.205.1.7 門戶DB 伺服器 資料庫伺服器 SQL 2000
10.205.1.5 DC伺服器
出現該錯誤的是10.205.1.7 資料庫伺服器
錯誤截屏:
解決方案:
這個問題初步看起來是SharePoint_Config和tempdb資料庫的記錄檔佔用過大空間,以致於所在磁碟空間滿了。
要解決這個問題,要稍微麻煩點。因為磁碟空間已滿,SqlServer服務有可能無法正常啟動。先不要讓應用程式串連資料庫,SharePoint也不要串連資料庫。試著啟動SqlServer服務。看看能否啟動起來。如果不能,需要騰出來一點空間來。刪除一些暫時不要的軟體。總之要讓SqlServer服務啟動起來。如果SqlServer服務能起來,就做下面的。
開啟Sql Analyzer, 執行如下語句:
backup log tempdb with no_log --清除交易記錄
go
backup log SharePoint_Config with no_log --清除交易記錄
go
use tempdb
go
dbcc shrinkfile (tempdev, 10240) --調整tempdb的主要資料檔案大小為10240 MB, 可根據需要調整, 這個命令不是必須執行的。
go
dbcc shrinkfile (templog, 10240) --調整tempdb的交易記錄檔大小為10240 MB, 可根據需要調整
go
--對於SharePoint_Config資料庫, 通常, 它的主要資料檔案的logic name應該是SharePoint_Config, 它的交易記錄資料檔案名是SharePoint_Config_log, 也可能不是這個
--可以用 如下的命令來查它的資料檔案的logic name,
use SharePoint_Config
go
select name from sysfiles;
go
知道了交易記錄檔的logic name, 就寫命令:
use SharePoint_Config
go
dbcc shrinkfile (SharePoint_Config_log, 10240) --調整SharePoint_Config資料庫的交易記錄檔大小為10240 MB, 可根據需要調整, SharePoint_Config_log應該是前面的select name from sysfiles查出來的名字。這裡暫時用SharePoint_Config_log。
go
以上能解決當前的問題。
更深的問題
為什麼交易記錄會出現佔滿空間?
通常交易記錄檔是這樣的檔案名稱: <資料庫名>_log.ldf。它有個初始大小。比如500MB。我們對資料庫的增刪改都會對資料庫中資料作出改動。所有的改動都被SqlServer記錄到交易記錄中了。隨著時間的推移,交易記錄檔<資料庫名>_log.ldf就會慢慢被交易記錄佔滿,當交易記錄檔<資料庫名>_log.ldf被佔滿時,SqlServer會根據某些特定策略來處理,一個常見的做法是增加交易記錄檔<資料庫名>_log.ldf 10%的空間。這避免了交易記錄檔<資料庫名>_log.ldf滿而使資料庫事務失敗。磁碟空間不是無限的。總有一天交易記錄檔<資料庫名>_log.ldf就不能再增加體積了。就出現了上面的情況。
什麼才是正確的做法?
1. 為交易記錄檔<資料庫名>_log.ldf分配固定的大小, 不能自動成長。其實針對資料庫主檔案<資料庫名>.mdf也是如此。
2. 製作資料庫監視任務,交易記錄將滿的時候, 自動備份交易記錄來減小交易記錄佔用的空間.