테이블스페이스의 이동후 데이터파일을 용량관련 0 3 1,872

by 불끈 [Oracle Admin] 테이블스페이스 데이터파일 [2014.09.23 14:14:35]


테이블스페이스 ts_a 에는 있던 테이블을 ts_b 라는 테이블스페이스로 이동하였습니다.
ALTER TABLE [TABLE_NAME] MOVE TABLESPACE [NEW_TABLESPACE_NAME]; 명령을 사용하였습니다.
이동후에는 ts_a의 데이터 파일의 용량은 줄어들고 ts_b의 용량은 늘어날 것으로 생각했는데요,
실제 이동 후에 ts_a의 용량은 줄어들지 않더군요.

SELECT A.TABLESPACE_NAME, A.FILE_ID, A.FILE_NAME, 
       ROUND(A.BYTES/1024/1024,2) AS "Size(MB)",
       ROUND(B.FREE_BYTES/1024/1024,2) AS "Free(MB)"
  FROM DBA_DATA_FILES A,
       (
        SELECT FILE_ID, SUM(BYTES) AS FREE_BYTES, MAX(BYTES) AS MAX_FREE
          FROM DBA_FREE_SPACE
        GROUP BY FILE_ID 
       ) B
 WHERE A.FILE_ID = B.FILE_ID(+)

로 조회하면 Size는 이동 전과 동일하고 Free 만 늘어나더군요.
ts_a 의 데이터파일의 Size를 Free만큼 줄이는 방법이 없을까요?

답변부탁드릴게요~!

by DJ [2014.09.24 09:37:06]

불끈님께서 말하시는 size 는 OS 상에서 할당된 size 라서 tablespace (temp tablespace예외) 를 다시 만드는 방법외에는 딱히 줄일 수 있는 방법이 없습니다.

진행하신 것 처럼 해당 tablespace 의 table들을 모두 옮기시고, tablespace drop 하시고 재생성하셔야 될 것 같군요.

아래 내용 한번 참조해 보시고요.

http://www.oracle-base.com/articles/misc/reclaiming-unused-space.php#tablespaces_with_multiple_datafiles


by 비니 [2014.09.24 11:41:57]

TBS의 경우 사이즈를 임의로 늘리거나 줄일수는 있습니다. 

alter database 의 명령으로 tbs 파일의 실제 사이즈를 조절이 가능하긴 합니다. 

허나 

실제 tbs의 파일 사이즈를  사용공간만큼만 남기고 프리사이즈를 빼서 줄이는 것은 거의 불가능 할거에요. 

저장된 데이터의 경우  최소단위인 block 에서 부터 extent , segment단위로 저장이 되는데 

데이터가 단편화 되어 있을수도 있고, 여러가지 변수가 있기 때문입니다. 

TBS데이터 파일 사이즈를 늘리는건 간단하지만 줄이는건 뜻하시는 용량만큼 줄지 않을 경우도 있습니다. 

 


by 김치찌게 [2014.09.25 12:11:52]

HWM 확인하시고 HWM 보다 크게 resize 하시는 건 가능합니다.  

SELECT A.TABLESPACE_NAME, A.FILE_ID, A.FILE_NAME,

       ROUND(A.BYTES/1024/1024,2) AS "Size(MB)",
       ROUND(B.FREE_BYTES/1024/1024,2) AS "Free(MB)",
       (select max(block_id) from dba_extents b where a.file_id  = b.file_id)*(select value from v$parameter where name='db_block_size')/1024/1024 hwm
  FROM DBA_DATA_FILES A,
       (
        SELECT FILE_ID, SUM(BYTES) AS FREE_BYTES, MAX(BYTES) AS MAX_FREE
          FROM DBA_FREE_SPACE
        GROUP BY FILE_ID 
       ) B
 WHERE A.FILE_ID = B.FILE_ID(+)
/

 

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