如何安全地释放数据库中1个表的未分配空间?

时间:2015-06-16 12:06:25

标签: sql sql-server shrink

我们的生产数据库位于SQL Server 2008 R2上。我们的一个表Document_Details存储用户通过我们的应用程序(VB)上传的文档。它们以varbinary(max)格式存储。 pdf格式的文件超过20k,其中许多文件很大(有些文件大小为50mb)。总的来说这个表是90GB。然后我们运行了一个将这些pdf文件压缩到10GB的exe。

然而,这就是问题所在 - 表格大小仍为90GB。未泄露的空间尚未释放。如何取消分配此空间以使表格为10GB?

我尝试将表移动到新文件组,然后返回原始文件组,但在任何一种情况下都没有释放任何空间。

我也尝试在桌面上重建索引,但这也不起作用。

做了什么工作(但我听说不推荐)是 - 从简单更改恢复类型,缩小文件组,将恢复设置为完全。

我可以将此表移动到新文件组,然后缩小该文件组(即只是Document_Details表)吗?我知道缩小命令会影响性能,但如果它只是1个表,它仍然会有问题吗?或者还有什么我可以尝试的吗?

感谢。

1 个答案:

答案 0 :(得分:0)

将表移动到文件组有一个问题:默认情况下,TEXTIMAGE数据(blob)不会被移动!表的行可以驻留在一个文件组和blob上,也可以驻留在另一个文件组上。这是SQL Server中的一个疯狂缺陷。也许通过重建表格,没有触及blob。

也可以使用其中一种众所周知的方法move lob data。这会重建它们并缩小它们。