테이블스페이스 사용량 조회 쿼리 값이 이상하게 나와서 질문드립니다. 0 3 5,789

by 아까걔 [SQL Query] join oracle [2016.06.15 19:21:07]


dba_data_files와 dba_free_space 를 join하여 테이블스페이스 전체용량과 여유공간을 동시에 얻으려고 합니다.

select tablespace_name, sum(byte/1024/1024)

from dba_data_files

group by tablespace_name

order by 1;

위처럼 dba_data_files만 쿼리를 해보면 값이

TABLESPACE_NAME                SUM(BYTES/1024/1024)
------------------------------ --------------------
EXAMPLE                                      346.25
SYSAUX                                          630
SYSTEM                                          750
UNDOTBS1                                         85
USERS                                             5

이렇게 나오구요. ( 원래는 이렇게 나와야 정상인 걸로 알고 있습니다.)

dba_free_space도 

SQL> select tablespace_name, sum(bytes/1024/1024)
  2  from dba_free_space
  3  group by tablespace_name
  4  order by 1;

TABLESPACE_NAME                SUM(BYTES/1024/1024)
------------------------------ --------------------
EXAMPLE                                     36.0625
SYSAUX                                       35.375
SYSTEM                                       1.0625
UNDOTBS1                                     71.625
USERS                                          .875

원래는 이 값이 나와야 할텐데 , 이 두 테이블을 제 생각대로 join해보니까 값이 이상하게 나옵니다.

select A.tablespace_name, sum(A.bytes/1024/1024) "bytesMB", sum(B.bytes/1024/1024) "freeMB", sum(round(B.bytes/A.bytes*100,2)) "(%)"
from dba_data_files A, dba_free_space B
where A.tablespace_name=B.tablespace_name(+)
group by A.tablespace_name, B.tablespace_name
order by 1;

이렇게 입력하였더니 값이 

TABLESPACE_NAME           bytesMB     freeMB        (%)
------------------------------ ---------- ---------- ----------
EXAMPLE                         1038.75    36.0625     10.41
SYSAUX                           1260       35.375        5.62
SYSTEM                           1500         1.0625        .14
UNDOTBS1                       1020       71.625       84.26
USERS                                  5          .875       17.5

 

dba_free_space에 있는 bytes 칼럼 값은 값이 맞게 나오는데, dba_data_files에 있는 bytes 칼럼의 값이 이상하게 나옵니다.

example은 3배, sysaux는 2배 등등 값이 배수 단위로 나오네요.

어디서 쿼리가 잘못된건가요?

 

by 타락천사 [2016.06.15 22:27:17]

각각 group by 하신 후에 조인 해보세요

[ 개별로 각각 조회 해보시면 이해가 가실듯... ] 

그래고 autoextend on 상태라며, bytes 가 아닌 maxbytes도 참고 하셔야 합니다.


by 아까걔 [2016.06.15 23:49:18]

group by는 한 쿼리에 한번밖에 못 쓰지 않나요? 어떻게 쿼리해야 하나요??


by 겸댕2후니 [2016.06.16 10:07:19]

-> 인라인뷰 사용


select A.tablespace_name, A.bytesMB bytesMB, B.freeMB freeMB
from
(select tablespace_name, sum(byte/1024/1024) bytesMB
from dba_data_files
group by tablespace_name) A,
(select tablespace_name, sum(bytes/1024/1024) freeMB
from dba_free_space
group by tablespace_name) B
where A.tablespace_name = B.tablespace_name(+)
order by 1;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입