将数据库缩小到其初始大小以下

10 sql-server-2005 sql-server shrink

我有一个 SQL Server 2005 开发数据库,​​它是一个 30GB 的 live 副本。我们删除了一些开发中不需要的数据,这使得使用的数据文件空间降到了 20GB。所以我们有大约 33% 未使用。

我需要回收空间,这将允许我们在服务器上拥有第二个开发数据库(基于缩减版本);但是,我无法收回空间,我已完成以下操作:

没有喜悦。我尝试进行备份,创建一个初始大小较低的新数据库,然后恢复,但初始大小被覆盖时并不高兴。也试过:

ALTER DATABASE SMS2HazSub MODIFY FILE (NAME = 'SMS2_Data', SIZE = 20000) 
Run Code Online (Sandbox Code Playgroud)

这错误,说:

修改文件失败。指定大小小于当前大小。

我尝试了 20800,然后一直上升到 29000(29GB),但它仍然不让我改变它。

完成了收缩,然后将恢复模式从FULLSIMPLE和再更改回来。没有喜悦。

我认为这与某些TEXT领域有关。我们在整个系统中大约有 6 个。因此,作为测试,我将它们全部删除,然后对文件进行了缩小,但仍然没有变化。

剩下的唯一选择是将数据重新导入另一个数据库。这是不切实际的,因为它必须在实时数据库上完成,这会带来太多风险。我们半定期地获取实时数据库的副本并覆盖开发/测试。我们有大约 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
Run Code Online (Sandbox Code Playgroud)

p.c*_*ell 1

如果你真的想这样做:

  • 将恢复模式设置为简单
  • 意识到:DBCC SHRINKDATABASE (MyDatabase, TRUNCATEONLY);