如何压缩SQL Server 2005指定数据库文件和日志的大小

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何压缩SQL Server 2005指定数据库文件和日志的大小?

下面有两个SQL语句可以达到在SQL Server 2005/2008压缩指定数据库文件和日志的大小的效果:1、DBCC SHRINKDATABASE (Transact-SQL)

收缩指定数据库中的数据文件和日志文件的大小。

语法

DBCC SHRINKDATABASE

( "database_name" | database_id | 0

[ ,target_percent ]

[ , { NOTRUNCATE | TRUNCATEONLY } ]

)

[ WITH NO_INFOMSGS ]

参数

"database_name" | database_id | 0 要收缩的数据库的名称或ID。如果指定0,则使用当前数据库。

target_percent 数据库收缩后的数据库文件中所需的剩余可用空间百分比。

NOTRUNCATE 通过将已分配的页从文件末尾移动到文件前面的未分配页来压缩数据文件中的数据。target_percent 是可选参数。文件末尾的可用空间不会返回给操作系统,文件的物理大小也不会更改。因此,指定NOTRUNCATE 时,数据库看起来未收缩。NOTRUNCATE 只适用于数据文件。日志文件不受影响。

TRUNCATEONLY 将文件末尾的所有可用空间释放给操作系统,但不在文件内部执行任何页移动。数据文件只收缩到最近分配的区。如果与TRUNCATEONLY 一起指定,将忽略

target_percent。TRUNCATEONLY 只适用于数据文件。日志文件不受影响。

WITH NO_INFOMSGS 取消严重级别从0 到10 的所有信息性消息。

结果集

列名说明

DbId 数据库引擎试图收缩的文件的数据库标识号。

FileId 数据库引擎尝试收缩的文件的文件标识号。

CurrentSize 文件当前占用的 8 KB 页数。

MinimumSize 文件最低可以占用的8 KB 页数。这与文件的最小大小或最初创建时的大小相对应。UsedPages 文件当前使用的8 KB 页数。

EstimatedPages 数据库引擎估计文件能够收缩到的8 KB 页数。

备注

若要收缩特定数据库的所有数据和日志文件,请执行DBCC SHRINKDATABASE 命令。若要一次收缩一个特定数据库中的一个数据或日志文件,请执行DBCC SHRINKFILE 命令。

若要查看数据库中当前的可用(未分配)空间量,请运行sp_spaceused。

可在进程中的任一点停止DBCC SHRINKDATABASE 操作,任何已完成的工作都将保留。

收缩后的数据库不能小于数据库的最小大小。最小大小是在数据库最初创建时指定的大小,或是使用文件大小更改操作(如DBCC SHIRNKFILE 或ALTER DATABASE)显式设置的最后大小。例如,如果数据库最初创建时的大小为10 MB,后来增长到100 MB,则该数据库最小只能收缩到10 MB,即使已经删除数据库的所有数据也是如此。

运行DBCC SHRINKDATABASE 而不指定NOTRUNCATE 选项或TRUNCATEONLY 选项等价于带NOTRUNCATE 运行DBCC SHRINKDATABASE 操作,然后再带TRUNCATEONLY 运行DBCC SHRINKDATABASE 操作。

要收缩的数据库不必在单用户模式下;其他的用户仍可以在数据库收缩时对其进行工作。这也包括系统数据库。

不能在备份数据库时收缩数据库。反之,也不能在数据库执行收缩操作时备份数据库。

DBCC SHRINKDATABASE 的工作原理

DBCC SHRINKDATABASE 以每个文件为单位对数据文件进行收缩。然而,DBCC SHRINKDATABASE 在对日志文件进行收缩时,它将视为所有的日志文件都存在于一个连续的日志池中。文件始终从末尾开始收缩。

假设名为mydb 的数据库有一个数据文件和两个日志文件。数据文件和日志文件分别是10 MB,并且数据文件包含 6 MB 数据。

Microsoft SQL Server 2005 数据库引擎对每个文件计算一个目标大小。这就是文件将要收缩到的大小。将target_percent 与DBCC SHRINKDATABASE 一起指定时,数据库引擎计算的目标大小是收缩后文件中的target_percent 可用空间大小。例如,如果在收缩mydb 时将target_percent 指定为 25,

则数据库引擎将此文件的目标大小计算为8 MB(6 MB 数据加上 2 MB 可用空间)。因此,数据库引擎将任何数据从数据文件的后 2 MB 中移动到数据文件前8 MB 的可用空间中,然后对该文件进行收缩。

假设mydb 的数据文件包含7 MB 的数据。将target_percent 指定为 30,以允许将此数据文件收缩到可用空间为30%。但是,将target_percent 指定为40 却不会收缩数据文件,因为数据库引擎收缩文件的目标大小不能小于数据当前占用空间大小。您还可以用另一种方法来考虑此问题:所要求的40%可用空间加上整个数据文件大小的70%(10 MB 中的7 MB),超过了100%。因为所要求的可用百分比加上数据文件占用的当前百分比大于100%(多出 10%),所以任何大于 30 的target_size 都不会收缩此数据文件。

对于日志文件,数据库引擎使用target_percent 来计算整个日志的目标大小;因此,target_percent 是收缩操作后日志中的可用空间大小。之后,整个日志的目标大小转换为每个日志文件的目标大小。

DBCC SHRINKDATABASE 尝试立即将每个物理日志文件收缩到其目标大小。如果虚拟日志中的所有逻辑日志部分都没有超出日志文件的目标大小,则该文件将成功截断,DBCC SHRINKDATABASE 完成且不显示任何消息。但是,如果部分逻辑日志位于超出目标大小的虚拟日志中,则数据库引擎将释放尽可能多的空间,并发出一条信息性消息。该消息说明需要执行哪些操作来将逻辑日志移出位于文件末尾的虚拟日志。执行该操作以后,DBCC SHRINKDATABASE 可用于释放剩余空间。有关详细信息,请参阅收缩事务日志。

因为日志文件只能收缩到虚拟日志文件边界,所以不可能将日志文件收缩到比虚拟日志文件更小(即使现在没有使用该文件)。虚拟日志文件的大小在创建或扩展这些日志文件时由数据库引擎动态选择。有关虚拟日志文件的详细信息,请参阅事务日志物理体系结构。

权限

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

示例

相关文档
最新文档