gpt4 book ai didi

sql-server - SQL Server 数据库文件未被截断

转载 作者:行者123 更新时间:2023-12-02 23:25:51 25 4
gpt4 key购买 nike

我有一个大小约为 4GB 的数据库。我复制了该数据库并删除了其中 99% 的数据,因为我需要一个仅包含架构和基本数据的数据库(主要保留静态数据)。

现在的问题是 MDF 文件的大小仍然约为 4GB。如果我读取表的大小(例如使用 this ),它们的总和不到 20 MB。日志文件已经缩小,但我运行的脚本都无法缩小数据库文件。

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

编辑:+有用信息

命令:

exec sp_spaceused

输出:

database_name       database_size   unallocated_space
AccudemiaEmptyDb 3648.38 MB 4.21 MB

命令:

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

输出:

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

最佳答案

第一次运行

exec sp_spaceused

在数据库中检查可以恢复多少。如果你发现它显示没有未使用的空间,那么你就误解了空间分配。

这就是我通常收缩 test1 数据库的方式,这是我播放所有 StackOverflow 查询的地方。我刚刚将其从 3GB 减少到 8MB。

use test1;
exec sp_spaceused;
checkpoint;
alter database test1 set recovery simple;
alter database test1 set recovery full;
dbcc shrinkfile(1,1);
dbcc shrinkfile(2,1);

就其值(value)而言,这是我用来按表检查分配大小的方法。也许你检查错了?这包括索引。

select object_name(id), SUM(dpages*8), COUNT(*)
from sysindexes
group by id

编辑 - 基于占用编辑问题空间的表格

Martin 的评论转向回答:涉及的表是 Service Broker 对话。 http://social.msdn.microsoft.com/Forums/en/sqlservicebroker/thread/03180f45-cd83-4913-8f0e-3d8306f01f06该链接有一个解决方法。

还有一个替代方案;使用您已经缩减的数据库

  1. 生成脚本 - 所有对象 - 包括所有选项(键、全文、默认值等)
  2. 包含脚本数据选项
  3. 创建一个新数据库并从脚本填充它

(据记忆,SSSB 队列不包含在生成数据脚本中)

关于sql-server - SQL Server 数据库文件未被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5172686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com