2014년 1월 3일 금요일

Oracle Tablespace 변경방법

테이블스페이스를 변경하는 방법을 정리한다.



/* 
 * 1. 테이블의 TABLESPACE변경 방법은 다음과 같다.
 * ALTER TABLE 테이블명 MOVE TABLESPACE 테이블스페이스명;
 *
 */

SELECT 'ALTER TABLE ' || SEGMENT_NAME || ' MOVE TABLESPACE 테이블스페이명;'
FROM USER_SEGMENTS
WHERE SEGMENT_TYPE = 'TABLE';



/* 
 * 2. 두번째 INDEX의 TABLESPACE 변경.
 * ALTER INDEX 인덱스명 REBUILD TABLESPACE 테이블스페이스명;
 *
 */
SELECT 'ALTER INDEX ' || SEGMENT_NAME || ' REBUILD TABLESPACE 테이블스페이명;'
FROM USER_SEGMENTS
WHERE SEGMENT_TYPE = 'INDEX';

/* 
 * 3. LOBINDEX, LOG SEGMENT의 TABLESPACE변경
 * ALTER INDEX 인덱스명 REBUILD TABLESPACE 테이블스페이스명;
 * 테이블의 TABLESPACE를 변경해도 해당계정의 TABLESPACE사용정보를 조회하면 몇가지가 나온다.
 * LOBINDEX, LOG SEGMENT의 테이블스페이스 정보들이다.
 *
 */
SELECT * 
FROM DBA_SEGMENTS
WHERE OWNER = '사용자계정';


ALTER TABLE 테이블명 MOVE LOB ( 컬럼1, 컬럼2 ) STORE AS ( TABLESPACE 테이블스페이스명 );
DBA_SEGMENTS에 SELECT한 결과를 보니 하나의 테이블에 여러개의 LOB을 사용하면 행으로 나온다.

SELECT 'ALTER TABLE ' || TABLE_NAME || ' MOVE LOB (' || 
               SUBSTR (XMLAGG (XMLELEMENT (A, ',' || COLUMN_NAME)).EXTRACT ('//text()'),2) || ')
               STORE AS ( TABLESPACE 테이블스페이스명 );'
FROM DBA_LOBS
WHERE OWNER = '사용자계정'
GROUP BY TABLE_NAME;

댓글 없음:

댓글 쓰기