zoukankan      html  css  js  c++  java
  • 如何收缩超大的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

  • 相关阅读:
    leetcode 300. 最长上升子序列
    JAVA基础系列:Arrays.binarySearch二分查找
    leetcode 674. 最长连续递增序列
    小红书:笔试题(棋盘最短路径,笔记本草稿栈,迷宫游戏)
    VIPKID:笔试题(数组中和为0的一对数的数量,十进制转二进制中1的个数)
    [******] 树问题:普通二叉树的创建与遍历
    [******] 链表问题:将单向链表按某值划分成左边小、中间相等、右边大的形式
    [******] java多线程连续打印abc
    快手:笔试题(版本号比较,平方和为1,合并两个流)
    京东:笔试题(合唱队找剩余的最小值,考场安排搬出的人数尽可能少)
  • 原文地址:https://www.cnblogs.com/jianyus/p/5192541.html
Copyright © 2011-2022 走看看