代码之家  ›  专栏  ›  技术社区  ›  GordyII

在sql server数据库中找到可用空间的最佳方法?

  •  6
  • GordyII  · 技术社区  · 17 年前

    我想知道我的数据库文件中还有多少空间,这样我就可以知道何时增加空间,这样在应用程序运行困难时就不会这样做了。

    我更希望能够编写脚本,这样我就可以定期在多个数据库中运行它。

    我有SQL Server 2000和SQL Server 2005数据库,但我希望能够在这两个数据库上运行相同的脚本。

    我可以使用Management Studio在2005数据库上手动执行此操作,但不能在2000数据库上执行此操作。

    4 回复  |  直到 17 年前
        1
  •  14
  •   Michael Petrotta user3140870    17 年前

    尝试 sp_spaceused

    显示行数,磁盘 表、索引视图或服务 当前数据库中的代理队列, 并被整个数据库使用。

    你可以用 sp_helptext ,如果要将其绑定到某些服务器端逻辑中。

    编辑 :在下面展开我的评论,并感谢 http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=82359 ,下面是按文件分解使用情况的方法:

    select
          name
        , filename
        , convert(decimal(12,2),round(a.size/128.000,2)) as FileSizeMB
        , convert(decimal(12,2),round(fileproperty(a.name,'SpaceUsed')/128.000,2)) as SpaceUsedMB
        , convert(decimal(12,2),round((a.size-fileproperty(a.name,'SpaceUsed'))/128.000,2)) as FreeSpaceMB
    from dbo.sysfiles a
    
        2
  •  1
  •   Jason Clark    10 年前

    DECLARE @command VARCHAR(5000)   
    DECLARE @DBInfo TABLE   
    ( ServerName VARCHAR(100),   
    DatabaseName VARCHAR(100),   
    PhysicalFileName NVARCHAR(520),   
    FileSizeMB DECIMAL(10,2),   
    SpaceUsedMB DECIMAL(10,2),   
    FreeSpaceMB DECIMAL(10,2), 
    FreeSpacePct varchar(8) 
    ) 
    
    SELECT @command = 'Use [' + '?' + '] SELECT   
    @@servername as ServerName,   
    ' + '''' + '?' + '''' + ' AS DatabaseName   , filename 
        , convert(decimal(12,2),round(a.size/128.000,2)) as FileSizeMB 
        , convert(decimal(12,2),round(fileproperty(a.name,'+''''+'SpaceUsed'+''''+')/128.000,2)) as SpaceUsedMB 
        , convert(decimal(12,2),round((a.size-fileproperty(a.name,'+''''+'SpaceUsed'+''''+'))/128.000,2)) as FreeSpaceMB, 
        CAST(100 * (CAST (((a.size/128.0 -CAST(FILEPROPERTY(a.name,' + '''' + 'SpaceUsed' + '''' + ' ) AS int)/128.0)/(a.size/128.0)) AS decimal(4,2))) AS varchar(8)) + ' + '''' + '%' + '''' + ' AS FreeSpacePct 
    from dbo.sysfiles a' 
    
    INSERT INTO @DBInfo 
    EXEC sp_MSForEachDB @command   
    
    SELECT * from @DBInfo
    
        3
  •  0
  •   Michael Freidgeim    13 年前

    可以运行SQL脚本手动检查可用空间。但最好是创建作业并分配警报,以便在空间不足时自动通知管理员。

    我找到的最好的文章- Managing Database Data Usage With Custom Space Alerts

    Monitor database file sizes with SQL Server Jobs

    苏斯 (可从 http://searchsqlserver.techtarget.com/tip/Find-size-of-SQL-Server-tables-and-other-objects-with-stored-procedure

    EXEC dbo.sp_SOS @OrderBy='T' 
    
        4
  •  -1
  •   Christian    17 年前

    对我来说,在硬盘满之前,sql server总是自动分配更多的空间,所以只需查询硬盘上的可用空间。