本文除特别说明外仅SharePoint 2007外,其他部分均为SharePoint 2010 。
回收站机制
通常情况下,回收站机制都有利于防止内容的永久删除与误删除。
通过第一回收站(End user Recycle Bin items),用户可以自己找回已经删除的项目,而不需要管理员介入。例如从备份文件中进行还原等等。
雕虫小技:点击”Recycle Bin”后,在浏览器地址栏中输入来清理数据: javascript:emptyItems();
注明:在07中可以使用清空回收站来一次性操作。
通过第二回收站(Delete from end user Recycle Bin items),还可以给用户一个台阶下,需要管理员来操作,并做合理的规划。
一是需要为启用第二回收站合理规划存储空间。至少为第二回收站分配第一回收站20%左右的空间。也就是说,如果第一回收站的空间为10G,那么第二回收站的空间最好为2G。
二是在启用双回收站机制的时候,同时启用自动清空机制。
另外需要注意,对于第二回收站,系统还有一个默认的自动覆盖策略。即当第二回收站的空间已经达到其最大的容量时,新增加进去的文件会覆盖旧的文件。这跟第一回收站不同。第一回收站如果满的话,系统并不会自动覆盖,而是会提醒用户,空间已满。此时用户可以进行手工清除,以腾空磁盘空间容纳新的文件。
回收站在网站日常维护中应该做好以下工作
一是最好使用回收站机制。二是在自动删除网站之前,最好能够对网站的内容进行自动存档。
检查回收站清理任务(SharePoint 2007)
注明:SharePoint 2010有待确认。
timer job The job-recycle-bin-cleanup job被配置为每天从 11pm到6am之间来运行。我们可以使用stsadm.exe命令来查看:
stsadm -o getproperty -pn job-recycle-bin-cleanup -url http://moss
输出的值为:
<Property Exist="Yes" Value="daily between 22:00:00 and 06:00:00" />
如何清空第二回收站(Delete from end user Recycle Bin items)
默认只有“Delete Selection”的 功能,一页最多只能删除200条数据。通常这里的数据会迅速膨胀的很大,我们通常的做法是采用SharePoint对象模型写个小程序。最高效的做法是使用Power Shell。
param([string]$Url, [switch]$help) [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") function GetHelp() { $HelpText = @" DESCRIPTION: NAME: Remove-SPSiteSecondStageRecycleBin Empties the second-stage recycle bin for a Microsoft.SharePoint.SPSite Collection PARAMETERS: -url Url to SharePoint Site Collection SYNTAX: Remove-SPSiteSecondStageRecycleBin -url http://moss Empties the second stage recycle bin for the SiteCollection. Remove-SPSiteSecondStageRecycleBin -help Displays the help topic for the script "@ $HelpText } function Remove-SPSiteSecondStageRecycleBin([string]$url) { $siteCollection = New-Object Microsoft.SharePoint.SPSite($url); $recycleQuery = New-Object Microsoft.SharePoint.SPRecycleBinQuery; $recycleQuery.ItemState = [Microsoft.SharePoint.SPRecycleBinItemState]::SecondStageRecycleBin; $recycleQuery.OrderBy = [Microsoft.SharePoint.SPRecycleBinOrderBy]::Default; $recycledItems = $siteCollection.GetRecycleBinItems($recycleQuery); $count = $recycledItems.Count; for($i = 0; $i -lt $count; $i++) { $g = New-Object System.Guid($recycledItems[$i].ID); $recycledItems.Delete($g); } $siteCollection.Dispose() } if($help) { GetHelp; Continue } if($url) { Remove-SPSiteSecondStageRecycleBin -url $url }