免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7336 | 回复: 15

怎么查看设备文件上还有多少空间没有被分配出去 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:54:45
发表于 2011-08-24 11:10 |显示全部楼层
1、怎么查看设备文件上还有多少空间没有被分配出去
2、怎么查看设备文件上有哪几个库并分别分配了多少空间
其实查看这些信息用ASE 15的central图像管理工具很容易就看出来了,但连接数据库时都用SQL Advantage管理,而且很少有机器安装ASE 15的central软件,所有想知道用命令怎么查看和图像界面一样的信息
Windows-2011-08-24-10-44-37.png
设备文件大小及未分配出去的(未使用)大小

Windows-2011-08-24-10-45-21.png
设备文件上有哪几个库及分别分配了多少空间

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2011-08-24 13:11 |显示全部楼层
sp_helpdevice devname
go

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:54:45
发表于 2011-08-24 18:42 |显示全部楼层
那有那么简单呀,sp_helpdevice devname只能看看设备路径、大小等信息。多少空间没有被分配出去和分配给那个库了根本看不出来

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2011-08-25 08:23 |显示全部楼层
你可以使用isql命令中执行sp_helpdevice进行查看。
ASE12.5.x版本中不会显示设备剩余空间,ASE15.x中会显示。

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2011-08-25 08:50 |显示全部楼层
你不是再用ase15的嘛。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:54:45
发表于 2011-08-25 10:42 |显示全部楼层
你可以使用isql命令中执行sp_helpdevice进行查看。
ASE12.5.x版本中不会显示设备剩余空间,ASE15.x中会显示 ...
andkylee 发表于 2011-08-25 08:23


sp_helpdevice这命令用了有上万遍了,能输出什么不用想也知道,只能看看设备路径、大小等信息。多少空间没有被分配出去和分配给那个库了根本看不出来
数据库都用的12.5,只是偶然装个15的客户端(觉得比12多了些功能)
觉得我提的问题已经很清楚了,连图片都加上了,图片是用15的客户机连接12.5的数据库显示的信息,就是想知道用isql命令行怎么得到图片中想要的结果

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2011-08-25 11:17 |显示全部楼层
本帖最后由 Eisen 于 2011-08-25 11:20 编辑

好牛的提问啊……
怎么看都觉得好像我们这里谁欠了楼主一堆钱啊。

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2011-08-25 12:05 |显示全部楼层
本帖最后由 andkylee 于 2011-08-26 13:58 编辑

回复 6# yiguihuo


    楼主的问题很清楚、明白。 在平常运维中,我也遇到和楼主一样的问题。执行:sp_helpdevice 设备名 的时候不能查看到设备剩余空间以及具体分配给了哪些数据库。
通过查看ase12.5.4中过程sp_helpdevice的语法,发现:ase15之前的所有版本都不支持上述功能,只有ase15版本后才会显示剩余空间以及分配信息。

既然楼主都使用sp_helpdevice上万遍了,且楼主发现sybase central等图形工具支持该功能,那楼主为什么不去研究一下这些工具是怎么实现的呢?

很早之前就想写一个能查询设备剩余空间的存储工程,现在恰好楼主问这个问题。就写了一个能够查看设备总空间以及剩余空间,还有设备上具体分配信息的存储过程sp_helpdevice2
我参考了ASE12.5.4和ASE15.0.3中的sp_helpdevice的语法完成该过程sp_helpdevice2的编写。分别在ASE v11.0.1, ASE v11.5.1, ASE v11.9.2, ASE v12.5, v12.5.0.3, v12.5.4 平台上进行了测试。


/*
* 此存储过程在ASE v11.0.1, ASE v11.5.1, ASE v11.9.2, ASE v12.5, v12.5.0.3, v12.5.4 平台测试通过!适用于 ASE v11.x, v12.x,不能用于ASE15。实际上ASE15.x中的sp_helpdevice完全能够实现该功能!
* ASE v11.x版本中系统表 sysusages中没有crdate这个表示设备段分配时间的字段,考虑到支持ASEv11.x为了简单处理,没有在Allocation information 中列出设备段的具体分配时间!
*/
use sybsystemprocs
go

if exists(select 1 from dbo.sysobjects where type='P' and name='sp_helpdevice2')
  drop procedure sp_helpdevice2
go

create procedure sp_helpdevice2
@devname varchar(30) = "%"
as

declare @numpgsmb float
declare @numpgsmb2 float
declare @Major_Version int

set nocount on
select @numpgsmb = (1048576. / @@pagesize)
select @numpgsmb2 = (1048576. / @@maxpagesize)
--select @version_as_num = @@version_as_integer
select @Major_Version= convert(int, right(substring(@@version,1,charindex('.',@@version)-1),2) )

if @Major_Version >= 15 or @Major_Version < 11
begin
        print "this procedure is available for ASE versions from v11.x to v12.5.x, not for ASE15.x!"
        return (1)
end

/*  See if the device exists.*/
if not exists (select *
                        from master.dbo.sysdevices
                                where name like @devname)
