database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
ㆍSybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Sybase Q&A 839 게시물 읽기
No. 839
disk init 한 디바이스의 잔여용량 확인 할수 있나요?
작성자
뽀뽄
작성일
2004-01-16 13:56ⓒ
2004-01-16 13:57ⓜ
조회수
4,459

ASE에서 disk init한 디바이스의 잔여용량을 확인하고 싶은데

어떻게 해야하는지 궁금합니다.

 

지금까지는 데이터베이스를 생성할때 디바이스를 포함시켜

데이터베이스가 생성된후 sp_helpdb dbname 으로 확인하는

무식한 방법을 쓰고 있는데요.

 

분명히 다른방법이 있을것 같은데... 조언 부탁드립니다.

이 글에 대한 댓글이 총 5건 있습니다.

제가 쓰고 있는 건데여...

 

use sybsystemprocs
go

drop proc sp_freedevice
go

create proc sp_freedevice
@devname char(30) = null
as

  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

go
grant execute on sp_freedevice to public
go

 

 

지연님이 2004-01-16 17:47에 작성한 댓글입니다. Edit

proc 생성한후에

1>sp_freedevice
2> go

이렇게 실행하는것이 맞는지요?

그러면 아래와 같은 에러가 뜨네요.

 

(return status = 0)
Arithmetic overflow occurred.

참고로 HPUX-11에 ASE 12.0을 사용중입니다.

뽀뽄님이 2004-01-16 18:17에 작성한 댓글입니다. Edit

제장비도 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       

지연님이 2004-01-16 18:27에 작성한 댓글입니다.
이 댓글은 2004-01-16 18:29에 마지막으로 수정되었습니다. Edit

자꾸 질문드려서 죄송합니다.

EBF란것이 어떤 것을 의미하는지요?

 

뽀뽄님이 2004-01-19 14:02에 작성한 댓글입니다. Edit

Emergency byg fix로..sybase engine의 bug가 있을때

나오는 겁니다.

 

patch죠...sybase.com에서 down받아서 사용하실수 있습니다.

지연님이 2004-01-19 17:46에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
842view table 생성시 union결합은 안되나요? [1]
김민영
2004-01-28
3750
841Sybase ASIQ 버전의 백업
화니저아
2004-01-27
3740
840사이베이스..처음 해봅니다..난감한게 한두가지가 아닌데..좀 알려주세용..
최대규
2004-01-19
3338
839disk init 한 디바이스의 잔여용량 확인 할수 있나요? [5]
뽀뽄
2004-01-16
4459
838일본어 data 검색시 장음 처리 문제
류자현
2004-01-14
3115
837SyBase 관련 책 정보 [1]
란마루
2004-01-13
5253
836질문입니당. [5]
인현왕후
2004-01-13
3141
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다