当你在SqlServer创建数据库的时候可以指定数据库文件的初始大小,比如下图中我们将新创建的数据库MyDB的大小设置成了1024MB
那么你建好的数据库的确也就会占用1024MB左右的磁盘空间
不过使用存储过程sp_spaceused可以看到其中有1021.85 MB的空间是MyDB占用着并未使用。
于是我们在想是不是可以用DBCC ShrinkDatabase或DBCC ShrinkFile语句收缩未使用的数据库空间
dbcc shrinkdatabase(‘MyDB‘,10)
但是执行Shrink语句后我们发现数据库大小没有丝毫变化。。。
并且在执行Shrink语句后得到提示
这说明Sqlserver认为MyDB没有空间可以收缩。。。但是实际上我们通过存储过程sp_spaceused可以看到MyDB的确是有1021.85 MB的空间是没使用的。不能收缩数据库的原因其实是新建SqlServer数据库的时候指定的初始大小是不能被收缩掉的,要使用Alter Database语句或者在SMSS中重新指定MyDB的初始大小才能够收缩未使用的空间。
现在我们在SMSS中将MyDB的初始大小更改为800MB
可以看到现在MyDB的大小的确是在800MB左右了
然后现在再把MyDB的初始大小改回1024MB
然后此时再执行dbcc shrinkdatabase(‘MyDB‘,10),可以看到数据库大小变为了800MB左右,所以实际上shrinkdatabase语句只能把数据库收缩为 自数据库创建之初以来指定过的最小的初始文件大小,如果你的数据库第一次创建的时候初始大小就是1024MB,并且之后都没有人为调动过大小那么抱歉你的数据最小也就只能收缩到1024MB,尽管可能其中有1023MB都没有被实际用到。。。
时间: 2025-01-02 01:12:44