SQLServer数据库收缩相关知识笔记

1、为什么要进行数据库收缩?

SQL Server 数据库采取预先分配空间的方法来建立数据库的数据文件或者日志文件,比如数据文件的空间分配了300MB,而实际上只占用了20MB空间,这样就会造成磁盘存储空间的浪费。可以通过数据库收缩技术对数据库中的每个文件进行收缩,删除已经分配但没有使用的页。从而节省服务器的存储的成本。

2、数据库收缩的原理

官方解释:收缩数据文件通过将数据页从文件末尾移动到更靠近文件开头的未占用的空间来恢复空间。在文件末尾创建足够的可用空间后,可以取消对文件末尾的数据页的分配并将它们返回给文件系统。

3、数据库收缩的限制和局限

收缩后的数据库不能小于数据库最初创建时指定的大小。 或是上一次使用文件大小更改操作(如 DBCC SHRINKFILE)设置的显式大小。

比如:如果数据库最初创建时的大小为 10 MB,后来增长到 100 MB,则该数据库最小只能收缩到 10 MB,即使已经删除数据库的所有数据也是如此。

不能在备份数据库时收缩数据库。 反之,也不能在数据库执行收缩操作时备份数据库。

4、数据库收缩的方式

4.1 收缩数据库 DBCC SHRINKDATABASE

介绍:收缩指定数据库中的数据文件大小。

语法格式:

DBCC SHRINKDATABASE( database_name [ , target_percent ][ , { NOTRUNCATE | TRUNCATEONLY } ] 
)

参数说明:

  • database_name:是要收缩的数据库名称

  • target_percent:是数据库收缩后的数据库文件中所要的剩余可用空间百分比。

  • NOTRUNCATE:导致在数据库文件中保留所释放的文件空间。如果未指定,将所释放的文件空间释放给操作系统。

  • TRUNCATEONLY:导致将数据文件中的任何未使用的空间释放给操作系统,并将文件收缩到上一次所分配的大小,从而减少文件大小,而不移动任何数据。不试图重新定位未分配页的行。使用 TRUNCATEONLY 时,忽略 target_percentis。

4.2 收缩数据库文件 DBCC SHRINKFILE

介绍:收缩当前数据库的指定数据或日志文件的大小,或通过将数据从指定的文件移动到相同文件组中的其他文件来清空文件,以允许从数据库中删除该文件。文件大小可以收缩到比创建该文件时所指定的大小更小。这样会将最小文件大小重置为新值。

语法格式:

DBCC SHRINKFILE 
({ file_name | file_id } { [ , EMPTYFILE ] | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]}
)
[ WITH NO_INFOMSGS ]

参数说明:

  • file_name:要收缩的文件的逻辑名称。

  • file_id:要收缩的文件的标识 (ID) 号。若要获得文件 ID,请使用 FILE_IDEX 系统函数,或查询当前数据库中的 sys.database_files 目录视图

  • target_size:用兆字节表示的文件大小(用整数表示)。如果未指定,则 DBCC SHRINKFILE 将文件大小减少到默认文件大小。默认大小为创建文件时指定的大小。

  • 注意:可以使用 DBCC SHRINKFILE target_size 减小空文件的默认大小。

例如,如果创建一个10MB 的文件,然后在文件仍然为空的时候将文件收缩为2 MB,默认文件大小将设置为2 MB。这只适用于永远不会包含数据的空文件。

  • EMPTYFILE:将指定文件中的所有数据迁移到同一文件组中的其他文件。由于数据库引擎不再允许将数据放在空文件内,因此可以使用 ALTER DATABASE 语句来删除该文件。

  • NOTRUNCATE:在指定或不指定 target_percent 的情况下,将已分配的页从数据文件的末尾移动到该文件前面未分配页。文件末尾的可用空间不会返回给操作系统,文件的物理大小也不会更改。因此,指定 NOTRUNCATE 时,文件看起来未收缩。

  • NOTRUNCATE 只适用于数据文件。日志文件不受影响。

  • TRUNCATEONLY:将文件末尾的所有可用空间释放给操作系统,但不在文件内部执行任何页移动。数据文件只收缩到最后分配的区。如果随 TRUNCATEONLY 指定了 target_size,则会忽略该参数。TRUNCATEONLY 只适用于数据文件。

  • WITH NO_INFOMSGS:取消显示所有信息性消息。

5、示例

