收缩 SQL 服务器中的数据库

Shrink the database in SQL Server

我有一个几乎已满的数据库,我们有一些选项来处理这个问题:

  1. 我们可以增加数据库文件大小
  2. 收缩数据库

在我选择第一个选项之前,我想知道如何检查数据库大小以及其中实际有多少数据,以便我可以缩小数据库以获得一些免费 space。

您可以通过几种不同的方式获取此信息。在 SSMS 中,您可以右键单击数据库,选择属性并查看文件。您的数据和日志文件将显示一个 "Initial" 值来指示大小。

您可以右键单击数据库,单击任务和收缩,然后文件和数据文件应该是默认显示的。这将显示您的尺码和免费 space.

您还可以 运行 显示数据库的所有大小和位置信息的脚本。您可以通过快速 Google 搜索找到其中的几个。

此外,还有一些内置的 SP 可以为您提供所描述的信息 here 第四个查询特别显示了免费的数量 space。

所以看看你在哪里没有使用space,什么文件有多大使用下面的查询....

Use DatabaseName
GO

Select name                                             AS [FileName]
     , size/128.0                                       AS [FileSize(MB)]
     , fileproperty(name, 'SpaceUsed')/128.0            AS [Space_Used(MB)]
     , (size - fileproperty(name, 'SpaceUsed')) /128.0  AS [FreeSpace(MB)] 
From dbo.sysfiles
GO

最后,当您决定收缩具有大量空闲空间的文件时 space 您可以使用 DBCC shrinkfile 命令来完成此操作。

USE DatabaseName
GO
DBCC SHRINKFILE ('FileName', 10)   --<-- will shrink it to 10 MB
GO

备注

如果任何未使用的 space 被 BLOB 数据类型(text、ntext、xml 等)列占用,您可能无法收回未使用的 space 除非你再次删除并重新创建 table。