DBCC SHRINKDATABASE xxxx was skipped because the file does not have enough free

简介: 原文:DBCC SHRINKDATABASE xxxx was skipped because the file does not have enough free   假设你创建一个数据库时,指定其初始化大小(SIZE )非常大。
原文: DBCC SHRINKDATABASE xxxx was skipped because the file does not have enough free

   假设你创建一个数据库时,指定其初始化大小(SIZE )非常大。例如,如下测试案例所示

USE [master]
GO
 
CREATE DATABASE [TEST] ON  PRIMARY 
( NAME = N'TEST_Data', FILENAME = N'D:\SQL_DATA\TEST_Data.mdf' , SIZE = 11527027KB , MAXSIZE = UNLIMITED, FILEGROWTH = 102400KB )
 LOG ON 
( NAME = N'TEST_log', FILENAME = N'D:\SQL_LOG\TEST_log.ldf' , SIZE = 40350KB , MAXSIZE = 2048GB , FILEGROWTH = 32768KB )
GO

 

此时我们检查数据库的空间使用情况如下所示:

USE TEST;
GO
EXEC SP_SPACEUSED;

 

然后你使用DBCC SHRINKDATABASE去收缩数据库时,就会遇到“DBCC SHRINKDATABASE: xxx was skipped because the file does not have enough free space to reclaim”这样的错误。

USE TEST;
 
GO
 
DBCC SHRINKDATABASE('TEST', 5);

DBCC SHRINKDATABASE: File ID 1 of database ID 8 was skipped because the file does not have enough free space to reclaim.

DBCC SHRINKDATABASE: File ID 2 of database ID 8 was skipped because the file does not have enough free space to reclaim.

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

 

是不是有点纳闷,明明数据库有大量空闲空间,但是提示“DBCC SHRINKDATABASE: File ID 1 of database ID 8 was skipped because the file does not have enough free space to reclaim" 没有足够剩余空间回收。我们先用DBCC SHRINKFILE将数据库的数据文件收缩一下,如下所示

USE TEST;
GO
DBCC SHRINKFILE('TEST_Data', 20);

 

如上所示,DBCC SHRINKFILE可以收缩数据库文件,但是DBCC SHRINKDATABASE为什么不行呢?

DBCC SHRINKDATABASE ( database_name | database_id | 0 [ , target_percent ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ) [ WITH NO_INFOMSGS ]

这个是因为DBCC SHRINKDATABASE是数据文件/日志对象的百分比来收缩数据库,并且这个收缩后的值不能小于数据文件/日志文件的最小大小(minimum file size). 但是DBCC SHRINKFILE收缩时,可以小于数据文件/日志文件的minimum file size。官方文档介绍如下:

 

收缩后的数据库不能小于数据库的最小大小。 最小大小是在数据库最初创建时指定的大小,或是使用文件大小更改操作(如 DBCC SHRINKFILE 或 ALTER DATABASE)显式设置的最后大小。 例如,如果数据库最初创建时的大小为 10 MB,后来增长到 100 MB,则该数据库最小只能收缩到 10 MB,即使已经删除数据库的所有数据也是如此。

 

所以上面DBCC SHRINKDATABASE命令不能收缩数据库,因为上图的Mimimum Size和 CurrentSize大小相同。而使用DBCC SHRINKFILE可以收缩数据库文件.

 

参考资料:

https://msdn.microsoft.com/zh-cn/library/ms190488.aspx

https://blogs.msdn.microsoft.com/psssql/2008/03/24/how-it-works-dbcc-shrinkdatabase-shrinkfile-tabular/

目录
相关文章
|
存储 SQL 关系型数据库
大数据量下数据库分页查询优化方案汇总
当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一些方法。
733 2
|
4月前
|
弹性计算 开发框架 Ubuntu
阿里云服务器ECS镜像知识解析:功能特性、场景及上手实操教程参考
对于部分初次选择阿里云服务器的新手用户来说,可能并不是很清楚阿里云服务器镜像是什么?ECS镜像堪称搭建ECS实例的基础模板,其中涵盖了启动及运行实例所必需的操作系统以及预先配置好的数据。本文将围绕阿里云服务器镜像的相关知识展开介绍,助力大家全方位了解并熟练运用这一强大功能。
|
11月前
|
消息中间件 供应链 架构师
微服务如何实现低耦合高内聚?架构师都在用的技巧!
本文介绍了微服务的拆分方法,重点讲解了“高内聚”和“低耦合”两个核心设计原则。高内聚强调每个微服务应专注于单一职责,减少代码修改范围,提高系统稳定性。低耦合则通过接口和消息队列实现服务间的解耦,确保各服务独立运作,提升系统的灵活性和可维护性。通过领域建模和事件通知机制,可以有效实现微服务的高效拆分和管理。
310 7
|
缓存 监控 关系型数据库
如何查看MySQL使用的内存
如何查看MySQL使用的内存
314 1
|
SQL 关系型数据库 Linux
在CentOS 6上安装和使用PostgreSQL的方法
在CentOS 6上安装和使用PostgreSQL的方法
261 2
|
存储 关系型数据库 数据库
初探PostgreSQL体系结构
初探PostgreSQL体系结构
291 0
|
存储 SQL 关系型数据库
【MySQL进阶-03】深入理解mysql的索引分类,覆盖索引,覆盖索引失效,回表,MRR
【MySQL进阶-03】深入理解mysql的索引分类,覆盖索引,覆盖索引失效,回表,MRR
357 0
|
关系型数据库 MySQL Shell
MySQL报错:Got error 28 from storage engine
MySQL报错:Got error 28 from storage engine
337 0
|
NoSQL 关系型数据库 MySQL
MySQL 常见死锁场景 -- 并发Replace into导致死锁
### MySQL Replace into issue MySQL 并发 Replace into 引起死锁问题 在之前的文章 [#issue 68021 MySQL unique check 问题](https://zhuanlan.zhihu.com/p/503880736)中, 我们已经介绍了在 MySQL 里面, 由于唯一键的检查(unique check), 导致 MySQ
682 0
|
SQL 运维 监控
【走进RDS】之SQL Server性能诊断案例分析
数据库性能诊断不仅对其数据库技能要求较高,而且需要大量的前期准备工作,如收集各种性能基线、性能指标和慢SQL日志等,尤其是面对多数据库性能调优时,往往事倍功半。
28979 0
【走进RDS】之SQL Server性能诊断案例分析