파티션 테이블 move - patisyeon teibeul move

tablespace 사용에 있어서 관리 가 중요한데... tablespace 용량은 부족하나

더 이상 비용 및 table 사용문제로 추가가 불가능 할시... 다른 데이블 스페이스로

move 시키는 작업 을 수행합니다....

우선 tablespace 용량을 확인 DBA_FREE_SPACE 와  DBA_SEGMENTS 를 이용해 보았습니다...

sql>

WITH A AS(
SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024 FREE_SPACE,NULL USE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME
UNION ALL
SELECT TABLESPACE_NAME,NULL,SUM(BYTES)/1024/1024 USE_SPACE
FROM DBA_SEGMENTS
GROUP BY TABLESPACE_NAME)
SELECT TABLESPACE_NAME,
    SUM(FREE_SPACE) FREE_SPACE,
    SUM(USE_SPACE) USE_SPACE,
    ROUND((SUM(FREE_SPACE)/(SUM(FREE_SPACE)+SUM(USE_SPACE)))*100,3) FREERATE
FROM A
GROUP BY TABLESPACE_NAME
ORDER BY FREERATE ;

TABLESPACE_NAME FREE_SPACE USE_SPACE FREERATE
--------------- ---------- --------- --------
SHIN_DATA_01  10406  13959 6.937
SHIN_DATA_02  9415  93930 9.11
SHIN_DATA_03  9315  46410 16.716
SHIN_DATA_04  6700  27975 19.322

SHIN_DATA_05  8190    2831  74.322

SHIN_DATA_01  TABLESPACE는 약 7% 정도 밖에 남지 않았네요...

SHIN_DATA_01  에 어떤 table이 있는지 사용량이 많은지를 확인해 보고

sql>

SELECT OWNER,SEGMENT_NAME,SEGMENT_TYPE,
    SUM(BYTES)/1024/1024 BYTES
FROM DBA_SEGMENTS
WHERE TABLESPACE_NAME='SHIN_DATA_01'
GROUP BY OWNER,SEGMENT_NAME,SEGMENT_TYPE
ORDER BY 4 DESC;

OWNER SEGMENT_NAME SEGMENT_TYPE BYTES
----- ------------ ------------ -----
TEST_USER SHIN    TABLE PARTITION        33202
TEST_USER YUN      TABLE SUBPARTITION  30507
TEST_USER CHUL    TABLE PARTITION        1090

BYTE 용량으로 볼때는 다른tablespace 에는  어림도 없겠고.... 'chul' table을  'SHIN_DATA_05 ' tablespace로 move 시키는게 좋겠네요...

sql>

SELECT OWNER,SEGMENT_NAME,PARTITION_NAME,
    SUM(BYTES)/1024/1024 BYTES
FROM DBA_SEGMENTS
WHERE TABLESPACE_NAME='SHIN_DATA_01'
AND SEGMENT_NAME='CHUL'
GROUP BY OWNER,SEGMENT_NAME,PARTITION_NAME
ORDER BY 4 DESC
;

OWNER SEGMENT_NAME PARTITION_NAME BYTES
----- ------------ -------------- -----
TEST_USER  CHUL P_200909 365
TEST_USER  CHUL P_200907 305
TEST_USER  CHUL P_200908 297
TEST_USER  CHUL P_200910 163

이런 결과 로 나오네요

자 작업 move 작업 을 시작하면

ALTER TABLE CHUL  MOVE PARTITION P_200907 TABLESPACE SHIN_DATA_05;
ALTER TABLE CHUL  MOVE PARTITION P_200908 TABLESPACE SHIN_DATA_05;
ALTER TABLE CHUL  MOVE PARTITION P_200909 TABLESPACE SHIN_DATA_05;
ALTER TABLE CHUL  MOVE PARTITION P_200910 TABLESPACE SHIN_DATA_05;

ALTER INDEX CHUL_PK REBUILD PARTITION P_200907 TABLESPACE SHIN_DATA_05;
ALTER INDEX CHUL_PK REBUILD PARTITION P_200908 TABLESPACE SHIN_DATA_05;
ALTER INDEX CHUL_PK REBUILD PARTITION P_200909 TABLESPACE SHIN_DATA_05;
ALTER INDEX CHUL_PK REBUILD PARTITION P_200910 TABLESPACE SHIN_DATA_05;

tablespace move 시키는 작업은 index를 물고 있는 table일때에는 index를 Rebuild시켜야 하는데... Local index라

가정한 상태의 작업입니다... 물론 partition일때는 대부분 Local index이겠지만... 업무적 특성상이나..다른이유에서의

Global index 구성시에도 같이 Rebuild 해 주어야 합니다...

또한  실제 tablespace는 index와 table을 따로 구분하여 관리하는게 좋지만 예를 들어 위와 같이 작업 하였습니다...

어렵지 않지만 대부분 개발 엔지니어들이 권한 문제등으로 잘 사용해 보지 못한다기에 예를 들어 설명해 보았습니다^^