개발/Database

오라클 DB 테이블스페이스 용량 늘리기

서도롱 2018. 8. 2. 16:21

휴가철을 맞아 팔자에도 없는 DBA 노릇을 갑자기 하느라 쩜 마니 당황했다ㅎ.....

한번 해보면 별거 아닌데 한번도 안 해봐서 진짜 쌩난리를 치면서 했다. 담부터는 그러지 말자ㅠ




1. 테이블스페이스의 이름 확인


  SELECT TABLESPACE_NAME, DATAFILE_COUNT, BLOCK_SIZE

   FROM DBA_TABLESPACES

  ;



2. 데이터 파일의 이름 확인

  1에서 확인한 테이블스페이스의 이름을 가지고 아래 쿼리를 실행

   FILE_NAME 컬럼의 값이 바로 데이터 파일의 이름임


  SELECT FILE_NAME, FILE_ID, TABLESPACE_NAME, STATUS

   FROM DBA_DATA_FILES

 WHERE TABLESPACE_NAME = '<테이블스페이스 이름>'

 ;



3. 테이블스페이스의 용량을 늘려주기 

 -> 무려 3가지 옵션이 있다! 

     2에서 얻은 데이터 파일 네임을 쓰면 ㅇㅋ


3-1. 데이터 파일의 크기를 바꿔줌


 ALTER DATABASE DATAFILE '<데이터 파일 이름>' RESIZE <원하는 크기>;



3-2. 데이터 파일의 크기가 자동으로 늘어나도록 옵션 걸어줌


--데이터 파일에 선언한 사이즈를 추가

 ALTER DATABASE DATAFILE '<데이터 파일 이름>' AUTOEXTEND ON NEXT '<사이즈>'


--데이터 파일의 사이즈를 선언한 사이즈로 변경

 ALTER DATABASE DATAFILE '<데이터 파일 이름>' AUTOEXTEND ON MAXSIZE '<사이즈>';



3-3. 데이터 파일을 추가함


 ALTER TABLESAPCE '<테이블스페이스명>' ADD DATAFILE '<데이터 파일 이름>' SIZE '<사이즈>';




* 참고 : 테이블스페이스의 총 용량, 사용 중인 용량 및 남은 용량 확인 쿼리


 SELECT  A.TABLESPACE_NAME, A.FILE_ID,

    ROUND(A.BYTES/1024/1024/1024, 2)||'G' USABLE,

      ROUND( B.BYTES/1024/1024/1024,2)||'G' FREE,

            TRUNC(100-(B.BYTES/A.BYTES*100),2)||'%' USED_RATE,

    TRUNC(B.BYTES/A.BYTES*100,2)||'%' FREE_RATE

  FROM  ( SELECT TABLESPACE_NAME, FILE_ID, SUM(BYTES) BYTES

FROM DBA_DATA_FILES

      GROUP BY TABLESPACE_NAME, FILE_ID ) A,

     ( SELECT TABLESPACE_NAME, FILE_ID, SUM(BYTES) BYTES

FROM DBA_FREE_SPACE

      GROUP BY TABLESPACE_NAME, FILE_ID ) B

 WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME

    AND A.FILE_ID = B.FILE_ID(+)

ORDER BY USED_RATE DESC;