查询数据库空间分配情况:

 

 1 use master  
 2 go  
 3 create procedure dbo.proc_getdbspaceused  
 4 as  
 5 begin  
 6 set nocount on  
 7 create table #dbsize(  
 8      database_id int  
 9     ,database_name nvarchar(1024)  
10     ,size_kb bigint  
11     ,space_available_kb bigint  
12     ,reserved_kb bigint  
13     ,data_kb bigint  
14     ,index_kb bigint  
15     ,unused_kb bigint  
16 )  
17   
18 declare @database_id int  
19 declare @name nvarchar(1024)  
20 declare @sql nvarchar(max)  
21 declare cur cursor for select database_id,name from master.sys.databases order by database_id  
22 open cur  
23 fetch next from cur into @database_id,@name  
24 while @@fetch_status=0  
25 begin  
26 set @sql =N'  
27 insert into #dbsize  
28 select  
29     database_id = '+CONVERT(nvarchar(10),@database_id)+',  
30     database_name = '''+@name+''',    
31     size_kb = ((dbsize + logsize) * 8192 / 1024),    
32     space_available_kb = (case when dbsize >= reservedpages then ((dbsize-reservedpages)* 8192/ 1024) else 0 end),  
33     reserved_kb = (reservedpages * 8192 / 1024),   
34     data_kb = (pages * 8192.0 / 1024),   
35     index_kb = ((usedpages - pages)  * 8192 / 1024),   
36     unused_kb = ((reservedpages - usedpages)  * 8192 / 1024)  
37 from(  
38     select   
39     dbsize = sum(convert(bigint,case when status & 64 = 0 then size else 0 end)) ,   
40     logsize = sum(convert(bigint,case when status & 64 <> 0 then size else 0 end))    
41     from ['+@name+'].dbo.sysfiles  
42 ) t1,(  
43     select   
44     reservedpages = sum(a.total_pages),    
45     usedpages = sum(a.used_pages),    
46     pages = sum(    
47         CASE    
48          When it.internal_type IN (202,204,211,212,213,214,215,216) Then 0    
49          When a.type <> 1 Then a.used_pages    
50          When p.index_id < 2 Then a.data_pages Else 0    
51         END )    
52     from ['+@name+'].sys.partitions p   
53     inner join ['+@name+'].sys.allocation_units a on p.partition_id = a.container_id    
54     left  join ['+@name+'].sys.internal_tables it on p.object_id = it.object_id    
55 )t2'  
56 exec(@sql)  
57 fetch next from cur into @database_id,@name  
58 end  
59 close cur  
60 deallocate cur  
61   
62 select * from #dbsize  
63 end  
64 go  
View Code

相关文章:

  • 2022-12-23
  • 2021-12-06
  • 2021-11-08
  • 2021-12-20
  • 2021-07-09
  • 2022-01-13
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-10
  • 2021-11-02
  • 2022-12-23
相关资源
相似解决方案