ASE에서 disk init한 디바이스의 잔여용량을 확인하고 싶은데
어떻게 해야하는지 궁금합니다.
지금까지는 데이터베이스를 생성할때 디바이스를 포함시켜
데이터베이스가 생성된후 sp_helpdb dbname 으로 확인하는
무식한 방법을 쓰고 있는데요.
분명히 다른방법이 있을것 같은데... 조언 부탁드립니다.
제가 쓰고 있는 건데여...
use sybsystemprocsgo
drop proc sp_freedevicego
create proc sp_freedevice@devname char(30) = nullas
declare @showdev bit declare @alloc int
if @devname = null select @devname = "%" ,@showdev = 0 else select @showdev = 1
select @alloc = low from master.dbo.spt_values where type = "E" and number = 1
create table #freedev ( name char(30) ,size float ,used float )
insert #freedev select dev.name ,((dev.high - dev.low) * @alloc + 500000) / 1048576 ,sum((usg.size * @alloc + 500000) / 1048576) from master.dbo.sysdevices dev ,master.dbo.sysusages usg where dev.low <= usg.size + usg.vstart - 1 and dev.high >= usg.size + usg.vstart - 1 and dev.cntrltype = 0 group by dev.name
insert #freedev select name ,((sd.high - sd.low) * @alloc + 500000) / 1048576 ,0 from master.dbo.sysdevices sd where sd.cntrltype = 0 and not exists (select 1 from #freedev fd where fd.name = sd.name)
if @showdev = 1 begin select devname = dev.name ,size = convert(varchar(10),f.size) + " MB" ,used = convert(varchar(10),f.used) + " MB" ,free = convert(varchar(10),f.size - f.used) + " MB" from master.dbo.sysdevices dev ,#freedev f where dev.name = f.name and dev.name like @devname
select dbase = db.name ,size = convert(varchar(10), (usg.size * @alloc + 500000) / 1048576 ) + " MB" ,usage = vl.name from master.dbo.sysdatabases db ,master.dbo.sysusages usg ,master.dbo.sysdevices dev ,master.dbo.spt_values vl where db.dbid = usg.dbid and usg.segmap = vl.number and dev.low <= usg.size + usg.vstart - 1 and dev.high >= usg.size + usg.vstart - 1 and dev.status & 2 = 2 and vl.type = "S" and dev.name = @devname end else begin
select total = convert(varchar(10), sum(size)) + " MB" ,used = convert(varchar(10), sum(used)) + " MB" ,free = convert(varchar(10), sum(size) - sum(used)) + " MB" from #freedev
select devname = dev.name ,size = convert(varchar(10), f.size) + " MB" ,used = convert(varchar(10), f.used) + " MB" ,free = convert(varchar(10), f.size - f.used) + " MB" from master.dbo.sysdevices dev ,#freedev f where dev.name = f.name end
gogrant execute on sp_freedevice to publicgo
proc 생성한후에
1>sp_freedevice2> go
이렇게 실행하는것이 맞는지요?
그러면 아래와 같은 에러가 뜨네요.
(return status = 0)Arithmetic overflow occurred.
참고로 HPUX-11에 ASE 12.0을 사용중입니다.
제장비도 hpux에 12.0인데요...
잘됩니다.
EBF를 설치해보시기 바랍니다.
sp_freedevice를 실행하면
이런식으로 나옵니다
total used free ----- ---- ---- 410.0 MB 367.0 MB 43.0 MB
devname size used free ------- ---- ---- ---- audit_dev 20.0 MB 20.0 MB 0.0 MB audit_log 10.0 MB 10.0 MB 0.0 MB master 30.0 MB 12.0 MB 18.0 MB rds_dev 10.0 MB 10.0 MB 0.0 MB rds_dev2 100.0 MB 100.0 MB 0.0 MB
자꾸 질문드려서 죄송합니다.
EBF란것이 어떤 것을 의미하는지요?
Emergency byg fix로..sybase engine의 bug가 있을때
나오는 겁니다.
patch죠...sybase.com에서 down받아서 사용하실수 있습니다.