以GB为单位获取SQL Server 2012中的实际数据库大小?

时间:2017-04-18 12:51:42

标签: sql-server

我在SQL Server中有一个数据库,要在GB'中获取数据库的大小,我应该使用什么查询?

我试过的查询是:

select 
    d.name, m.size * 8 / 1024
from 
    sys.master_files m 
join
    sys.databases d on d.database_id = m.database_id and m.type = 0

但它没有返回GB的大小......

3 个答案:

答案 0 :(得分:6)

您需要再次除以1024。

select d.name, m.size * 8 / 1024 / 1024
from sys.master_files m JOIN sys.databases d ON d.database_id = m.database_id and m.type =0

然而,这将舍入到最接近的整个GB(即整数)您将需要强制转换为(数字,浮点数,小数,双精度等)

如果你跑:

SELECT physical_name, size * 8 / 1024 / 1024  FROM sys.database_files WHERE TYPE = 0

这将为您提供所连接数据库的信息,而不是实例上的所有数据库。

答案 1 :(得分:3)

Nat是对的。你需要再次除以1024。为了使事情更容易阅读,我希望看到标记的日志和数据文件。以及包含每种格式的文件大小。

cpanm Socket

答案 2 :(得分:0)

稍作修改后的代码大小为xx TB xx GB xx MB

select 
    d.name as 'database'
    , mdf.physical_name as 'mdf_file'
    , mdf.size
    , CONVERT(VARCHAR(10), (mdf.size * 8) / (1024 * 1024 * 1024)) + ' TB '
    + CONVERT(VARCHAR(10), ((mdf.size * 8) % (1024 * 1024 * 1024)) / (1024 * 1024)) + ' GB '
    + CONVERT(VARCHAR(10), (((mdf.size * 8) % (1024 * 1024 * 1024)) % (1024 * 1024)) / 1024) + ' MB '
    , ldf.physical_name as 'log_file'
    , ldf.size
    , CONVERT(VARCHAR(10), (ldf.size * 8) / (1024 * 1024 * 1024)) + ' TB '
    + CONVERT(VARCHAR(10), ((ldf.size * 8) % (1024 * 1024 * 1024)) / (1024 * 1024)) + ' GB '
    + CONVERT(VARCHAR(10), (((ldf.size * 8) % (1024 * 1024 * 1024)) % (1024 * 1024)) / 1024) + ' MB '
from sys.databases d
inner join sys.master_files mdf on 
    d.database_id = mdf.database_id and mdf.[type] = 0
inner join sys.master_files ldf on 
    d.database_id = ldf.database_id and ldf.[type] = 1
order by d.name

样本输出


database    mdf_file                Size            log_file                        Size
Database    C:\MSSQLDB\Database.mdf 0 TB 0 GB 5 MB  C:\MSSQLLog\Database_log.ldf    0 TB 0 GB 2 MB