存档

文章标签 ‘sp_spaceused’,文章数:5

统计Sybase ASE数据库的数据段和日志段的剩余空间以及剩余率。以下SQL在ASE12.5.1及以上版本通过测试。   select convert(char(16),db_name(data_segment.dbid)) DBName ,str(round(total_data_pages / ((1024.0 * 1024) / @@maxpagesize),2),10,2) "Total Data(MB)" ,str(round(free_data_pages / ((1024.0 * 1024) / @@maxpagesize),2),10,2) "Free Data(MB)" ,str(round(total_log_pages / ((1024.0 * 1024) / @@maxpagesize),2),10,2) "Total Log(MB)" ,str(round(free_log_pages / ((1024.0 * 1024) / @@maxpagesize),2),10,2) "Free Log(MB)" ,str( round(100.0 * free_data_pages / total_data_pages ,2),10,2) "Free_Data%" ,str( round(100.0 * free_log_pages / [...]

在公司测试环境上执行sp_spaceused时报error:1151的错误。虽然这不是一个严重的错误,记得好像以前也出现过一次,故记录一下。

1> sp_spaceused
2> go
 database_name                                      
         database_size                                       
 ----------------------------------------------------
         ----------------------------------------------------
 ultranms                                           
         600.0 MB                                            

(1 row affected)
Msg 1151, Level 11, State 1:
Server 'ASE', Procedure 'sp_spaceused', Line 308:
Object 460577698 passed to OAM builtin function no longer exists in database 5.
Msg 1151, Level 11, State 1:
Server 'ASE', Procedure 'sp_spaceused', Line 308:
Object 460577698 passed to OAM builtin function no longer exists in database 5.
Msg 1151, Level 11, State 1:
Server 'ASE', Procedure 'sp_spaceused', Line 308:
Object 460577698 passed to OAM builtin function no longer exists in database 5.
Msg 1151, Level 11, State 1:
Server 'ASE', Procedure 'sp_spaceused', Line 308:
Object 460577698 passed to OAM builtin function no longer exists in database 5.

 reserved                         data                       
         index_size                               unused                      
 -------------------------------- ----------------------------
         ---------------------------------------- ----------------------------
 9020 KB                          1396 KB                    
         1064 KB                                  6560 KB                     
(return status = 0)
 

出现错误1151的原因是:执行sp_spaceused统计数据库的空间使用情况的时候,其它会话正在执行删除表的操作。

前面有篇文章中,介绍利用游标和sp_spaceused来查看数据库内所有表占用的空间,并倒序排序。 统计SQL SERVER数据库内所有表占用空间并排序   下面介绍另外一种方法:利用sp_MSforeachtable替代游标来实现上篇文章中的类似功能。   use ossdb go  ——–查看所有表空间使用情况 CREATE TABLE #T(  name  nvarchar(256),  rows  varchar(11),  reserved varchar(18),  data  varchar(18),  index_size varchar(18),  unused  varchar(18) ) EXEC sp_MSforeachtable "INSERT #T EXEC sp_spaceused '?'" SELECT   * FROM #T ORDER BY Convert(int,SubString(data,1,Len(data)-3)) DESC drop table #T go   测试通过,将ossdb改成用户数据库名字即可。

在ASE中统计某个用户表的信息,比如:表中的行数、分配的空间、数据所占空间、索引所占空间以及剩余空间等,我们可以使用系统存储过程sp_spaceused来实现。 系统存储过程sp_spaceused有两个参数:@objname和@list_indices,第一个@objname是待统计的对象名,一般 是表名;第二个@list_indices标志是否单独统计索引信息,@list_indices=1表示单独统计索引信 息,@list_indices=0则不单独统计。 示例: 1> sp_spaceused sysobjects,0 2> go  name       rowtotal reserved data   index_size unused  ———- ——– ——– —— ———- ——  sysobjects 1014     252 KB   132 KB 68 KB      52 KB (1 row affected) (return status = 0) 1> sp_spaceused sysobjects,1 2> go  index_name   size  reserved unused  ———— —– ——– ——  ncsysobjects 48 KB [...]

在csdn论坛上看到有人问,如何获取指定数据库所在磁盘的磁盘剩余空间。 http://topic.csdn.net/u/20100518/16/70cae8d3-a9de-4e45-9f49-fe8b00d8ba74.html?seed=1945596721&r=65529065#r_65529065 解决的思路是:通过sysfiles系统表找到数据库所属数据文件所在的物理路径,从数据文件的物理路径中提取所在磁盘盘符(第一个字母),最后用扩展存储过程xp_fixeddrives来获得磁盘驱动器的剩余空间(MB Bytes)。 SQL语句如下: declare @drivename char(1) select @drivename=left(filename,1) from sysfiles where fileid=  1 if not exists(select 1 from tempdb.dbo.sysobjects where name like '#FreeSpace%' and type='U')   create table #FreeSpace(     Drive char(1),     MB_Free int     ) else       truncate table #FreeSpace       insert into #FreeSpace exec xp_fixeddrives select MB_Free from #FreeSpace where [...]