确定SQL Server的可用磁盘空间

  如果磁盘空间很紧张或者大比例的磁盘需要用来进行该进程,那么在继续进行一个进程之前检查磁盘空间是一个明智之举。如果在一个进程运行数小时之后由于磁盘不足而导致进程在快结束时失败,那么这是令人不安的。虽然SQL Server中有几个不同的选项可用来检查磁盘(CLR,,WMI, PowerShell等等),但是 让我们来看看怎样使用SQL Server 2000 到 2008都提供的xp_fixeddrives扩展存储过程解决这个问题。

  用来评估一个SQL Server 磁盘驱动器上可用磁盘空间的示例存储过程

  在下面的示例存储过程中,它接受了一个特定磁盘驱动器上最低量的可用MB的参数,然后执行master.sys.xp_fixeddrives扩展存储过程到一个临时表中。一旦该数据在临时表中,当前的可用磁盘空间就会与最小的可用磁盘空间进行比较,从而确定该进程应该继续还是产生一个错误。

  要记住的一点是在SQL Server 2000和SQL Server 2005/2008之间,xp_fixeddrives扩展存储过程的属主发生了变化。在SQL Server 2000中,xp_fixeddrives的属主是dbo,而在SQL Server 2005/2008中,属主变成了sys。由于属主的变化,两个存储过程分别提供如下。一个针对SQL Server 2005/2008,另一个针对SQL Server 2000。

*** NOTE *** - SQL Server 2008 and 2005 Version  CREATE PROCEDURE dbo.spExec_Sufficient">DiskSpace @MinMBFree int, @Drive char(1) AS  /*  ----------------------------------------------------------------------------  -- Object Name: dbo.spExec_SufficientDiskSpace  -- Project: Admin Scripts  -- Business Process: Monthly Sales Reports  -- Purpose: Validate sufficient disk space  -- Detailed Description: Validate sufficient disk space based on based on the  -- @MBfree and @Drive parameters  -- Database: Admin  -- Dependent Objects: master.sys.xp_fixeddrives  -- Called By: Admin Scripts  -- Upstream Systems: Unknown  -- Downstream Systems: Unknown  --  --------------------------------------------------------------------------------------  -- Rev | CMR | Date Modified | Developer | Change Summary  --------------------------------------------------------------------------------------  -- 001 | NA | 03.05.2009 | MSSQLTips | Original code  --  */ SET NOCOUNT ON  -- 1 - Declare variables  DECLARE @MBfree int  DECLARE @CMD1 varchar(1000)  -- 2 - Initialize variables  SET @MBfree = 0  SET @CMD1 = ''  -- 3 - Create temp tables  CREATE TABLE #tbl_xp_fixeddrives  (Drive varchar(2) NOT NULL,  [MB free] int NOT NULL)  -- 4 - Populate #tbl_xp_fixeddrives  INSERT INTO #tbl_xp_fixeddrives(Drive, [MB free])  EXEC master.sys.xp_fixeddrives  -- 5 - Initialize the @MBfree value  SELECT @MBfree = [MB free]  FROM #tbl_xp_fixeddrives  WHERE Drive = @Drive  -- 6 - Determine if sufficient fre space is available  IF @MBfree > @MinMBFree  BEGIN  RETURN  END  ELSE  BEGIN  RAISERROR ('*** ERROR *** - Insufficient disk space.', 16, 1)  END  -- 7 - DROP TABLE #tbl_xp_fixeddrives  DROP TABLE #tbl_xp_fixeddrives  SET NOCOUNT OFF  GO  *** NOTE *** - SQL Server 2000 Version  CREATE PROCEDURE dbo.spExec_SufficientDiskSpace @MinMBFree int, @Drive char(1) AS  /*  ----------------------------------------------------------------------------  -- Object Name: dbo.spExec_SufficientDiskSpace  -- Project: Admin Scripts  -- Business Process: Monthly Sales Reports  -- Purpose: Validate sufficient disk space  -- Detailed Description: Validate sufficient disk space based on based on the  -- @MBfree and @Drive parameters  -- Database: Admin  -- Dependent Objects: master.sys.xp_fixeddrives  -- Called By: Admin Scripts  -- Upstream Systems: Unknown  -- Downstream Systems: Unknown  -- --------------------------------------------------------------------------------------  -- Rev | CMR | Date Modified | Developer | Change Summary  --------------------------------------------------------------------------------------  -- 001 | NA | 03.05.2009 | MSSQLTips | Original code  --  */  SET NOCOUNT ON  -- 1 - Declare variables  DECLARE @MBfree int  DECLARE @CMD1 varchar(1000)  -- 2 - Initialize variables  SET @MBfree = 0  SET @CMD1 = ''  -- 3 - Create temp tables  CREATE TABLE #tbl_xp_fixeddrives  (Drive varchar(2) NOT NULL,  [MB free] int NOT NULL)  -- 4 - Populate #tbl_xp_fixeddrives  INSERT INTO #tbl_xp_fixeddrives(Drive, [MB free])  EXEC master.dbo.xp_fixeddrives  -- 5 - Initialize the @MBfree value  SELECT @MBfree = [MB free]  FROM #tbl_xp_fixeddrives  WHERE Drive = @Drive  -- 6 - Determine if sufficient fre space is available  IF @MBfree > @MinMBFree  BEGIN  RETURN  END  ELSE  BEGIN  RAISERROR ('*** ERROR *** - Insufficient disk space.', 16, 1)  END  -- 7 - DROP TABLE #tbl_xp_fixeddrives  DROP TABLE #tbl_xp_fixeddrives  SET NOCOUNT OFF  GO

  下一步

  如果你的组织拥有的程序要求一个很大量的磁盘空间或者大比例的特定磁盘,那么确保在程序开始或者关键点时确认磁盘驱动器具有足够的存储。一次快速检查就可以节约大量的时间,减少烦恼和重新工作。

  使用上面列出的存储过程中的master.sys.xp_fixeddrives扩展存储过程是检查可用磁盘空间的其中一种方法。CLR,PowerShell,WMI等等也可以检查磁盘空间,所以选择适合你代码和环境的方法。

