确定能够释放空间的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查询窗口中并运行所有的代码之后,得到的结果集将如下所示:


猜你喜欢
- 朴素贝叶斯估计朴素贝叶斯是基于贝叶斯定理与特征条件独立分布假设的分类方法。首先根据特征条件独立的假设学习输入/输出的联合概率分布,然后基于此
- 当我们学习surface命令时,已经看到了三维作图的一些端倪。在matlab中我么可以调用mesh(x,y,z)函数来产生三维图像。首先,我
- 不废话,直接上代码Python3.6签到代码,只需修改url,账号,密码即可,此处是登录时无验证登录,有验证码的自行补充# -*- codi
- 自定义指令directives及常用钩子函数说明除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指
- 训练用PyTorch编写的LSTM或RNN时,在loss.backward()上报错:RuntimeError: Trying to bac
- 最近在做后台管理系统的时候遇到要使用富文本编辑器。最后选择了ueditor,我的项目使用 vue+vuex+vue-router+webpa
- 一 使用SELECT子句进行多表查询SELECT 字段名 FROM 表1,表2 …&nbs
- 目录项目地址安装导入使用1 创建连接2 执行sql语句3 select 方法4 insert_into 方法5 merge_in
- 讲了很多数据容器操作,这篇我们看看时间的处理。开发中常用的日期操作有哪些?获取当前时间获取系统秒数(从 * 时间开始)日期跟秒数之间转换获取日
- 1.CUDA驱动和CUDA Toolkit对应版本表一:CUDA驱动及CUDA Toolkit最高对应版本最新可查阅官方文档注:驱动是向下兼
- 本博文源于python科学计算,旨在解析如何使用python进行计算分段函数值。下面就以复杂的二元函数进行演示。题目再现求解思路首先先生成x
- 需求给定一个日期,格式如 “2020-2-12”,计算出这个日期是 2020 年的第几天?实现思路使用 tkinter 和 tkinter.
- 如何将训练好的网络进行保存,我们可以用pickle或cPickle来保存Keras模型,同时我们可以用下面的方法:一、保存整个模型model
- Function Moneynm(n,m) &
- 1. dataloader() 初始化函数def __init__(self, dataset, batch_size=1, shuffle
- Django部署到Cenos7需要安装大量的依赖包, 有很多坑需要踩, 这里是踩坑后探索出的标准化步骤实验环境: 腾讯云centos7用ce
- 出现这个问题的原因不是'/xxx.frm'这个文件不见了,而是这些文件的权限(应该要是mysql)不知道为什么变成了root
- 如何用ASP获知机器的网络配置?看看我们的例子:Option Explicit Dim WSHShell&nb
- 一、什么是集合二、集合的创建方式集合中的元素不能重复#地点:湖北武汉#姓名:学工科的皮皮志#开发时间:2022/2/27 19:
- 在最近工作中,有一个需求,需要做一个表格,并且对该表格右键弹出菜单支持增删改,这里做下总结,功能截图如下:首先定义菜单结构<!-- 菜