SQL Server查询数据库空间分配情况、数据库备份信息

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

 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  

1 exec master.dbo.proc_getdbspaceused  

查询数据库备份信息:

 1 --  drop table #dbsize
 2 --  drop table #logsize
 3 create table #dbsize(
 4      database_id int
 5     ,database_name nvarchar(1024)
 6     ,size_kb bigint
 7     ,space_available_kb bigint
 8     ,reserved_kb bigint
 9     ,data_kb bigint
10     ,index_kb bigint
11     ,unused_kb bigint
12 )
13 go
14 create table #logsize(
15     database_name nvarchar(1024)
16     ,LogSize_MB decimal(24,8)
17     ,LogSpaceUsed decimal(14,8)
18     ,Status tinyint
19 )
20 go
21 insert into #dbsize exec master.dbo.proc_getdbspaceused
22 go
23 insert into #logsize exec(‘DBCC sqlperf(logspace)‘)
24 go
25 select t0.database_id,t0.database_name
26 ,t0.size_kb/1024 as [数据库大小MB]
27 ,t0.space_available_kb/1024 as [可用空间MB]
28 ,LogSize_MB as [日志大小MB]
29 ,LogSpaceUsed as [日志已使用%]
30 ,t1.compatibility_level as [兼容级别]
31 ,t1.collation_name as [校对规则]
32 ,t1.recovery_model_desc as [恢复模式]
33 ,(case t3.type/*btype*/ when ‘D‘ then ‘完整‘ when ‘I‘ then ‘差异‘ when ‘L‘ then ‘日志‘ end)as [备份模式]
34 ,最近备份时间,备份大小MB,备份耗时Min,备份目录
35 from #dbsize t0
36 inner join master.sys.databases t1 on t0.database_name=t1.name and t1.state_desc=‘ONLINE‘
37 inner join #logsize t2 on t0.database_name=t2.database_name
38 --LEFT JOIN (select btype from (values(‘D‘),(‘I‘),(‘L‘)) as btype(btype)) t4 on 1=1
39 left join (
40     select a.database_name,a.type
41     ,CONVERT(varchar(30),a.backup_start_date,120) AS 最近备份时间
42     ,convert(decimal(18,2),compressed_backup_size/1024/1024.)  as 备份大小MB
43     ,DATEDIFF(MINUTE,backup_start_date,backup_finish_date) as 备份耗时Min
44     ,REVERSE(stuff(REVERSE(physical_device_name),1,CHARINDEX(‘\‘,REVERSE(physical_device_name))-1,‘‘)) as 备份目录
45     from msdb.dbo.backupset a
46     inner join (
47         select database_name,type,MAX(backup_start_date) as latest_backup_date
48         from msdb.dbo.backupset
49         group by database_name,type
50     )b on a.database_name=b.database_name and a.type=b.type and a.backup_start_date=b.latest_backup_date
51     left join msdb.dbo.backupmediafamily c on a.media_set_id=c.media_set_id
52 )t3 on t0.database_name=t3.database_name --and t2.btype=t3.type
53 go  

原文地址:https://www.cnblogs.com/turingchang/p/8297505.html

时间: 2024-11-07 09:11:04

SQL Server查询数据库空间分配情况、数据库备份信息的相关文章

sql server 查询数据库所有的表名+字段

原文:sql server 查询数据库所有的表名+字段 SELECT * FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='Account' SELECT    (case when a.colorder=1 then d.name else '' end) as 表名,--如果表名相同就返回空       a.colorder as 字段序号,       a.name as 字段名,       (case when COLUMNPROPER

关于SQL Server 2005 的自动远程数据库备份

原文:(原创)关于SQL Server 2005 的自动远程数据库备份 由于项目需要,需要对目标服务器上的数据库每天进行备份并转移,查阅网上的一些帮助,结合自己的实际需要,写了这篇文章,希望对有同样需求的朋友有所帮助.目标服务器:192.168.1.197,备份服务器:192.168.0.194 1.在备份服务器上新建一个文件夹(我的是C:\DbBackupTest),首先要确定对备份服务器要有足够的权限(权限设置如下图所示),最好是“Administrators”组账户.其次 到备份服务器上,

SQL Server不停机移动镜像数据库

SQL Server数据库镜像是对于数据库可用性的软件解决方案.镜像在每个数据库级别被部署,并只能在完整恢复模式下工作.由于磁盘空间的问题,需要移动镜像数据库到一个不同的位置.我们想不停机.不破坏镜像来完成这个任务.需要在不同的环境做测试. 对于启用了数据库镜像的数据库的文件移动,我们只有有限的选择.常规方法如下: 破坏数据库镜像会话,通过使用Alter database或Attach Detach移动在线数据库文件到一个新的位置. 备份数据库,并在镜像服务器上恢复备份,然后重建镜像. 技术上来

SQL Server 2008 R2 下移动数据库的存储位置

使用场景:1. 该数据库增长的较大,存储磁盘空间不足:   2. 在特定情况下该数据库需要移动到另外一块磁盘上(呵呵...我的情况就是之前的磁盘要还给别人) 步骤: 1. 新建查询 SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID('yourDataBaseName'); GO 查看到结果会看到数据库主文件以及日志的名称和物理存储的地址名称   2.新建查询 use master alter da

sql server 复制表从一个数据库到另一个数据库

sql server 复制表从一个数据库到另一个数据库 /*不同服务器数据库之间的数据操作*/ --创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询示例 select * from ITSV.数据库名.dbo.表名 --导入示例 select * into 表 f

SQL SERVER性能分析--死锁检测数据库阻塞语句

工作中数据库经常出现内存,找了篇文章 参照CSDN,中国风(Roy)一篇死锁文章 阻塞:其中一个事务阻塞,其它事务等待对方释放它们的锁,同时会导致死锁问题. 整理人:中国风(Roy) 参照Roy_88的博客 http://blog.csdn.net/roy_88/archive/2008/07/21/2682044.aspx 日期:2008.07.20 ************************************************************************

(转)SQL Server 2005附加2008的数据库

1. 生成for 2005版本的数据库脚本  2008 的manger studio  -- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例  -- 右键要转到2005的库  -- 任务  -- 生成脚本  -- 在"脚本向导"的"选择数据库"中, 确定选择的是要转到2005的库  -- 勾选"为所选数据库中的所有对象编写脚本"5-- 在接下来的"选择脚本选项"中, 将”编写创建数据库的脚本”设

SQL Server 2008 错误15023:当前数据库中已存在用户或角色

解决SQL Server 2008 错误15023:当前数据库中已存在用户或角色,SQLServer2008,错误15023,在使用SQL Server 2008时,我们经常会遇到一个情况:需要把一台服务器上的数据库转移到另外一台服务器上.而转移完成后,需要给一个"登录"关联一个"用户"时,往往会发生错误:      “错误15023:当前数据库中已存在用户或角色”        这个问题非常棘手,几经排常找到了原因与解决方法,因为这个问题与解决方法均比较复杂,所以

sql server 本地复制订阅 实现数据库服务器 读写分离(转载)

转载地址:http://www.cnblogs.com/echosong/p/3603270.html 再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下SQL Server的复制订阅实现数据的读写分离 比起mysql的复制,SQL server 复制相对强大 一. 名词解释 1.复制的 机构组成(类比报纸流通): 1).发布服务器(报社出版) 生产维护数据源,审阅所有出版数据的更改 发送给 分发服务器(邮局) 2).分发服务器 (邮局) 分发服务器包