- 论坛徽章:
- 0
|
遇见过这样的情况:
sybsystemprocs库损坏,系统存储过程无法使用,当时需要计算数据库大小sp_helpdb已不能使用。
查看master库sysusages表来计算数据库大小
dbid segmap lstart size vstart pad unreservedpgs
crdate
------ ----------- ----------- ----------- ----------- ------ -------------
--------------------------
1 7 0 3072 4 NULL 821
Oct 17 2007 10:29AM
1 7 3072 145408 6660 NULL 144817
Oct 17 2007 10:29AM
2 7 0 1536 4100 NULL 925
Oct 17 2007 10:29AM
3 7 0 1024 3076 NULL 415
Oct 17 2007 10:29AM
31513 7 0 1024 5636 NULL 367
Oct 17 2007 10:29AM
31514 7 0 102400 16777216 NULL 72907
Oct 17 2007 10:29AM
sp_helpdb:
name db_size owner dbid
created
status
------------------------ ------------- ------------------------ ------
------------------
------------------------------------------------------------------------------------------------------
master 290.0 MB sa 1
Oct 17, 2007
mixed log and data
model 2.0 MB sa 3
Oct 17, 2007
mixed log and data
sybsystemdb 2.0 MB sa 31513
Oct 17, 2007
mixed log and data
sybsystemprocs 200.0 MB sa 31514
Oct 17, 2007
trunc log on chkpt, mixed log and data
tempdb 3.0 MB sa 2
Mar 11, 2009
select into/bulkcopy/pllsort, trunc log on chkpt, mixed log and data
但是在这个表中的值必须乘2才是真正数据库的大小(恢复数据库的操作是老大做的,他给我说需要乘2),回来自己研究sp_helpdb存储过程也没看出来需要乘已2呀。小弟是新手对sp_helpdb 的存储过程看的不是很懂还请各位大哥给指点一下。
和db_size 有关也。
u.size参数:
还是从sysusages取出写到spbusages临时表了也没有乘2呀
select u.dbid, u.segmap, u.lstart, u.size, u.vstart, u.unreservedpgs, u.crdate
into #spdbusages
from #spdbdesc, master.dbo.sysusages u
where #spdbdesc.dbid = u.dbid
@numpgsmb 参数:
declare @numpgsmb float
select @numpgsmb = (1048576. / v.low)
from master.dbo.spt_values v
where v.number = 1
and v.type = "E"
db_size计算:
if (@len1 > 24 or @len2 > 24)
select distinct name = d.name,
db_size = str(sum(u.size) / @numpgsmb, 10, 1)
+ " MB",
owner = l.name,
dbid = d.dbid,
created = convert(char(14), d.crdate, 107),
status = #spdbdesc.dbdesc
from master.dbo.sysdatabases d, master.dbo.syslogins l,
#spdbusages u, #spdbdesc
where d.dbid = #spdbdesc.dbid
and d.suid = l.suid
and #spdbdesc.dbid = u.dbid
group by #spdbdesc.dbid
having d.dbid = #spdbdesc.dbid
and d.suid = l.suid
and #spdbdesc.dbid = u.dbid
order by d.name
else
select distinct name = convert(char(24), d.name),
db_size = str(sum(u.size) / @numpgsmb, 10, 1)
+ " MB",
owner = convert(char(24), l.name),
dbid = d.dbid,
created = convert(char(14), d.crdate, 107),
status = #spdbdesc.dbdesc
from master.dbo.sysdatabases d, master.dbo.syslogins l,
#spdbusages u, #spdbdesc
where d.dbid = #spdbdesc.dbid
and d.suid = l.suid
and #spdbdesc.dbid = u.dbid
group by #spdbdesc.dbid
having d.dbid = #spdbdesc.dbid
and d.suid = l.suid
and #spdbdesc.dbid = u.dbid
order by d.nam
还请高手给指点一下。谢谢了
[ 本帖最后由 coco_andy 于 2009-3-9 00:18 编辑 ] |
|