如何收縮超大的SharePoint_Config數據庫


前言

  在已經運行了2年多的SharePoint服務器上,發現SharePoint_Config的數據庫文件越來越大,已經達到90幾個GB,收縮可以減小20幾個GB,但是一周以后又會恢復到90幾個GB大小,甚是奇怪。

  因為磁盤空間不足,一共只有200GB大小,還有大大小小網站若干,用來存放照片、視頻、文檔等,所以決定好好研究一下這個問題。

  經過不懈的谷歌,發現了問題症結所在,現在分享給大家,希望對遇到類似的問題的人,有個參考。

  對了,注意。。這里是指數據庫文件,不是數據庫的日志文件,如果是日志文件的話,在數據庫管理工具中,修改備份模式為簡單,直接收縮就好了!

  1、在數據庫服務器中打開Microsoft SQL Server Management Studio,找到SharePoint_Config數據庫,然后執行下面的語句:

EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"

  2、看到執行的結果,就是每個數據庫表的大小,然后看到TimerJobHistory這個表的行數非常多,大小也非常的大。

clip_image002

  3、谷歌有類似的解決方案,說是因為job-delete-job-history這個Job運行失敗,造成了Job運行的歷史記錄不能被及時清理,造成了配置數據庫越來越大。所以運行下面的腳本,會清理一年以來的積累,而這個Job默認每周運行一次,清理上周積累下來的歷史記錄。

$history = get-sptimerjob | where-object {$_.name -eq “job-delete-job-history”}

$history.daystokeephistory = 365

$history.update()

$history.runnow()

  4、運行完畢以后,還要將daystokeephistory數值改回7天,如下圖:

clip_image004

  5、可以看到運行以后,確實有個Job再運行,不過我這里可能由於已經超過365天了,所以也沒有起作用,Job依舊運行Failed。所以只能繼續谷歌,尋找解決方案。

clip_image006

  6、經過不懈的查找,發現了一個ps腳本,把下面腳本,存成一個ps1文件,執行一下,會起作用(至少我這里已經起作用了,會刪掉多余的歷史記錄);

Add-PSSnapin Microsoft.SharePoint.PowerShell

Write-Host "Clearing Down Timer Job History"

$daysToKeep = 300

$daysToPurgeInOneLoop = 5

while ($daysToKeep -gt 0)

{

$history = get-sptimerjob | where-object {$_.name -eq “job-delete-job-history”}

Write-Host " "

Write-Host -NoNewLine "Setting Days to Keep:"

Write-Host -ForegroundColor Green $daysToKeep

$history.DaysToKeepHistory = $daysToKeep

$history.update()

Write-Host -ForegroundColor Green "Starting Purge Job"

$lastTimeJobRan = $history.LastRunTime

$history.runnow()

Write-Host -NoNewLine -ForegroundColor Green "Waiting For Purge Job to Complete"

$jobFinished = $false

while ($jobFinished -eq $false)

{

Start-Sleep -Seconds 2

$runningJob = Get-SPTimerJob $history.Name

Write-Host -NoNewLine -ForegroundColor Yellow "."

if ($lastTimeJobRan -ne $runningJob.LastRunTime)

{

$jobFinished = $true

}

}

Write-Host " "

Write-Host -ForegroundColor Green "Ending Purge Job"

$daysToKeep = $daysToKeep - $daysToPurgeInOneLoop

}

Write-Host -ForegroundColor Green "Setting Final Job History Retention to 3 days, and schedule to run daily @ 5am"

$history.DaysToKeepHistory = 3

$history.update()

$history.runnow()

Set-SPTimerJob -Identity $history -Schedule "Daily at 05:00"

Write-Host -ForegroundColor Yellow "Please check row counts on dbo.TimerJobHistory Table in Config DB to ensure run complete"

結束語

  當然,執行PowerShell的命令需要很長時間,我這里用了大概1天時間,將90多個GB的SharePoint_Config收縮到了15個GB,效果還是很明顯的,整理出來很大一部分空間,不用經常做磁盤空間維護了。

附后

  PowerShell命令的參考地址:http://sharepoint.it-professional.co.uk/?p=228


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM