본문 바로가기

oracle

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

1. tablespace 이름으로 관련 data file 찾기

SELECT file_name, tablespace_name, bytes FROM dba_data_files WHERE tablespace_name = '<tablespace name>'


2. tablespace 크기 늘리기

  (1) data file 추가(가장 많이 쓰는 방법)
ALTER TABLESPACE <tablespace name> ADD DATAFILE '<full path and file 
name>' SIZE <integer> <k|m>;


  (2) 기존의 data file 크기 변경
ALTER DATABASE DATAFILE '<full path and file name>' RESIZE <integer> <k|m>; 
예제) 20GB 로 늘림.    alter DATABASE datafile '/user01/oradata/hera/users01.dbf' resize 20000M 

  (3) datafiledml size를 자동으로 늘어나게 하는 명령
ALTER DATABASE DATAFILE ‘<full path and file name>’ AUTOEXTEND ON 
MAXSIZE UNLIMITED; 


남아 있는 디스크 용량을 먼저 확인해야 한다. 무턱대고 늘리면 용량을 오바할 수 있기 때문이다. 
한도 내에서 테이블 스페이스를 늘려야 하겠다.  
아래를 보면  user01 마운트에 63.18 GB 가 남아 있으니 이 한도내에서 늘려줘야 한다. 

#:]df -g
파일 시스템     GB 블록  사용가능  %사용    Iused %Iused 마운트 위치
/dev/hd4           5.00      4.57     9%    12019     2% /
/dev/hd2          10.00      3.15    69%    67594     9% /usr
/dev/hd9var        3.00      2.66    12%     7477     2% /var
/dev/hd3           3.00      2.00    34%      267     1% /tmp
/dev/hd1           3.00      3.00     1%       59     1% /home
/dev/hd11admin      0.25      0.25     1%        5     1% /admin
/proc                 -         -     -         -     -  /proc
/dev/hd10opt       3.00      2.28    25%    20329     4% /opt
/dev/livedump      0.25      0.25     1%        4     1% /var/livedump
/dev/fslv00       50.00      1.16    98%        8     1% /tsmdiskpool
/dev/tsmlv        24.00      4.46    82%        6     1% /tsmdb
/dev/lv_user01    200.00     63.18    69%   351218     3% /user01
/dev/oraclelv     20.00     12.45    38%    41317     2% /oracle
#:]





SELECT TO_CHAR(SYSDATE,'YYYYMMDD') , t.tn, t.sizes Tot, (t.sizes-f.sizes) Used, ROUND((t.sizes-f.sizes)/t.sizes*100,2) UsePct,
NVL(TO_NUMBER(f.sizes),0) Free, 100-ROUND((t.sizes-f.sizes)/t.sizes*100,2) FreePct
FROM (SELECT tablespace_name tn, SUM(bytes)/1024/1024 Sizes
FROM dba_data_files
GROUP BY tablespace_name) t, 
(SELECT tablespace_name tn, SUM(bytes)/1024/1024 Sizes
FROM SYS.dba_free_space 
GROUP BY tablespace_name) f
WHERE t.tn = f.tn(+)
ORDER BY t.tn;

select owner,segment_name,segment_type,sum(bytes)/1024/1024 as MB
from dba_segments
where owner='test'
GROUP BY owner,segment_name,segment_type;

select * from dba_tablespaces;

select table_name,tablespace_name from dba_tables where owner = 'test';      --해당 테이블이 어떤 tablespace를 사용하는지 보여줌;

select * from dba_data_files;                                                                  --해당 파일과 tablespace를 보여줌.

alter database datafile '/oracle/app/oracle/oradata/orcl/test.dbf' resize 20000M;  -- 해당 파일의 tablespace를 늘려줌.



주의 사항 

현상 : ORA-01237 cannot extend datafile %s 
원인 : O/S 레벨에서는 file size를 1TB 이상 지원한다고 하는데, oracle datafile을 2G 이상으로 resize하려고 한다거나 tablespace에 datafile을 추가하거나 생성할 때, 2G 이상 주면 file size limit에 걸리는 현상 발생 
조치 : 화일 시스템에서 large file을 사용하기 위해서는 화일 시스템을 'largefiles' option으로 mount해야 한다.