mssql数据库收缩NOTRUNCATE同TRUNCATEONLY区别


摘要:
下文讲述数据库收缩中的可用选项:NOTRUNCATE,TRUNCATEONLY的区别及注意事项,如下所示:
实验环境:sqlserver 2008 R2



NOTRUNCATE

数据库收缩命令中,如果使用NOTRUNCATE时,代表sqlserver从最后页移动到前页,找到页中空闲的未分配空间,数据文件大小不收缩,但是将数据中未分配空间放入数据文件的尾部。

TRUNCATEONLY

使用收缩命令时,使用TRUNCATEONLY选项,
SQL Server从末尾到开始,只要在文件末尾有空的可用空间,就会把数据文件清理掉。
使用此选项SQL Server在数据文件里页不会进行移动。



数据库文件正确的收缩步骤:

1.使用notruncate 扫描所有空闲页,将其移动到数据库文件末尾
2.使用TRUNCATEONLY 进行收缩,移除末尾的空闲部分

注意事项:
使用TRUNCATEONLY对数据文件收缩将开销小,更安全,不会产生索引碎片;
使用notruncate,sqlserver 会移动数据所存储的页,会带来严重的索引碎片。