-- 将TestDB数据库中的TestDB文件的大小收缩到20MB。
USE TestDB ;
GO
DBCC SHRINKFILE (TestDB, 20) ;
-- 将减小 UserDB 用户数据库中数据文件和日志文件的大小,
-- 以便在数据库中留出 10% 的可用空间
DBCC SHRINKDATABASE (TestDB, 30); 
-- 清理数据库日志文件为2M
USE master
ALTER DATABASE TestDB SET RECOVERY SIMPLE WITH NO_WAIT
ALTER DATABASE TestDB SET RECOVERY SIMPLE --简单模式
USE TestDB
DBCC SHRINKFILE (N'TestDB_log' , 2, TRUNCATEONLY)--设置压缩后的日志大小为2M,可以自行指定
USE master
ALTER DATABASE TestDB SET RECOVERY FULL WITH NO_WAIT
ALTER DATABASE TestDB SET RECOVERY FULL --还原为完全模式

IT技术分享社区

个人博客网站:https://programmerblog.xyz

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吕梁离石学校计算机专业在哪里,山西吕梁计算机大专学校有哪些太重技校告诉您...

山西吕梁计算机大专学校有哪些太重技校告诉您。选择专业的***关键的因素是你自身的兴趣,其他只能参考,如果你能准确的知道自己的兴趣所在,未来的职业所选,那么只需要一招就可以吃遍天。相信我,一生为自己感兴趣的事情奋…

网络安全:六种常见的网络攻击手段

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

e4a html文本,E4A 怎么将剪贴版中的文本 粘贴到窗口的光标处啊?求个代码

满意答案百幻蝶V木桃2017.05.20采纳率:49% 等级:8已帮助:1710人■如何打开剪贴板查看器 当您从某个程序剪切或复制信息时,该信息会被移动到剪贴板并保留在那里,直到您清除剪贴板或者您剪切或复制了另一片信息。“剪…

电脑技巧:七款U盘修复软件

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

[deviceone开发]-do_SlideListView的简单示例

一、简介 利用提供的SlideListVIew实现那种cell可以滑动露出底部按钮的功能 主要组件:do_slidelistview 二、效果图 三、相关讨论 http://bbs.deviceone.net/forum.php?modviewthread&tid269 四、相关下载 https://github.com/do-project/code4do/tree/master/…

Git:Rebase和Merge之间的区别,看完这篇文章你就懂了!

社区中长期以来一直在争论我们应该使用Merge还是Rebase。有人会说Merge更好,因为它保留了最完整的工作历史。其他人则认为,Rebase变得更整洁,这使审阅者的生活更轻松,更高效。本文将解释合并和重新设置之间的区别是什么&#xff0…

干货:SQLServer数据库基于PowerDesigner逆向工程生成PDM文件

在日常的开发工程中,很多时候需要提供数据库设计文档,如果当时数据库设计没有采用PowerDesinger,到后期需要给客户提供数据库设计文档、后期项目运维就会比较麻烦,今天给大家介绍如何使用PowerDesigner的逆向工程生成SQLServer数据…

SQLServer基础:TOP、OFFSET-FETCH、SET ROWCOUNT用法笔记

今天给大家介绍一下TOP、OFFSET-FETCH、SET ROWCOUNT用法笔记,希望对大家能有所帮助!1、 TOP用法语法格式:TOP ( expression ) [ PERCENT ] [ WITH TIES ]expression:返回行数的数值表达式PERCENT:指返回的结果集行的百…

取本地数据_深入理解Kafka服务端之Follower副本如何同步Leader副本的数据

一、场景分析Kafka采用的是主写主读的方式,即客户端的读写请求都由分区的Leader副本处理,那么Follower副本要想保证和Leader副本数据一致,就需要不断地从Leader副本拉取消息来进行同步。由于同一个分区的Leader副本和Follower副本分布在不同的…

SQLServer子查询相关知识笔记

今天给大家介绍以下SQLServer子查询相关知识,希望对大家能有所帮助!1、子查询概念介绍子查询可以嵌套在SELECT、INSERT、UPDATE、DELETE语句或其他子查询语句中的查询,子查询一般作为查询中间结果集角色,子查询也称为内部查询或内…

软件:推荐八款电脑实用软件,你都用过吗?

今天给大家推荐八款电脑非常实用的软件,希望对大家能有所帮助!1、Audio Hijack Pro一款Mac 上的录音软件。它比较强大的功能是可以录制多个应用的声音,然后组合成一个结果,然后输出。2、快贴一个跨平台剪切板同步软件。你只需要简…

硬件:开机如何进BIOS,U盘启动快捷键一键查询

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

强制关机对电脑的伤害你有必要了解一下

不管你的电脑新旧与否,我想大家肯定都遇到过死机、卡顿无反应的情况吧,这个时候无论是电脑高手还是萌新小白同场都会采用一个相同的解决方案,对,那就是直接关机。 当然遇到这种情况,长按电源键10秒强制关机&#xff0c…

操作系统的中断和异常

中断和异常 早期的计算机,各程序只能串行执行,系统资源利用率低 中断机制的诞生 中断的概念和作用 中断的分类

硬件:台式机老式键盘知识科普

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…