压缩文件

本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2014 中收缩数据或日志文件。

收缩数据文件通过将数据页从文件末尾移动到更靠近文件开头的未占用的空间来恢复空间。 在文件末尾创建足够的可用空间后,可以取消对文件末尾的数据页的分配并将它们返回给文件系统。

本主题内容

在您开始之前

局限性与限制

  • 主数据文件不能小于模型数据库中主文件的大小。

建议

  • 被移动用来收缩文件的数据可以分布到文件的任何可用位置。 这将导致索引碎片并使搜索索引范围的查询变慢。 若要消除碎片,请考虑在收缩后重新生成文件的索引。

安全

权限

要求具有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员身份。

使用 SQL Server Management Studio

收缩数据或日志文件

  1. 在对象资源管理器中,连接到 SQL Server 数据库引擎的实例,然后展开该实例。

  2. 展开 数据库 然后右键单击要压缩的数据库。

  3. 指向 “任务”,指向“ 收缩”,然后单击“ 文件”。

    数据库
    显示所选数据库的名称。

    文件类型
    选择文件的文件类型。 可用选项包括数据和日志文件。 默认选择为 Data。 选择其他文件组类型会相应地更改其他字段中的选择。

    文件组
    从上面所选 文件类型 关联的文件组列表中选择文件组。 选择其他文件组会相应地更改其他字段中的选择。

    文件名
    从所选文件组和文件类型的可用文件列表中选择一个文件。

    位置
    显示当前所选文件的完整路径。 路径不可编辑,但可以复制到剪贴板。

    当前分配的空间
    对于数据文件,显示当前分配的空间。 对于日志文件,显示从 DBCC SQLPERF(LOGSPACE)输出计算的当前分配空间。

    可用空间
    对于数据文件,显示从 DBCC SHOWFILESTATS(fileid)输出中计算的当前可用可用空间。 对于日志文件,显示从 DBCC SQLPERF(LOGSPACE)输出中计算的当前可用可用空间。

    释放未使用的空间
    将文件中任何未使用的空间释放到操作系统,并将文件缩小到最后一个已分配的区,从而减少文件大小,且不移动任何数据。 不会尝试将行重新定位到未分配的页面。

    在释放未使用的空间之前重新组织页面
    等效于执行 DBCC SHRINKFILE 并指定目标文件大小。 选择此选项后,用户必须在 “收缩文件到 ”框中指定目标文件大小。

    将文件收缩到
    指定压缩操作的目标文件大小。 大小不能小于当前分配的空间或大于分配给文件的总盘区。 输入超出最小值或最大值的值将在焦点发生更改或单击工具栏上的任何按钮时还原为最小值或最大值。

    通过将数据迁移到同一文件组中的其他文件来清空文件
    从指定文件迁移所有数据。 此选项允许使用 ALTER DATABASE 语句删除文件。 此选项等效于使用 EMPTYFILE 选项执行 DBCC SHRINKFILE。

  4. 选择文件类型和文件名。

  5. (可选)选中“ 释放未使用的空间 ”复选框。

    选择此选项会导致文件中的任何未使用空间释放到操作系统,并将文件缩小到最后一个分配的范围。 这样可减小文件大小,而无需移动任何数据。

  6. (可选)在 释放未使用的空间复选框之前,选择“重新组织文件 ”。 如果选择了文件缩减至,则必须指定此值。 默认情况下,清除该选项。

    选择此选项会导致文件中的任何未使用空间释放给操作系统,并尝试将行迁移到未分配的页面。

  7. (可选)输入数据库收缩后在数据库文件中留下的最大可用空间百分比。 允许的值为 0 到 99。 只有在 启用释放未使用的空间之前重新组织文件时 ,此选项才可用。

  8. (可选)通过将数据 迁移到同一文件组中的其他文件 复选框来选择空文件。

    选择此选项会将指定文件中的所有数据移动到文件组中的其他文件。 然后,可以删除空文件。 此选项与使用 EMPTYFILE 选项执行 DBCC SHRINKFILE 相同。

  9. 单击 “确定”

使用 Transact-SQL

收缩数据或日志文件

  1. 连接到数据库引擎。

  2. 在标准栏中,单击“新建查询”

  3. 将以下示例复制并粘贴到查询窗口中,然后单击 执行。 此示例使用 DBCC SHRINKFILE 将数据库中命名DataFile1UserDB的数据文件的大小缩小到 7 MB。

USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO

另请参阅

DBCC SHRINKDATABASE (Transact-SQL)
收缩数据库
从数据库中删除数据或日志文件
sys.databases (Transact-SQL)
sys.database_files(Transact-SQL)