SQL Server数据库文件未被截断

Die*_*cic 5 sql-server shrink sql-server-2008

我有一个大约4GB的数据库.我复制了该数据库并删除了99%的数据,因为我需要一个只包含模式和基本数据的数据库(主要是保留静态数据).

现在的问题是MDF文件的大小仍然是~4GB.如果我读取表的大小(例如,使用),它们总和不到20 MB.日志文件已经缩小,但我运行的脚本都没有用于收缩DB文件.

注意:我通常不这样做,但这次我需要缩小数据库(我知道不推荐)

编辑:+有用的信息

命令:

exec sp_spaceused
Run Code Online (Sandbox Code Playgroud)

输出:

database_name       database_size   unallocated_space
AccudemiaEmptyDb    3648.38 MB      4.21 MB
Run Code Online (Sandbox Code Playgroud)

命令:

select object_name(id) as objname, SUM(dpages*8) as dpages, COUNT(*) as cnt
from sysindexes
group by id
order by dpages desc
Run Code Online (Sandbox Code Playgroud)

输出:

object_name(id)            sum(dpages*8)    count(*)
sysdercv                   675328           1
sysxmitqueue               359776           1
sysdesend                  72216            1
sysconvgroup               47704            1
sysobjvalues               4760             5
sec_OperationAccessRule    3472             5
sec_PageAccessRule         2232             5
syscolpars                 656              11
AuditObjects               624              2
sysmultiobjrefs            408              5
HelpPage                   376              8
sysschobjs                 352              9
syssoftobjrefs             328              7
sysidxstats                272              10
sysrscols                  200              1
Translation                160              3
sysallocunits              128              3
sysiscols                  128              8
syssingleobjrefs           96               5
sysrowsets                 80               4
Run Code Online (Sandbox Code Playgroud)

Die*_*cic 2

谢谢你们,主要是理查德提供的所有信息!

为了解决这个问题,我不得不删除并重新创建我的服务:

DROP SERVICE [//Audit/DataWriter] 
GO

CREATE SERVICE [//Audit/DataWriter] 
    AUTHORIZATION dbo 
ON QUEUE dbo.TargetAuditQueue ([//Audit/Contract])
Run Code Online (Sandbox Code Playgroud)

一旦我这样做了,数据库就有 5GB 了!但这一次我在问题中输入的第二个查询显示 sysxmitqueue 作为第一个结果。在互联网上进行了更多挖掘,我能够这样做清理大表:

ALTER DATABASE [your_database] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [your_database] SET NEW_BROKER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [your_database] SET MULTI_USER
GO
Run Code Online (Sandbox Code Playgroud)

然后,运行 DBCC SHRINKFILE 就这样了!=) 现在只有 40MB

感谢你们!