时间: 2024-10-30 00:37:45

确定SQL Server的可用磁盘空间的相关文章

sqlserver-SQL SERVER 2008数据库磁盘空间不足问题

问题描述 SQL SERVER 2008数据库磁盘空间不足问题 各位好,目前我遇到一个SQLSERVER的技术问题,在网上没有找到比较好的方案,请大家一起帮忙处理一下: SQLServer 2008数据库的数据库文件已经占满了磁盘,导致数据库宕机.临时删除了两个大表的数据空出40G的数据(日志清理已经不到1G了),让数据库得以运行.在无法扩充硬盘(200G)空间的前提下,另增加了一个F盘,有500G,但不知道怎么使用,最直接的是把原数据库分离到F盘上,但原D盘就没用了,那么问题来了,SQL SE

SQL Server高可用——日志传送(4-3)——使用

原文:SQL Server高可用--日志传送(4-3)--使用   顺接上一篇:SQL Server高可用--日志传送(4-2)--部署 本文为本系列最重要的一篇,讲述如何使用日志传送及一些注意事项.从上一篇可以看到,其实配置不难,难是难在一旦出现问题,如何处理.这些是4大高可用的同性.配置都不会很难,只是如何故障排除而已.     监控日志传送:       在配置好日志传送之后,需要进行监控,监控备份.复制及还原的作业运作情况.这三类作业任何一个没有成功都意味着日志传送失败. 有两种方法可以

SQL Server高可用——日志传送(4-1)——概论

原文:SQL Server高可用--日志传送(4-1)--概论  本文作为学习总结,部分内容出自联机丛书及其他书籍   日志传送是什么?          SQLServer 2012之前(2012出现了AlwaysOn),SQLServer存在四大高可用(集群/群集.日志传送.镜像和复制).本主题主要讨论其中的日志传送功能.但是由于工作原因,只能谈论到使用级别,不做太深入的研究.   现在先来说说日志传送(Log Shipping)是什么?         它是高可用的其中一种,可以搭配其他高

SQL Server高可用的常见问题分析_MsSql

每次谈到SQL Server的高可用,很多的DBA,特别是SQL Server DBA心里一痛:因为大家都认为SQL Server无法或者很难实现SQL Server.也有很多的DBA朋友脑袋一拍,给出答案"高可用不就是微软的那几个技术吗,如Replication, Failover Clustering"- 1.难道SQL Server在高可用上面就显得这么的无力吗? 回答:不是的,其实SQL Server很给力. 2.为什么很多人总是抱怨SQL Server中高可用很难实现呢? 这

SQL Server高可用的常见问题分析

每次谈到SQL Server的高可用,很多的DBA,特别是SQL Server DBA心里一痛:因为大家都认为SQL Server无法或者很难实现SQL Server.也有很多的DBA朋友脑袋一拍,给出答案"高可用不就是微软的那几个技术吗,如Replication, Failover Clustering"- 1.难道SQL Server在高可用上面就显得这么的无力吗? 回答:不是的,其实SQL Server很给力. 2.为什么很多人总是抱怨SQL Server中高可用很难实现呢? 这

SQL Server高可用——日志传送(4-2)——部署

原文:SQL Server高可用--日志传送(4-2)--部署   前文再续,书接上一回.本章演示一下日志传送的具体过程   准备工作:   由于时间关系,已经装好了3台虚拟机,且同在一个域里面:         SQL01:主服务器 SQL02:辅助服务器 SQL03:监视服务器   初始配置:       这里是实验方便,正式环境应该由于特殊账号的读写权限.注意这里的读写权限不应该是sql内部的账号,如sa这些,而是sqlagent.SQLServer service这类型的账号,这些账号才

SQL Server 磁盘请求超时的833错误原因及解决方法

最近遇到一个SQL Server服务器响应极度缓慢,并且出现客户端请求报错的情况,在数据库中的errorlog中出现磁盘请求超过15s才完成的error消息. 对于此类问题,到底是存储系统或者磁盘的故障,还是SQL Server 自己的问题,亦或是应用程序引发的呢?又要如何解决? 本文将对引起此问题的某一方面的因素进行简单的分析,但是无法涵盖所有潜在的可能性,因此遇到类似问题还要做具体的分析. SQL Server中的磁盘请求超时 该错误的英文版的错误信息如下: SQL Server has e

SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型

原文:SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应的GIS专业理论知识. 5.其他相关知识.     SQL S

SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型

原文:SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应(比如OGC)的GIS专业理论知识. 5.其他相关知识.   通过前面几篇文章介