我有一个SQL Server 2005开发数据库,它是实时的30GB副本。我们删除了一些dev中不需要的数据,这使使用的数据文件空间减少到20GB。因此,我们约有33%的未使用。
我需要回收空间,这将允许我们在服务器上拥有第二个开发数据库(基于缩减版本);但是,我无法回收空间,我做了以下工作:
文件的初始大小
SMS2_Data
为30GB。DBCC SHRINKFILE (N'SMS2_Data' , 0, TRUNCATEONLY)
其次是
DBCC SHRINKFILE (N'SMS2_Data' , 19500)
不开心 我尝试进行备份,创建一个初始大小较小的新数据库,然后还原,但由于初始大小被覆盖而感到不高兴。也尝试过:
ALTER DATABASE SMS2HazSub MODIFY FILE (NAME = 'SMS2_Data', SIZE = 20000)
这是错误的,说:
修改文件失败。指定的大小小于当前大小。
我尝试了20800,然后一直提高到29000(29GB),但仍然不允许我更改它。
完成收缩后,将恢复模式从更改FULL
为SIMPLE
,然后再次更改。不开心
我认为这与某些TEXT
领域有关。我们整个系统中大约有6个。因此,作为测试,我将它们全部删除,然后缩小了文件,但仍然没有变化。
剩下的唯一选择是将数据重新导入到另一个数据库。这是不切实际的,因为必须在实时数据库上进行,因为这样做会带来很大的风险。我们半定期地获取实时数据库的副本并覆盖dev / test。我们有大约500张桌子。我想要一种不会将数据导出到新数据库的风险的方法。
我尝试将数据移动到另一个文件,它复制了除5%之外的所有数据。这就是导致我尝试删除所有文本列的原因。
服务器处于兼容模式90,但为SP2。我现在做了以下3次:重新索引所有表,备份数据库,收缩文件,收缩数据库。仍然没有喜悦。
EXECUTE sp_spaceused
返回:
database_name database_size unallocated space
SMS2Tests 31453.94 MB 13903.16 MB
reserved data index_size unused
16545568 KB 10602264 KB 4254360 KB 1688944 KB