我已经安装了SQL Server2017。我已经创建了一个大小为512 mb的test_db,并且正在尝试使用SQL查询来缩小数据库:
dbcc shrinkfile(N'test_db', truncateonly)
但是我看不到数据库正在缩小。如果我使用以下SQL查询:
dbcc shrinkfile(N'test_db', 1)
文件缩小到3mb。
能否请您解释一下行为上的区别? 由于TRUNCATEONLY会在文件末尾释放空格,因此为什么在数据文件为空时无法缩小文件。
答案 0 :(得分:1)
如果您打开文档DBCC SHRINKFILE (Transact-SQL),则会发现
target_size
是以兆字节为单位的文件大小,以整数表示。 如果没有 指定后,DBCC SHRINKFILE会将大小减小为默认文件大小。 默认大小是创建文件时指定的大小。
因此,如果要将大小减小到创建文件时指定的大小以下,则甚至应为target_size
指定truncateonly
:
dbcc shrinkfile(1, 1, truncateonly)
答案 1 :(得分:0)
SQL Server使用NOTRUNCATE
选项运行数据库收缩操作,以在数据文件的末尾获得一些可用空间。 Windows文件系统中文件的物理大小在这里没有任何变化。此步骤还引入了索引碎片。
SQL Server使用TRUNCATEONLY
选项运行数据库收缩操作,最后删除数据文件末尾的未分配扩展区。它还可以缩小Windows文件系统中文件的物理大小。