SQL SERVER运维日记--收缩数据库

原创 2017年07月14日 10:50:53

一个小故事

某天,小王正在和HR妹妹闲聊,正HAPPY时,,突然收到系统告警消息,数据库磁盘被剩余空间500M,OMG,不行,磁盘快满了,要是业务要停了,,那就小王只能删库到跑路了,,,

 


先检查下,有没有可以删除的不用的文件,结果都是重要的或者拿不准的。先收缩下数据库吧,点击运行。等收缩完成就可以继续去根HR妹妹聊天了。突然电话座机和手机齐鸣,小王心里一种不祥的预感呢?好像这个场景在哪里见过。。不会是数据库阻塞了吧?? 手忙脚乱的先接起手机,因为来电显示是某业务部门主管 “小王啊,,现在系统卡死了,全部不动了,是怎么回事啊,你赶紧处理下”,,“恩,好的,我马上检查下”,然后又接起座机,是另外一个部门的主管说报表看不了。慌忙应付完了,赶紧检查数据库执行中的语句。 果然数据库产生大量的阻塞,,连带数据库服务器的操作都变得好慢(是我的心理作用吗?)。正准备先把收缩操作取消了,,电话有同时响起了,,,唉,不管了,先处理问题。然后点击取消。经过漫长的等待,,终于完成了,然后打电话跟各个部门解释,,写事故报告,,悲剧,,今天的午饭都不想吃了。

这个场景是不是很熟悉啊,关于数据库收缩的问题,是我在群里,论坛里,看到新人问过最频繁的问题之一。今天这篇文章对数据库收缩进行有个框架性说明,希望小伙伴在以后遇到相关的

问题时,做到心中有数。

 

 


关于收缩的建议

不到万不得已,千万不要收缩数据库。收缩数据库影响极大:

1.收缩数据库对数据库的影响极大,产生大量日志和碎片,而且会锁表。如果你的库当前正在被使用,收缩不下去非常正常。
2.收缩数据库一定要手工来做的,而且是在维护窗口期做的事。
3.尽量使用语句来执行,可以提示错误

下面的文章详细介绍:
http://www.sqlskills.com/blogs/paul/why-you-should-not-shrink-your-data-files/.

 


收缩的正确姿势

在不得不收缩的时候,参考下面的步骤

1.找到数据库中最大的几个表,重建所有索引。首先尝试指定Truncate Only收缩方式.它只是移除文件尾部的空闲空间,并不重新组织已经使用的数据页。

DBCC SHRINKDATABASE (AdventureWorks2012, TRUNCATEONLY);  

2 最后才考虑,不带选项的收缩。收缩不要一次性全部收缩。 可以每次收缩2G左右。不要把空间可用空间全部收缩了,可以剩余一部分比如4G。收缩完后,记得重建索引.

补充:

还有一种办法就是新建文件组,使用CREATE INDEX ... WITH(DROP_EXISTING = ON)ON语法将所有相关的的表和索引移动到新文件组。然后收缩旧的文件组。

 

3.可在进程中的任一点停止 DBCC SHRINKDATABASE 操作,任何已完成的工作都将保留。

4. 不能在备份数据库时收缩数据库

 


 可能需要收缩的场景

1.你删除了大量数据,而且数据不太可能增长。

2.要移除某个文件时,你需要先清空数据文件。

 


总结

那我们处理磁盘空间不足的最好的办法是什么呢?最好的办法是在最初规划时,预估好未来一年或者二年的数据增长。给磁盘划分足够的空间。设置好数据库的初始大小,并且将自动增长使用固定量增长。

版权声明:本文为博主原创文章,未经博主允许不得转载。

SQL Server:“数据收缩”详解

SQL Server:“数据收缩”详解 1. 数据库的相关属性 2. 为何数据库需要收缩? 3. 如何收缩数据库? 1. 数据库的相关属性 ...
  • sunroyi666
  • sunroyi666
  • 2016年06月27日 12:26
  • 10674

SQL SERVER运维日记--收缩数据库

一个小故事 某天,小王正在和HR妹妹闲聊,正HAPPY时,,突然收到系统告警消息,数据库磁盘被剩余空间500M,OMG,不行,磁盘快满了,要是业务要停了,,那就小王只能删库到跑路了,,,   ...
  • x333vxhl
  • x333vxhl
  • 2017年02月12日 10:35
  • 71

SQL SERVER 收缩数据库的命令

http://www.cnblogs.com/fyen/archive/2011/01/18/1938707.html
  • panpanxj
  • panpanxj
  • 2014年09月30日 17:12
  • 1158

SQL Server中收缩、清空和删除数据库文件及日志文件

一、简单方法 –SQL Server收缩方法 1、右键数据库→属性→选项→故障还原模型→设为简单→确定; 2、右键数据库→所有任务→收缩数据库→确定; 3、右键数据库→属性→选项→故障还...
  • wlming6
  • wlming6
  • 2015年06月15日 11:29
  • 9078

SQL SERVER 数据库日志已满,如何收缩数据库日志

Microsoft OLE DB Provider for SQL Server 错误 80040e14 数据库 mis1 的日志已满。请备份该数据库的事务日志以释放一些日志空间。 使用了一个简单的方...
  • faintbear
  • faintbear
  • 2005年02月06日 17:14
  • 30578

sql server2008 日志收缩 命令行

---首先备份数据库(含日志文件)  use myhis  go   backup database  myhis to disk='d:\myhis_rzbak'  go  ...
  • BlueCY
  • BlueCY
  • 2015年05月08日 10:44
  • 1342

SQL Server收缩数据库日志文件失败的解决办法

由于数据库日志文件过大导致磁盘不够用,我们采取的解决办法是收缩数据库日志文件,但是有时候执行收缩操作的时候不成功也不报错,这就头疼了: 先看下,如何做收缩操作的吧: 将文件收缩...
  • Wikey_Zhang
  • Wikey_Zhang
  • 2017年06月30日 16:18
  • 733

sql server 2000收缩数据库【极简操作】

个人理解,数据库在平凡长期操作的过程中会数据的日志文件永远是按一定的比例在增加,数据文件在数据库删除大量的数据后不一定减小磁盘空间,反复操作会出现空间浪费,所以收缩数据库将会得以体现。 假设把数据库...
  • w200221626
  • w200221626
  • 2016年07月25日 15:26
  • 2652

SqlServer2008T-Sql收缩数据库日志文件

一、 在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式。 实例代码: ---------------------------------数据库日志文件收缩------...
  • u011127019
  • u011127019
  • 2016年12月14日 14:47
  • 1238

sql server 2008数据库文件收缩的方法。

ALTER DATABASE K3Cloud_HT SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE K3Cloud_HT SET RECOVE...
  • wiser
  • wiser
  • 2014年10月07日 14:26
  • 3863
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL SERVER运维日记--收缩数据库
举报原因:
原因补充:

(最多只允许输入30个字)