您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

02-SQLServer查看实例下每个数据库的大大小

bubuko 2022/1/25 19:37:14 sqlserver 字数 3056 阅读 748 来源 http://www.bubuko.com/infolist-5-1.html

1、脚本 SET NOCOUNT ONdeclare @sql nvarchar(max)declare @sql2 nvarchar(max)declare @dbname nvarchar(50)create table #db_log_size (database_name nvarchar( ...

1、脚本

SET NOCOUNT ON
declare @sql nvarchar(max)
declare @sql2 nvarchar(max)
declare @dbname nvarchar(50)
create table #db_log_size (database_name nvarchar(100),dbsize nvarchar(200),logsize nvarchar(200))
create table #result (database_name nvarchar(100),reservedpages nvarchar(200),usedpages nvarchar(200),pages nvarchar(200))


declare cur CURSOR for
select name from sys.databases where state=0
open cur
fetch next from cur into @dbname
while @@FETCH_STATUS = 0
begin
set @sql=‘
select
‘‘‘+@dbname+‘‘‘ as database_name,
sum(convert(bigint,case when status & 64 = 0 then size else 0 end)) as dbsize,
sum(convert(bigint,case when status & 64 <> 0 then size else 0 end)) as logsize
from ‘+@dbname+‘.dbo.sysfiles‘
insert into #db_log_size exec sp_executesql @sql

set @sql2=‘
select
‘‘‘+@dbname+‘‘‘ as database_name,
sum(a.total_pages) as reservedpages,
sum(a.used_pages) as usedpages,
sum(
CASE
When it.internal_type IN (202,204,207,211,212,213,214,215,216,221,222,236) Then 0
When a.type <> 1 and p.index_id < 2 Then a.used_pages
When p.index_id < 2 Then a.data_pages
Else 0
END
) as pages
from ‘+@dbname+‘.sys.partitions p join ‘+@dbname+‘.sys.allocation_units a on p.partition_id = a.container_id
left join ‘+@dbname+‘.sys.internal_tables it on p.object_id = it.object_id‘
insert into #result exec sp_executesql @sql2

fetch next from cur into @dbname
end
close cur
deallocate cur

select
d.database_name as ‘数据库名称‘,
ltrim(str((convert (dec (15,2),d.dbsize) + convert (dec (15,2),d.logsize)) * 8192 / 1048576 / 1024,15,2) + ‘GB‘) as ‘数据库总大小‘,
ltrim(str((case when d.dbsize >= r.reservedpages then
(convert (dec (15,2),d.dbsize) - convert (dec (15,2),r.reservedpages))
* 8192 / 1048576 / 1024 else 0 end),15,2) + ‘GB‘) as ‘未分配空间‘,
ltrim(str(convert(dec(15,2),(convert (dec (15,2),r.reservedpages) + convert (dec (15,2),d.logsize))
/ (convert (dec (15,2),d.dbsize) + convert (dec (15,2),d.logsize))) * 100)) + ‘%‘ as ‘空间使用率‘
from #db_log_size d
inner join #result r on d.database_name = r.database_name

drop table #db_log_size
drop table #result

go

2、结果示例

技术分享图片

 

02-SQLServer查看实例下每个数据库的大大小

原文:https://www.cnblogs.com/jialanyu/p/13224336.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