引用
- 统计某个表的空间大小, 行数信息
EXEC Your_DB.dbo.sp_spaceused 'dbo.t_log';
-- 统计多个数据库多个表的空间大小, 行数信息
create table tmp_table_space(table_name varchar(50), table_rows int, total_size varchar(20),data_size varchar(20), index_size varchar(20),
unused_size varchar(20), dbname varchar(30));
insert into tmp_table_space(table_name,table_rows,total_size,data_size,index_size,unused_size)
EXEC Your_DB.dbo.sp_spaceused 'dbo.t_log';
insert into tmp_table_space(table_name,table_rows,total_size,data_size,index_size,unused_size)
EXEC Your_DB.dbo.sp_spaceused 'dbo.t_log2';
update tmp_table_space set dbname='AHBZMJ' where dbname is null;
/*************************************************************************
用于查看对应数据库的大小、占用空间以及该数据库中各个系统表、用户表
使用方法: 在查询分析器中选择您要查看的数据库,然后运行此代码即可。
**************************************************************************/
----新建一个表spt_result_table存储数据库中各个表的空间信息
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spt_result_table]')
and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[spt_result_table]
GO
create table spt_result_table
(
tablename varchar(776) null, ----表名
rows varchar(776) null, ----表中现有的行数
reserved varchar(776) null, ----为表保留的空间总量
data varchar(776) null, ----表中的数据所使用的空间量
indexp varchar(776) null, ----表中的索引所使用的空间量
unused varchar(776) null ----表中未用的空间量
)ON [PRIMARY]
GO
----创建存储过程prc_database_spaceused:计算数据库大小及各个表占用空间的情况
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[prc_database_spaceused]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[prc_database_spaceused]
GO
create procedure prc_database_spaceused
as
BEGIN
declare @id int
declare @type character(2)
declare @pages int
declare @dbname sysname ----数据库名
declare @dbsize dec(15,0) ----数据库大小
declare @logsize dec(15)
declare @bytesperpage dec(15,0)
declare @pagesperMB dec(15,0)
declare @objname varchar(776) ----记录表名
declare @database_size varchar(776)
declare @unallocated_space varchar(776)
select @dbname = db_name() ----数据库为当前数据库
create table #spt_space
(
rows int null,
reserved dec(15) null, ----保留的空间总量
data dec(15) null, ----数据使用的空间总量
indexp dec(15) null, ----索引使用的空间
unused dec(15) null ----未用的空间量
)
---- 计算数据大小(以kB页为单位)
select @dbsize = sum(convert(dec(15),size))
from dbo.sysfiles
where (status & 64 = 0)
---- 计算日志大小(以kB页为单位)
select @logsize = sum(convert(dec(15),size))
from dbo.sysfiles
where (status & 64 <> 0)
---- 求得一个page有多少bytes
select @bytesperpage = low
from master.dbo.spt_values
where number = 1 and type = 'E'
---- 计算MB占多少page(MB = 1048576B)
select @pagesperMB = 1048576 / @bytesperpage
---- 计算数据库大小
set @database_size = ltrim(str((@dbsize + @logsize) / @pagesperMB,15,2) + ' MB')
---- 计算未用的空间量的大小
set @unallocated_space = ltrim(str((@dbsize -
(select sum(convert(dec(15),reserved))
from sysindexes
where indid in (0, 1, 255)
)) / @pagesperMB,15,2)+ ' MB')
---- 保留的空间总量
insert into #spt_space (reserved)
select sum(convert(dec(15),reserved))
from sysindexes
where indid in (0, 1, 255)
select @pages = sum(convert(dec(15),dpages))
from sysindexes
where indid < 2
select @pages = @pages + isnull(sum(convert(dec(15),used)), 0)
from sysindexes
where indid = 255
---- 数据使用的空间总量
update #spt_space
set data = @pages
---- 索引使用的空间
update #spt_space
set indexp = (select sum(convert(dec(15),used))
from sysindexes
where indid in (0, 1, 255))- data
---- 未用的空间量
update #spt_space
set unused = reserved - (select sum(convert(dec(15),used))
from sysindexes
where indid in (0, 1, 255))
---- 输出数据库大小信息
select
database_name = @dbname,
database_size = @database_size,
unallocated_space = @unallocated_space,
reserved = ltrim(str(reserved * d.low / 1024.,15,0) + ' ' + 'KB'),
data = ltrim(str(data * d.low / 1024.,15,0) + ' ' + 'KB'),
index_size = ltrim(str(indexp * d.low / 1024.,15,0) + ' ' + 'KB'),
unused = ltrim(str(unused * d.low / 1024.,15,0) + ' ' + 'KB')
from #spt_space, master.dbo.spt_values d
where d.number = 1
and d.type = 'E'
---- 清空临时表#spt_space
delete from #spt_space
-----定义游标,计算表大小信息
declare cur_table cursor for
select name
from sysobjects
where xtype = 'U' or xtype = 'S'
order by xtype asc
-----打开游标
open cur_table
fetch next from cur_table into @objname
while (@@fetch_status = 0)
begin
select @id = null
select @id = id,
@type = xtype
from sysobjects
where id = object_id(@objname)
--dbcc updateusage(0,@objname) with no_infomsgs
insert into #spt_space (reserved)
select sum(reserved)
from sysindexes
where indid in (0, 1, 255)
and id = @id
select @pages = sum(dpages)
from sysindexes
where indid < 2
and id = @id
select @pages = @pages + isnull(sum(used), 0)
from sysindexes
where indid = 255
and id = @id
update #spt_space
set data = @pages
update #spt_space
set indexp = (select sum(used)
from sysindexes
where indid in (0, 1, 255)
and id = @id) - data
update #spt_space
set unused = reserved - (select sum(used)
from sysindexes
where indid in (0, 1, 255)
and id = @id)
update #spt_space
set rows = i.rows
from sysindexes i
where i.indid < 2
and i.id = @id
insert into spt_result_table
select tablename = object_name(@id),
rows = convert(char(11), rows),
reserved = ltrim(str(reserved * d.low / 1024.,15,0) + ' ' + 'KB'),
data = ltrim(str(data * d.low / 1024.,15,0) + ' ' + 'KB'),
index_size = ltrim(str(indexp * d.low / 1024.,15,0) + ' ' + 'KB'),
unused = ltrim(str(unused * d.low / 1024.,15,0) + ' ' + 'KB')
from #spt_space, master.dbo.spt_values d
where d.number = 1
and d.type = 'E'
truncate table #spt_space
fetch next from cur_table into @objname
end
close cur_table
deallocate cur_table
select * from spt_result_table where tablename is not null;
drop table #spt_space
END
GO
exec prc_database_spaceused
---- 删除spt_result_table表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spt_result_table]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[spt_result_table]
GO
---- 删除存储过程prc_database_spaceused
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[prc_database_spaceused]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[prc_database_spaceused]
GO
http://blog.csdn.net/xiaoxu0123/archive/2010/12/23/6094755.aspx
分享到:
相关推荐
可以通过系统表来查询 SQL Server 数据库连接数。具体步骤如下: 1. 使用以下查询语句:`SELECT * FROM [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN (SELECT [DBID] FROM [Master].[dbo].[SYSDATABASES] WHERE ...
本文将根据给定的信息,详细阐述部分重要的SQL Server数据库优化方法,并对这些方法进行深入解读。 #### 1. 避免不必要的查询 - **概述**:避免执行那些实际上并不需要的查询操作,比如在编写存储过程或触发器时,...
在Java编程中,连接SQL Server数据库进行数据的增删改查是常见的操作。这涉及到Java的JDBC(Java Database Connectivity)技术,它提供了一种标准的API,使得Java程序能够与各种类型的数据库进行交互。本篇文章将...
在Java编程中,连接SQL Server数据库并执行查询是常见的任务,尤其当涉及到大量数据时,分页显示就显得尤为重要。本篇文章将详细讲解如何使用Java连接SQL Server数据库,执行查询语句以及实现分页显示。 首先,我们...
接下来,让我们详细探讨如何使用C/C++通过ODBC操作SQL Server数据库: 1. **安装ODBC驱动**:首先,确保已经安装了适用于SQL Server的ODBC驱动程序,例如Microsoft SQL Server Native Client或ODBC Driver 17 for ...
sqlserver的一句sql查看数据库中所有表的行数
本文将详细阐述SQL Server数据库的连接步骤,以及与之相关的JDBC(Java Database Connectivity)设置。 1. **SQL Server数据库连接步骤**: - **安装SQL Server**:首先,你需要在计算机上安装SQL Server。这通常...
C#操作SQL Server数据库 C#操作SQL Server数据库是指使用C#语言来访问和操作SQL Server数据库的所有操作。为了实现这种操作,ADO.NET提供了两个核心组件:.NET Data Provider和DataSet。 .NET Data Provider是专门...
总结来说,JDBC是Java连接SQL Server数据库的重要工具,通过一系列步骤,包括导入驱动、注册驱动、建立连接、执行SQL和处理结果,我们可以实现Java程序与SQL Server数据库的交互。对于不同版本的SQL Server,可能...
这个压缩包文件"java操作sqlserver 数据库实例.rar.rar"很可能是包含了一系列示例代码和教程,教你如何使用Java连接并执行SQL语句在SQL Server数据库上。以下是关于这个主题的一些关键知识点: 1. **JDBC(Java ...
总之,"易语言SQLserver数据库操作例程"是一个宝贵的资源,对于想在易语言环境中进行数据库编程的人来说,它提供了一个实用的学习平台,帮助你理解和实践数据库操作的核心概念。通过学习和模仿,你将能够独立地开发...
在SQL Server数据库管理中,优化是提升系统性能的关键步骤。以下是一些针对SQL Server数据库的优化策略,旨在提高数据处理速度、减少资源消耗并改善整体系统效率。 1. **I/O设备分离**:将数据、日志和索引分别放置...
在这个"jsp连接SQLserver数据库实现增删改查"的项目中,你将学习到如何结合JSP、JDBC和SQL Server来创建一个完整的Web应用。教程中的详细步骤会指导你完成每个操作,让你快速掌握数据库操作的核心技能。记住,实践是...
在SQL Server数据库中,定期删除数据是常见的维护任务,尤其对于存储大量历史数据的表而言。这个任务可以确保数据库的高效运行,减少存储空间的占用,并优化查询性能。以下将详细讲解如何在SQL Server中实现某表的...
SQL Server数据库驱动包是连接Microsoft SQL Server数据库的关键组件,它允许开发者通过编程语言与SQL Server进行数据交互。在Java环境中,这些驱动包通常以JAR(Java Archive)文件的形式存在,如msbase.jar、...
【SQL SERVER数据库批量更新程序】是一款专为SQL SERVER设计的工具,它允许用户高效地对多个数据库执行查询或更新操作。这款程序的核心功能是能够基于查询结果生成相应的SQL语句,方便用户进行批量处理,极大地提高...
总结来说,"jsp连Sql_server数据库模板"是一个帮助开发者快速实现JSP与SQL Server数据库连接的工具,它可能包含了JDBC驱动、连接配置、数据库操作的模板代码,以及必要的异常处理机制。掌握这些知识点对于开发基于...
SQL Server 数据库 SQL 练习及答案 本资源收录了使用 SQL Server 2012 数据库的练习题,从简单查询到子查询。下面是对标题、描述、标签和部分内容的详细解释和知识点总结: 标题:SQL Server 数据库 SQL 练习及...
在 SQL Server 中,COUNT 函数是一个非常重要的函数,它可以统计表中的行数。但是,当表中存在空值时,COUNT 函数的行为可能会和我们预期的不同。如果我们使用 COUNT(*) 函数,它将统计所有行,包括空值。但如果我们...