具体内容请看 SQL 2005技术内幕之存储引擎第4章
DBCC SHRINKFILE不能将文件大小缩小到比存储数据所需空间还小的尺寸.
DBCC SHRINKDATABASE不能收缩到比MODEL数据库还小,并且也不能将一个文件收缩到比其最小还小.
TRUNCATEONLY能使一个数据文件中的所以为被使用空间都被释放给操作系统,但不会试图重新分配数据行到未分配的页面.
DBCC SHRINKDATABASE
收缩指定数据库中的数据文件大小。
语法
DBCC SHRINKDATABASE
( database_name [ , target_percent ]
[ , { NOTRUNCATE | TRUNCATEONLY } ]
)
参数
database_name
是要收缩的数据库名称。数据库名称必须符合标识符的规则。有关更多信息,请参见使用标识符。
target_percent
是数据库收缩后的数据库文件中所要的剩余可用空间百分比。
NOTRUNCATE
导致在数据库文件中保留所释放的文件空间。如果未指定,将所释放的文件空间释放给操作系统。
TRUNCATEONLY
导致将数据文件中的任何未使用的空间释放给操作系统,并将文件收缩到上一次所分配的大小,从而减少文件大小,而不移动任何数据。不试图重新定位未分配页的行。使用 TRUNCATEONLY 时,忽略 target_percentis。
注释
Microsoft® SQL Server™ 可收缩:
特定数据库的所有数据和日志文件。执行 DBCC SHRINKDATABASE。
一次一个特定数据库中的数据或日志文件。执行 DBCC SHRINKFILE。
DBCC SHRINKDATABASE 以每个文件为单位对数据文件进行收缩。然而,DBCC SHRINKDATABASE 在对日志文件进行收缩时,看起来好像所有的日志文件都存在于一个连续的日志池中。
假设名为 mydb 的数据库有两个数据文件和两个日志文件。这些数据文件和日志文件大小都为 10 MB。第一个数据文件包含 6 MB 数据。
对于每个文件,SQL Server 计算目标大小,即要收缩文件到的大小。当用 target_percent 指定 DBCC SHRINKDATABASE 时,SQL Server 计算的目标大小是收缩后文件中的 target_percent 可用空间大小。例如,如果指定按 target_percent 为 25 收缩 mydb。SQL Server 计算的该文件的目标大小为 8 MB(6 MB 数据加上 2 MB 可用空间)。因此