sql-server-2005 – 以编程方式确定数据库上的可用空间?

好吧,我试过寻找这个答案,但没有运气.我工作的SQL Server上有大约50个数据库,我几乎每天都要检查一下,看看是否可以通过缩小来释放任何空间.我们的驱动器往往会填满很多,所以这就是为什么它几乎是日常工作的原因.

有没有快速的方法来检查哪些数据库实际上有可用的可用空间?有谁知道系统/自定义存储过程或系统视图可以生成每个数据库的列表以及可以在该数据库上缩小多少可用空间?

顺便说一下,使用sql server 2005.

为每个数据库运行sp_spacedused:

--temporary table to hold database names
CREATE TABLE #Databases (name varchar(255))

INSERT INTO #Databases
SELECT name FROM master..sysdatabases

DECLARE abc CURSOR FOR
   SELECT name FROM #Databases

DECLARE @name varchar(255)
DECLARE @sql nvarchar(1024)

OPEN abc

FETCH NEXT FROM abc INTO @name

WHILE @@FETCH_STATUS = 0 
BEGIN
   --build sql to switch to that database...
   SET @sql = 'USE '+@name
   PRINT @sql
   EXECUTE (@sql)

   --and run spaceused on it
   SET @sql = 'EXECUTE sp_spaceused @UpdateUsage=True'
   PRINT @sql
   EXECUTE (@sql)

   FETCH NEXT FROM ABC INTO @name
END

CLOSE abc
DEALLOCATE abc
DROP TABLE #Databases

样本单数结果

执行T-SQL:

USE Contoso
EXECUTE sp_spaceused @UpdateUsage=True

结果:

database_name: Contoso
database_size:     85.13 MB
unallocated_space: 15.41 MB

reserved:         70,368 KB (68.7 MB)
data:             42,944 KB (41.9 MB)
index_size:       24,200 KB (23.6 MB)
unused:            3,224 KB ( 3.1 MB)

收缩:

DBCC SHRINKDATABASE (Contoso)

再次检查空间:

EXECUTE sp_spaceused @UpdateUsage=True

结果:

database_name: Contoso
database_size:     69.81 MB
unallocated_space:  0.20 MB

reserved:         70,256 KB (68.6 MB)
data:             43,024 KB (42.0 MB)
index_size:       24,200 KB (23.6 MB)
unused:            3,032 KB ( 3.0 MB)
本站公众号
   欢迎关注本站公众号,获取更多程序园信息
开发小院