缩小 MDF 文件

Ива*_*чев 5 sql-server-2005

我在 sql server 2005 上有一个大数据库。缩小数据文件后,数据库仍然很大:大约 9 GB。

以下是来自 sp_spaceused 的一些数据:

exec [dbname].dbo.sp_spaceused

reserved     |data kb     |index_size   |unused    |
10221976 KB  |849240 KB   |9367456 KB   |5280 KB   |
Run Code Online (Sandbox Code Playgroud)

我可以用吗

DBCC SHRINKFILE(logic_name_dat, 1000(Mb))
Run Code Online (Sandbox Code Playgroud)

不会丢失该数据库上的用户数据?

小智 4

是的,缩小文件不会丢失任何用户数据。但是,文件会增长,因此增长操作不会一直发生,因此通过缩小文件,您可能会选择物理大小而不是性能。此外,如果它增长得太快,您应该更改它的增长方式以及控制它的程度 - 但默认情况下它会以文件实际大小的百分比增长。

请记住,您所做的只是要求它使用文件的缓冲区部分占用更少的磁盘空间,它不会缩小到超过它能够使用物理数据作为其限制的范围。

  • 另外:收缩数据库将以一种非常愚蠢的方式复制大量数据页,因此最终您的索引将严重碎片化。如果您定期收缩数据库文件 - 请确保在执行此操作后重建所有索引! (4认同)
  • @marc_s +1 给你的评论。OP 不应该为了获得很少甚至没有空间收益而引入如此多的碎片。 (4认同)
  • +1,没有数据丢失:“[DBCC SHRINKFILE](http://msdn.microsoft.com/en-us/library/ms189493(v=sql.90).aspx) 不会将文件缩小到超过所需的大小将数据存储在文件中。例如,如果使用 10 MB 数据文件中的 7 MB,则 target_size 为 6 的 DBCC SHRINKFILE 语句会将文件缩小到仅 7 MB,而不是 6 MB。 (3认同)