Sql server 收缩文件不减少SQL Server Express数据文件

Sql server 收缩文件不减少SQL Server Express数据文件,sql-server,sql-server-express,truncate-log,Sql Server,Sql Server Express,Truncate Log,我们有一个SQL Server Express实例,其中一个数据库达到10Gb 根据allocation\u units.used\u pages,我们已经删除了90%的较大的db表记录,应该可以清除4Gb的空间 DBCC SHRINKFILE减少了日志文件,但没有影响数据文件大小。 数据库恢复模型是简单的 DBCC SHRINKFILE (datafile, TRUNCATEONLY); DBCC SHRINKFILE (logfile, TRUNCATEONLY); SQL Server

我们有一个SQL Server Express实例,其中一个数据库达到10Gb

根据
allocation\u units.used\u pages
,我们已经删除了90%的较大的db表记录,应该可以清除4Gb的空间

DBCC SHRINKFILE
减少了日志文件,但没有影响数据文件大小。 数据库恢复模型是简单的

DBCC SHRINKFILE (datafile, TRUNCATEONLY);
DBCC SHRINKFILE (logfile, TRUNCATEONLY);

SQL Server Express edition上的
DBCC SHRINKFILE
是否有任何限制?

您使用的是TRUNCATEONLY,它只能将数据文件截断回文件中最后使用的块。由于它不会重新定位任何数据块,因此如果文件中的最后一个块正在使用,它将无法收缩数据块。解决方案:不要使用TRUNCATEONLY。我应该使用什么方法将数据文件减小到尽可能小的大小?我一直在使用truncate,只是跳过参数或使用NOTRUNCATE。警告,它可能会慢很多,这取决于数据库有多大以及它有多满!使用NOTRUNCATE或TRUNCATEONLY的具体区别是什么?不建议使用简单恢复模型的数据库使用Runcate吗?不,这与简单设置无关,或者您正在运行Express。TRUNCATEONLY只是SHRINKFILE的“快速简便”设置。它的速度很快,因为它不移动任何东西,但这也严重限制了它。NOTRUNCATE是完整版本,它总是可以工作,但它可能非常慢,有时需要几个小时甚至几天。请参阅此处使用的TRUNCATEONLY文档,它只能将数据文件截断回文件中最后使用的块。由于它不会重新定位任何数据块,因此如果文件中的最后一个块正在使用,它将无法收缩数据块。解决方案:不要使用TRUNCATEONLY。我应该使用什么方法将数据文件减小到尽可能小的大小?我一直在使用truncate,只是跳过参数或使用NOTRUNCATE。警告,它可能会慢很多,这取决于数据库有多大以及它有多满!使用NOTRUNCATE或TRUNCATEONLY的具体区别是什么?不建议使用简单恢复模型的数据库使用Runcate吗?不,这与简单设置无关,或者您正在运行Express。TRUNCATEONLY只是SHRINKFILE的“快速简便”设置。它的速度很快,因为它不移动任何东西,但这也严重限制了它。NOTRUNCATE是完整版本,它总是可以工作,但它可能非常慢,有时需要几个小时甚至几天。看这里的医生