DBCC ShrinkDatabase()
DBCC ShrinkFile()



我是否需要同时运行两个DBCC命令才能收缩数据库?
以上两者之间有什么区别? br />

#1 楼

只需...



DBCC ShrinkDatabase():缩小所有文件

DBCC ShrinkFile():仅一个文件

例如,您可能有日志备份问题,并且已经失去控制,因此您运行DBCC ShrinkFile()

您几乎从不使用ShrinkDatabase

,除非有明确的理由,否则我都不收缩任何一个文件(mdf,ldf)。文件是它们的大小,因为它们是必需的。任何建议这样做的博客都可能不了解SQL Server的工作方式。

评论


谢啦。你是对的。我刚刚读过Brent Ozar博客。

–江戈
10年8月23日在19:03

当它做相同的事情时,为什么会有不同的论点呢?

– Stefan Steinegger
13年11月6日在9:25

Paul Randal博客的链接已断开。

–培根片
20年1月28日在22:46

提交了一个编辑请求,以将链接更改为页面的存档版本,因为我最近进行了类似的讨论,发现该参考资料非常有用

–费利克斯·拜耳(Felix Bayer)
20-2-5在8:09

当然非常有趣。不过我有一个有效的方案,我们会定期从生产中刷新测试数据。我们在测试环境中受到空间的限制,因此我不得不清空很多不需要的表,这些表可以释放大约原始大小的70%。我必须使用收缩文件,以减少数据库的大小。现在,我想知道对性能的影响。嗯...

–哥斯达黎加
20-2-20在20:52



#2 楼

默认数据库具有两个文件

MyDb.MDF和MyDb.LDF

MDF文件是主分区所在的数据文件。根据您的需要,您可以将一个数据库分为多个文件。这样做是为了使数据(单个或多个表)可以跨越通常放在单独的硬盘驱动器上的多个文件,以实现更高的性能。

如果收缩数据库,则与该数据库关联的所有文件将收缩。

如果收缩文件,则仅收缩所选文件。

您只需要使用“收缩数据库”命令。但这通常不是一个好习惯,也不推荐这样做。

如果您告诉我们您遇到的问题是什么,我们可以为您提供更多有关解决方法的信息它。

评论


哦..issue是我们的生产服务器磁盘空间不足。添加更多磁盘是理想选择,但我想知道我们还能做什么?

–江戈
10年8月23日在18:42

#3 楼

最有可能我们只使用dbcc收缩文件。您可以收缩的百分比。

无论我们收缩什么,它都可以作为磁盘上的可用空间。

例如:
使用'databasename'
dbccrinkfile(fileid,100)

这里100是100 MB

fileid可以从
sp_helpdb'databasename'
获得