千家信息网

什么是SQL Server数据库收缩

发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,这篇文章主要讲解了"什么是SQL Server数据库收缩",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"什么是SQL Server数据库收缩"吧!1、为
千家信息网最后更新 2025年01月27日什么是SQL Server数据库收缩

这篇文章主要讲解了"什么是SQL Server数据库收缩",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"什么是SQL Server数据库收缩"吧!

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 --还原为完全模式

感谢各位的阅读,以上就是"什么是SQL Server数据库收缩"的内容了,经过本文的学习后,相信大家对什么是SQL Server数据库收缩这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

文件 数据 数据库 收缩 大小 空间 分配 日志 末尾 系统 移动 操作系统 参数 学习 最小 内容 名称 备份 情况 格式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 贵阳市网络安全周应急演练 软件开发初级教程都有哪些 网页直接加载所有数据库 数据库大作业旅游管理系统 hap数据库 张店快消品软件开发价格 普法进行时网络安全法第一章 航拍临沂龙湖软件开发园区 双路服务器怎么搭建 网络安全日宣传册 软件开发测试工程师要会编程吗 韶山市计算机网络技术 互联网数据库自动删除 云计算下的网络安全技术 无锡魏晋元兴分布式存储数据库 盗亦有道下载软件开发 数据库可以设置索引的字段类型是 ar软件开发要多少钱 数据库如何更改工作表 金蝶专业版数据库表 方舟手游ark怎么进服务器 重庆渝北众道生鲜软件开发 无车承运人软件开发 hostus配置服务器 简单图书销售系统数据库表格 广联达西安软件开发 一台服务器运行多操作系统 中国网络安全心化小组组长 视频教学软件开发商 服务器关不关防火墙有啥区别
0