SQL Server:如何缩小FileStream文件?

对于一个项目,我正在使用SQL Server 2008 R2。 一个表有一个文件stream列。

我做了一些负载testing,现在数据库有20GB的使用。

我有空表,除了几个(configuration表)。 但是我的数据库还在使用很多空间。 所以我使用Task -> Shrink -> Database / Files但我的数据库仍然使用像16GB的东西。

我发现它的文件stream文件仍然使用了很多空间。

问题是我需要备份这个数据库将其导出到最终的生产服务器上,如果我指出压缩备份的事件,我得到一个超过3.5Go的文件。 不方便存储和上传。

而且我正在计划更大的testing,所以我想知道如何缩小这个空间。

当我尝试时: 在这里输入图像说明

我得到这个例外: 在这里输入图像说明

 The properties SIZE, MAXSIZE, or FILEGROWTH cannot be specified for the FILESTREAM data file 'FileStreamFile'. (Microsoft SQL Server, Error: 5509) 

所以我该怎么做?

我发现这个错误的几个主题,但他们是关于删除filestream列。

旧版本的文件通过在检查点过程中运行的garabage收集过程从文件stream中移除。

请参阅http://sqlskills.com/BLOGS/PAUL/post/FILESTREAM-garbage-collection.aspx以获取完整说明。

所以 – 你跳过所有的环节,运行日志备份,检查点,然后你……等等,因为愚蠢的垃圾收集器似乎只是以每秒4或5的速度删除文件。

在2012年新的,我想? 是sp_filestream_force_garbage_collection( http://msdn.microsoft.com/en-us/library/gg492195.aspx ) – 但我没有使用它,所以我不能说它是多么有效。

我使用了powershell脚本遍历文件stream文件并清空它们的内容。 (注意,只要你不需要它,这将删除所有logging中的文件stream数据)

你将需要改变你的filesteam文件夹的path,但这实际上是我用过的。

 $files = Get-ChildItem -Path "C:\MSSQL\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\MyDbRestore_9.MyDbRestore_Filestream" -Recurse -File -Exclude "*.hdr" ForEach ($file in $files) { Clear-Content $file.FullName }