我知道收缩不是一个好习惯,但如果我只执行 ie: dbcc shrinkfile (filename,1024)
,这是默认的吗?notruncate
还是truncateonly
?我在文档中没有找到任何关于它的信息。
NOTRUNCATE 将分配的页面从数据文件的末尾移动到文件前面的未分配页面,无论是否指定 target_percent。文件末尾的可用空间不会返回给操作系统,文件的物理大小也不会改变。因此,如果指定了 NOTRUNCATE,则文件似乎不会收缩。
NOTRUNCATE 仅适用于数据文件。日志文件不受影响。
FILESTREAM 文件组容器不支持此选项。
……
TRUNCATEONLY 将文件末尾的所有可用空间释放给操作系统,但不执行文件内的任何页面移动。数据文件仅收缩到最后分配的范围。
如果使用 TRUNCATEONLY 指定,则忽略 target_size。
TRUNCATEONLY 选项不会移动日志中的信息,但会从日志文件的末尾删除不活动的 VLF。FILESTREAM 文件组容器不支持此选项。
默认行为是不做这些事情。该命令的这两个修饰符都会
DBCC SHRINKFILE
更改默认行为。默认情况下,
DBCC SHRINKFILE
会将数据移动到文件的开头(在数据文件中),然后从文件的末尾释放可用空间(在日志文件和数据文件中)。该
NOTRUNCATE
选项只会将数据移动到文件的开头(在数据文件中),而不释放文件末尾的可用空间。因为日志文件不会在文件内移动数据,所以在事务日志文件上使用此选项时没有意义。该
TRUNCATEONLY
选项将仅从文件末尾释放可用空间,而不移动数据文件中的任何数据。因为日志文件不会在文件中移动数据,所以这实际上是日志文件的默认行为。