开发者社区> 杰克.陈> 正文

数据库收缩:NOTRUNCATE与TRUNCATEONLY

简介: 原文:数据库收缩:NOTRUNCATE与TRUNCATEONLY 在进行数据库收缩时,我们有2个可用选项:NOTRUNCATE,TRUNCATEONLY。这篇文章我们会详细讨论下这2个选项的具体区别。 NOTRUNCATE 当你对数据库收缩命令提供NOTRUNCATE选项时,意味着SQL Server将你数据库末尾的页移到前面,那里可以找到一些空闲的未分配空间(将释放的空间继续保留在文件中)。
+关注继续查看
原文:数据库收缩:NOTRUNCATE与TRUNCATEONLY

在进行数据库收缩时,我们有2个可用选项:NOTRUNCATETRUNCATEONLY。这篇文章我们会详细讨论下这2个选项的具体区别。

NOTRUNCATE

当你对数据库收缩命令提供NOTRUNCATE选项时,意味着SQL Server将你数据库末尾的页移到前面,那里可以找到一些空闲的未分配空间(将释放的空间继续保留在文件中)。唯一的区别是数据文件本身不会收缩。

这就是说在数据库末尾的未使用空间还是没有重声明回给文件系统。用NOTRUNCATE选项进行数据收缩后,最后在你数据文件的末尾会有一些空的可用空间——当然会带来索引碎片。

TRUNCATEONLY

当你用TRUNCATEONLY参数执行数据库收缩命令时,SQL Server从末尾到开始,只要在文件末尾有空的可用空间,就会把数据文件清理掉。使用这个选项SQL Server在数据文件里不会移动任何页。你本人必须确认在你的数据文件末尾会有一些可用空间,这样TRUNCATEONLY会为你申明一些空间。

如果你已经仔细阅读了这点,现在你应该能想象当你进行常规的数据库收缩,不使用这些选项时,SQL Server内部会发生什么:

  • 第1步SQL Server使用NOTRUNCATE选项进行数据库收缩操作来在你的数据文件末尾获得一些可用空间。在你的操作系统里,你的文件物理大小没有发生改变。这一步会带来一些索引碎片。
  • 第2步SQL Server使用TRUNCATEONLY选项进行数据库收缩操作,最后在数据文件末尾移除未分配的区。在操作系统里,这也会把文件的物理大小收缩。

小结

数据库收缩命令提供的任何选项都与你无关:因为从不推荐进行数据库收缩!如果你知道在你数据文件末尾有未分配的空间,你不想要这些的话,使用TRUNCATEONLY选项进行数据库收缩更安全,因为你不会引入索引碎片。但一旦你使用了NOTRUNCATE选项,SQL Server需要在你的数据文件里移动页,这会带来严重的索引碎片。

感谢关注!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
数据库基础(二)----- 约束,数据库的设计、备份和还原
数据库基础(二)----- 约束,数据库的设计、备份和还原​ 约束 ✔  概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性 ✔  分类:     1. 主键约束:primary key     2. 非空约束:not null     3. 唯一约束:unique     4. 外键约束:foreign key ✔  非空约束:not null,值不能为null      1. 创建表时添加约束 CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL -- name为非空 );      2. 创建表
29 0
达梦数据库启用日志方法,达梦数据库查看日志是否启用,达梦数据库日志文件位置查找
达梦数据库启用日志方法,达梦数据库查看日志是否启用,达梦数据库日志文件位置查找
236 0
数据库删除数据及设置
数据库删除数据及设置
158 0
HMS数据库设置和优化
Hive Metastore (HMS) 是一种服务,用于在后端 RDBMS(例如 MySQL 或 PostgreSQL)中存储与 Apache Hive 和其他服务相关的元数据。本文主要分享HMS数据库设置和优化
420 0
数据库必知词汇:数据库快照
数据库快照是数据库(源数据库)的只读静态视图。自创建快照那刻起,数据库快照在事务上与源数据库一致。 数据库快照始终与其源数据库位于同一服务器实例上。 虽然数据库快照提供与创建快照时处于相同状态的数据的只读视图,但快照文件的大小随着对源数据库的更改而增大。给定源数据库中可以存在多个快照。在数据库所有者显式删除每个数据库快照之前,该快照将一直保留。
1553 0
Oracle数据库-备份整个数据库与还原整个数据库数据
这个功能是为了防止数据库中的数据损坏,而拿备份的表去顶替损坏的表 这个功能是在DOS窗口实现的,可并非是在Oracle数据库中执行的 先说本地的导出与导入: 备份(也叫导出): exp用户名/密码@本地服务名 file = 目标地址 (注:导出的文件是在硬盘上生成后缀名为dmp的文件) 阿里云代金券1000元免费领取地址:https://promotion.
2160 0
收缩数据库日志
原文:收缩数据库日志 USE DATABASENAME; GO --不得已时再用这个 DUMP TRANSACTION DATABASENAME WITH NO_LOG --先截断事务日志 BACKUP LOG DATABASENAME TRUNCATE_ONLY|WITH NO_LOG|TO DISK='文件路径' --再收缩日志 DBCC SHRINKFILE (2, 7)|SHRINKFILE (DATABASENAME); --要收缩的文件的fileid,对应sysfiles中的fileid。
777 0
+关注
杰克.陈
一个安静的程序猿~
文章
问答
文章排行榜
最热
最新
相关电子书
更多
数据库2025 V3
立即下载
数据库异地备份及不还原快速查询备份集最佳实践
立即下载
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL
立即下载