http://cspark.egloos.com/2132931 에서 퍼옴..

오라클9i 기준이다.
datafile인 dbf파일이 해당용량을 넘어 버려서 새그멘트가 확장할수 없는 수준까지 도달해버렸다. -_-
(AUTOEXTEND  OFF 모드) ..dbf파일의 용량을 다시 조정하자..

- dbf파일은 /oradata/test.dbf  이라 가정.
우선 오라클어드민으로 접근후 500M로 사이즈를 조정하자
   SQL> alter database datafile '/oradata/test.dbf'  resize 500M;    
   Database altered.

위의 경우는 파일시스템이 넉넉할때 할수있다.. 넉넉하지 않다면 다른 dbf파일중에 쓸데없이 용량만 먹는녀석은 줄이고 정작 필요한 녀석은 몸집을 키워주자.

1) 우선 현재 DB의 블럭사이즈를 확인하자.
                SQL > show parameter db_block_size;

                VALUE 값이 현재 DB의 블럭사이즈 되시겟다.

  2) 쓸모 없는 dbf파일의 실제 사용량과 전체사이즈를 구해보자. ( TableSpace가 'temp' 라 가정)
   SQL> SELECT file_name, BYTES AS "FULL_SIZE",
                        (SELECT (MAX (block_id) * 8192 + MAX (blocks * 8192))
                            FROM dba_extents 
                          WHERE file_id = a.file_id) AS "use_size"
               FROM dba_data_files a
             WHERE tablespace_name = 'temp'

  -  8192 수치는 위에서 구한 DB 블럭사이즈이다.  결과는 아래와 같다.
      FILE_NAME                  FULL_SIZE     USE_SIZE      
     /oradata/temp.dbf          419430400        229457920       
   
  3) temp.dbf가 사용하고 있는 용량은 229MB정도인데 실제 기본값으로 잡아준 값이 419MB이므로 약 190메가 가량의 용량이 낭비되고 있다는걸 확인할수 있다.
    낭비되는 용량은 줄이고 새로 추가될 DBF파일의 용량을 늘려주도록하자.

-----------------------------------------------------------------
추가로
DB tablespace 별 용량 확인 sql

select substr(a.tablespace_name,1,30) tablespace,
round(sum(a.total1)/1024/1024,1) "TotalMB",
round(sum(a.total1)/1024/1024,1)-round(sum(a.sum1)/1024/1024,1) "USEDMB",
round(sum(a.sum1)/1024/1024,1) "FreeMB",
round((round(sum(a.total1)/1024/1024,1)-round(sum(a.sum1)/1024/1024,1))/round(sum(a.total1)/1024/1024,1)*100,2) "USED%"
from
(select tablespace_name,0 total1,sum(bytes) sum1,max(bytes) MAXB,count(bytes) cnt
from dba_free_space
group by tablespace_name
union
select tablespace_name,sum(bytes) total1,0,0,0
from dba_data_files
group by tablespace_name) a
group by a.tablespace_name
order by tablespace;
Posted by 배터리