日期:2014-05-17  浏览次数:20575 次

unallocated space无法释放问题[紧急]
sql server 2008 r2


使用sp_spaceused命令发现:
unallocated space

非常大,50G中有35G是 unallocated space 这个应当怎么释放掉?


用一般的数据库和文件收缩无法释放。

谢谢!

------解决方案--------------------
....那是未分配的空间。。。
------解决方案--------------------
DBCC SHRINKFILE (DB_log, n)
------解决方案--------------------
dbcc shrinkfile 
对数据库文件和日志文件分别收缩

另外使用sp_spaceused的时候
exec sp_spaceused true 这样会更新一下统计信息
不加true你看到的可能不是最新的
------解决方案--------------------
EXEC sp_spaceused @updateusage='true'
------解决方案--------------------
重建一下聚集索引再收缩咯
------解决方案--------------------
在频繁进行增删的表上重建索引试试

dbcc dbreindex('表名','',90)
------解决方案--------------------
探讨

重建一下聚集索引再收缩咯

------解决方案--------------------
不重建索引的话可能根本收缩不了的,SQL Server管理数据库文件的级别是区,重建索引可以腾出很多空区,这样就可以收缩掉了。 

如果是HEAP表的话建议重新创建表然后将数据导入到新表然后改名,否则可能无法收缩。 


------解决方案--------------------
重建了索引,能把数据重组。这样有可能空出某些区,由于收缩是基于区一级的操作。所以收缩起来才有意义,如果本来可以集中在一个区的数据零散分布于多个区,收缩是没有效果的。
------解决方案--------------------
探讨

Reserved下面的unused可以通过重建聚焦索引解决,但对unallocated space没有用。这些方法都试过了。


现在想释放掉:unallocated space,还有没有好的办法?

------解决方案--------------------
运行DBCC CHECKDB检查一下数据库
------解决方案--------------------
如果数据库有完整备份,使用备份来恢复数据库
如果没有备份使用DBCC CHECKDB
使用dbcc checkdb 的repair_rebuild参数:不丢失数据
不行的话使用repair_allow_data_loss :有可能丢失数据