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