1、为什么要收缩数据库SQL Server 2000 采取预先分配空间的方法来建立数据库的数据文件或者日志文件,比如数据文件的空间分配了 100MB,而实际上只占用了 50MB 空间,这样就会造成存储空间的浪费。为此,SQL Server 2000 提供了收缩数据库的功能,允许对数据库中的每个文件进行收缩,删除已经分配但没有使用的页。不能将整个数据库收缩到比其原始大小还要小。因此,如果数据库创建时的大小为 10 MB,后来增长到 100MB,则该数据库最小能够收缩到 10MB(假定已经删除该数据库中所有数据)。不能在备份数据库时收缩数据库,也不能在收缩数据库时创建或备份数据库。4.8.2 什么是自
2、动收缩和手动收缩SQL Server 2000 支持对数据库实行自动收缩和手工收缩。在如图 4.38 所示的数据库属性的【选项】选项卡中选择【自动收缩】复选框将实现自动收缩。SQL Server 2000 服务器每 30 分钟检查数据库的空间使用情况。如果发现大量闲置的空间,就会自动缩小数据库的文件大小。图 4.38 设置自动收缩功能利用企业管理器或 DBCC SHRINKDATABASE 和 DBCC SHRINKFILE 语句可以完成手工收缩操作。4.8.3 收缩数据文件和日志文件有什么不同不论是收缩数据文件还是日志文件,都会确实减少物理文件的大小,两者不同之处如下。数据文件可以作为文件组
3、或单独地进行手工收缩。日志文件收缩分别考虑每个文件,基于整个日志文件进行收缩。日志文件的收缩将删除非活动的 VLF。4.8.4 收缩操作是如何执行的文件的收缩操作始终从文件末端开始反向进行。例如,如果要将一个 5GB 的文件收缩到 4GB,则SQL Server 2000 将从文件的最后一个 1GB 开始释放尽可能多的空间。如果文件中被释放的部分包含使用过的页面,则 SQL Server 2000 会将这些页面重新定位到保留的部分。只能将数据库收缩到没有剩余的可用空间为止。例如,某个 5GB 的数据库已经有 4GB 的数据,如果指定将数据库收缩到 3GB,则实际上只会释放 1GB 的空间。如果
4、收缩操作无法收缩日志文件中的所有空间,系统将反馈信息,指出必须执行什么操作以释放更多符合条件的空间。4.8.5 收缩数据库的案例(1)在【企业管理器 】的管理目标导航【树】下选择刚建立的数据库 mydatabase 单击鼠标右键,在出现的快捷菜单中选择【所有任务】/【收缩数据库】选项。(2)出现如图 4.39 所示的【收缩数据库】界面。q 在【数据库大小】区域可以查看 【已经分配的空间】和【可用的空间 】,这是决定是否进行收缩的重要依据。q 在【收缩操作】区域的【 收缩后文件中的最大可用空间】文本框中设置收缩数据库后数据文件中的最大可用空间百分比。选择 【在收缩前将页移到文件起始位置】指定在收
5、缩数据库前将页移到文件的起始位置,选择该选项可能会影响性能。q 在【调度】区域选择【根据调度收缩数据库 】复选框,单击 按钮可以设置自动收缩数据库的时间。图 4.39 【收缩数据库】界面 图 4.40 【收缩文件】界面(3)在图 4.39 中的【收缩文件】 区域单击 按钮出现如图 4.40 所示的【收缩文件】界面,可以对数据文件或日志文件设置更精细的收缩策略。在【数据库文件】下拉列表框中可以选择要收缩的数据文件或者日志文件。在【收缩操作 】区域可以设置文件的具体收缩操作,包括是否截断、压缩页以及收缩后的文件大小等。在【延迟收缩 】区域可以设置自动收缩的时间。完成设置后单击 按钮。收缩数据库可以删除已经分配但尚未使用的页,从而更好地利用存储空间。与收缩相对应的是扩充数据库,即修改数据库的属性即可。收缩后的可用空间应该留有一定的空闲空间,这样当数据发生更改时不必额外分配空间。