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)
谢谢你们,主要是理查德提供的所有信息!
为了解决这个问题,我不得不删除并重新创建我的服务:
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
感谢你们!