确定能够释放空间的SQL Server数据库文件的脚本
发布时间:2010-07-31 12:36:00
问题
作为一个负责几个服务器的数据库管理员,我接到许多电话是关于磁盘空间的。我所做的第一件事是找到可以缩小的数据文件来释放一些磁盘上的空间。我所负责的一些服务器上具有几个数据库,要指出哪个数据文件能够立即释放空间需要花费些时间,专家能否介绍一种捷径解决此问题?
专家解答
你需要的第一个东西是驱动盘信息。你可以从扩展的存储过程xp_fixeddrives获得这个信息,它返回驱动盘字母和这个驱动盘上有多少空闲空间。接下来你需要知道在每个数据文件中有多少空间是可用的。当你在SSMS中使用这个信息的时候,Microsoft使用两个不同的DBCC调用;一个用于数据文件而另一个用于日志文件。要替代使用单独的DBCC调用,你可以调用fileproperty函数并传递数据文件的名称和SpaceUsed参数。这是从数据文件所在数据库的上下文环境中运行的,所以你可以使用sp_msforeachdb存储过程来返回所有数据库的结果。
既然你已经有了驱动盘信息和所用的空间,那么你就可以将它连接到sys.databases和sys.master_files表来返回对所有数据的视图。现在它可以快速地确定具有最多空闲空间的文件和它们的所在位置。
USEMASTER
GO
CREATETABLE#TMPFIXEDDRIVES(
DRIVECHAR(1),
MBFREEINT)
INSERTINTO#TMPFIXEDDRIVES
EXECxp_FIXEDDRIVES
CREATETABLE#TMPSPACEUSED(
DBNAMEVARCHAR(50),
FILENMEVARCHAR(50),
SPACEUSEDFLOAT)
INSERTINTO#TMPSPACEUSED
EXEC('sp_msforeachdb''use?;Select''''?''''DBName,NameFileNme,fileproperty(Name,''''SpaceUsed'''')SpaceUsedfromsysfiles''')
SELECTC.DRIVE,
CASE
WHEN(C.MBFREE)>1000THENCAST(CAST(((C.MBFREE)/1024.0)ASDECIMAL(18,2))ASVARCHAR(20))+'GB'
ELSECAST(CAST((C.MBFREE)ASDECIMAL(18,2))ASVARCHAR(20))+'MB'
ENDASDISKSPACEFREE,
A.NAMEASDATABASENAME,
B.NAMEASFILENAME,
CASEB.TYPE
WHEN0THEN'DATA'
ELSETYPE_DESC
ENDASFILETYPE,
CASE
WHEN(B.SIZE*8/1024.0)>1000THENCAST(CAST(((B.SIZE*8/1024)/1024.0)ASDECIMAL(18,2))ASVARCHAR(20))+'GB'
ELSECAST(CAST((B.SIZE*8/1024.0)ASDECIMAL(18,2))ASVARCHAR(20))+'MB'
ENDASFILESIZE,
CAST((B.SIZE*8/1024.0)-(D.SPACEUSED/128.0)ASDECIMAL(15,2))SPACEFREE,
B.PHYSICAL_NAME
FROMSYS.DATABASESA
JOINSYS.MASTER_FILESB
ONA.DATABASE_ID=B.DATABASE_ID
JOIN#TMPFIXEDDRIVESC
ONLEFT(B.PHYSICAL_NAME,1)=C.DRIVE
JOIN#TMPSPACEUSEDD
ONA.NAME=D.DBNAME
ANDB.NAME=D.FILENME
ORDERBYDISKSPACEFREE,
SPACEFREEDESC
DROPTABLE#TMPFIXEDDRIVES
DROPTABLE#TMPSPACEUSED
在将上面的内容拷贝和黏贴到一个SQL Server 2005查询窗口中并运行所有的代码之后,得到的结果集将如下所示:
猜你喜欢
- 其实网上已经有很多ASP生成htm的文章了,有一种方法是ASP+XML的生成方法,虽然有一种好处就是不用程序写模版就可以直接引用原来的要生成
- 1.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;2.会用asp,并不说明你会asp;3.看a
- Oracle SQL语句中的Update可以和SEQUENCE联合使用,以达到更新某字段的值连续编号,而不需要使用游标去逐条遍历更新数据库记
- 我们已经知道,null 没有任何的属性值,并且无法获取其实体(existence)值。所以 null.property 返回的是错误(err
- UNIX时间戳转换为日期用函数FROM_UNIXTIME()select FROM_UNIXTIME(1156219870);日期
- 我们生活在信息繁杂的社会,尤其是在互联网时代,人们开始通过网络开始接触越来越多的信息,那么,如何获取/传递有效而准确的信息将非常重要。在网页
- ctrl+Enter:重建ctrl+0:相当于点击当前行左方的加号或减号ctrl+E:打开新窗口预览ctrl+T:替换\t为两个空格tab:
- 是扫盲文章, 其实我自己就是个被扫对象, 为了学习W3C标准地设计网页, 想到写这个系列的文章当作自己的学习笔记, 不求每篇都写很好, 只求
- 排序是个很泛的概念,而且根据被排序的数据量排序方法和侧重又有很大的不同。因此一直没想到从何着手。今天把玩iphone的时候突然又想到这个问题
- 什么是CSS Sprites?“Sprite”(精灵)这个词在计算机图形学中有它独特的定义,由于游戏、视频等画质越来越高,必须有一种技术可以
- 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第四个自然段。以下叙述的脚本包括服务器端脚本和客户端的脚本,服务器端脚本指在服务器上
- 如果 replaceText 为函数,对于每一个匹配的子字符串,调用该函数时带有下面的 m+3 个参数,此处 m 是在 rgExp 中捕获的
- 英国著名学者李约瑟早在100多年前就疑惑:为什么中国的科技在唐宋时代就已领先西方,却在明清时代落后下来。对此,人们一向认为这主要是儒家思想的
- 外联接。外联接可以是左向外联接、右向外联接或完整外部联接。 在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:LEFT J
- URL 编码是什么东东呢?看看我从网上抄的定义: 引用: url编码是一种浏览器用来打包
- 我的长博文不少,比较影响阅读体验,有必要添加一个文章目录功能。相比 Wordpress, Typecho 的插件就比较少了。我想找一个像掘金
- SQL是用于访问ORACLE数据库的语言,PL/SQL扩展和加强了SQL的功能,它 同时引入了更强的程序逻辑。 PL/SQL支持DML命令和
- 为 Web页指定 DOCTYPE 会影响浏览器呈现页的方式。Internet Explorer、Mozilla Firefox 和 Oper
- 像素误差看自己设计好上线的网站,偶尔会发觉像素行间出现了弹性空间,总在不经意间蹦出一定的差距。有些页面很难发现,比如活动类页面,这类页面多呈
- 今天下午主要做了个实验,是针对 测试表的列,进行添加,修改,删除的。做法如下: 增加一列: alter table emp4 add tes