begin
        /* 17610, "No such i/o device exists." */
        raiserror 17610
        return (1)
end

/* total size of device */
select d.name,
    totalsizeMB = (1. + (d.high - d.low)) / @numpgsmb
  into #totalsize
        from master.dbo.sysdevices d
                where d.status & 2 = 2
                        and name like @devname
                group by d.name

/* Calculate used size in MB */
select d.name,
    usedsizeMB = isnull(sum(u.size) / @numpgsmb2,0)
  into #usedsize                 
        from master.dbo.sysdevices d, master.dbo.sysusages u
                where u.vstart >= d.low and u.vstart <= d.high                           
                        and d.status & 2 = 2
                        and d.name like @devname
                group by d.name
union
select d.name, 0.
from master.dbo.sysdevices d
  where not exists ( select 1 from master.dbo.sysusages u where u.vstart >= d.low and u.vstart <= d.high )
      and d.status & 2 = 2
      and d.name like @devname

set nocount off
/* Calculate the free size of device */
select d.name ,TotalSize = str(#totalsize.totalsizeMB,10,2), UsedSize = str(#usedsize.usedsizeMB,10,2),FreeSize = str(#totalsize.totalsizeMB - #usedsize.usedsizeMB,10,2),phyname = convert(varchar(50),d.phyname)
  from master.dbo.sysdevices d, #totalsize, #usedsize
  where        d.name = #totalsize.name
    and #totalsize.name = #usedsize.name
  order by low,high


if (select count(*) from master.dbo.sysdevices where name like @devname) = 1
begin
        print ""
        print "========================== Allocate Information =========================="
        /*if @Major_Version = 12
                select dbname = db_name(dbid), "size(MB)"=str(size/@numpgsmb2,10,2), allocated = u.crdate, vstart, lstart
                  from master.dbo.sysusages u, master.dbo.sysdevices d
                    where d.status & 2 = 2
                      and d.name like @devname
                      and (u.vstart >= d.low and u.vstart <= d.high )
                   order by dbname,vstart
         else if @Major_Version = 11
         */
                select dbname = db_name(dbid), "size(MB)"=str(size/@numpgsmb2,10,2), vstart, lstart
                  from master.dbo.sysusages u, master.dbo.sysdevices d
                    where d.status & 2 = 2
                      and d.name like @devname
                      and (u.vstart >= d.low and u.vstart <= d.high )
                   order by dbname,vstart

end

drop table #totalsize
drop table #usedsize
go

/* grant the execute privilege to public */
grant execute on sp_helpdevice2 to public
go

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2011-08-25 14:17 |显示全部楼层
回复  yiguihuo


    楼主的问题很清楚、明白。 在平常运维中,我也遇到和楼主一样的问题。执行:sp_h ...

  1. /*
  2. * 此存储过程在ASE v11.0.1, ASE v11.5.1, ASE v11.9.2, ASE v12.5, v12.5.0.3, v12.5.4 平台测试通过!适用于 ASE v11.x, v12.x,不能用于ASE15。实际上ASE15.x中的sp_helpdevice完全能够实现该功能!
  3. * ASE v11.x版本中系统表 sysusages中没有crdate这个表示设备段分配时间的字段,考虑到支持ASEv11.x为了简单处理,没有在Allocation information 中列出设备段的具体分配时间!
  4. */
  5. use sybsystemprocs
  6. go

  7. if exists(select 1 from dbo.sysobjects where type='P' and name='sp_helpdevice2')
  8.   drop procedure sp_helpdevice2
  9. go

  10. create procedure sp_helpdevice2
  11. @devname varchar(30) = "%"
  12. as

  13. declare @numpgsmb float
  14. declare @Major_Version int

  15. set nocount on
  16. select @numpgsmb = (1048576. / @@pagesize)
  17. --select @version_as_num = @@version_as_integer
  18. select @Major_Version= convert(int, right(substring(@@version,1,charindex('.',@@version)-1),2) )
复制代码
andkylee 发表于 2011-08-25 12:05



    哈。佩服andkylee...
这样无影脚踢的……

论坛徽章:
33
ChinaUnix元老
日期:2018-07-04 15:10:362015年亚洲杯之阿联酋
日期:2015-02-06 17:15:532015亚冠之武里南联
日期:2015-06-06 15:40:252015亚冠之北京国安
日期:2015-06-17 15:42:412022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:322015亚冠之阿尔纳斯尔
日期:2015-09-20 09:42:1215-16赛季CBA联赛之北京
日期:2016-01-15 10:03:5915-16赛季CBA联赛之青岛
日期:2016-04-26 16:44:4915-16赛季CBA联赛之广夏
日期:2018-07-04 15:33:21C
日期:2016-10-25 16:12:142017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之同曦
日期:2017-02-22 22:41:10
发表于 2011-08-25 14:20 |显示全部楼层
Eisen今天郁闷了。呵呵

不过说实话,楼主没有说清楚用的是ASE15的客户端连的是12.5的库。这个不怪Eisen了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP