badpage 发表于 2008-06-26 15:29

请助:怎么取得sybase中每个数据库的设备文件路径和大小

1.命令字通过db_lib接口发送。

2.是以数据库名查询设备文件路径。(包括master.tempdb等。除系统数据库外。还包括所有自己建立的数据库)

3.要得到设备文件大小,最好也能得到各个数据库的大小。


想到一些思路:先查sysdatabase得所有数据库的名子和dbid

再查sysusages中vstart与sysdevices的low 相等关联查询。得设备路径。



好像sp_helpdb(数据库名)也可得设备名。再通过设备名查设备路径好像更简单吧,不知db_lib可不可以发送sp_helpdb类过程命令?


但初学数据库,不知怎么写简单。

请助:具体的的Sql查询语句。

数据库名,id,还有数据库总数,各个数据库的设备文件路径和设备文件个数还有设备文件大小这些数据是需要的。

[ 本帖最后由 badpage 于 2008-6-26 15:32 编辑 ]

hobbylu 发表于 2008-06-26 15:30

可以参考系统存储过程sp_helpdb来写

badpage 发表于 2008-06-26 15:32

原帖由 hobbylu 于 2008-6-26 15:30 发表 http://bbs.chinaunix.net/images/common/back.gif
可以参考系统存储过程sp_helpdb来写


sp_helpdb源码在哪可以找到?

badpage 发表于 2008-06-27 09:34

问题简化为怎么由dbid得设备路径?

问题简化为怎么由dbid得设备路径?
sp_helpdb在哪能看到?

badpage 发表于 2008-06-27 15:19

采用
select name from sydevices ,sysusages where dbid=2 and low=vstart
得tempdb的设备名(只存放tempdb的设备文件)。

请问
1 一个设备文件的low 是否总是与该数据库的vstart相等?当然只这个设备只存放一个数据库。

2.一个设备文件的low,high 的值 是否是固定的?在很多大设备文件的情形下low,high的值会不会不够而动态映射。low,high的值也范围是多少?

hobbylu 发表于 2008-06-27 15:42

low并不等同于vstart,因为一个设备可能会被多个数据库共用,比如master设备,上面有多个数据库,其中的vstart就会不同
一个设备的low和high是固定,一般low和high的值最大差额是16777216

badpage 发表于 2008-06-28 14:40

3Q hobbylu 问题已解决

"select a.name from \
                                (select distinct(name) from sysdevices,sysusages \
                                where cntrltype=0 and dbid =2 and low<=vstart and high>= vstart+size) as a \
                                where not exists \
                                (select b.name from \
                                (select distinct(name) from sysdevices,sysusages \
                                where cntrltype=0 and dbid !=2 and low<=vstart and high>= vstart+size) as b \
                                where a.name = b.name)"

[ 本帖最后由 badpage 于 2008-6-28 15:25 编辑 ]
页: [1]
查看完整版本: 请助:怎么取得sybase中每个数据库的设备文件路径和大小