반응형

대용량 테이블이고 DML(INSERT, UPDATE, DELETE 등)가 계속 일어나는 테이블에 신규 인덱스 생성을 하려면

Lock이 걸려서 서비스가 원활하지 않을 수 있습니다.

그럴 경우에 아래와 같이 ONLINE, NOLOGGING 옵션을 사용하면 좋습니다.

ONLINE은 서비스 중에 Lock이 걸리지 않고 인덱스 생성하는 옵션입니다.

NOLOGGING은 UNDO, REDO를 최소하면서 인덱스 생성할 수 있게 도와주는 옵션입니다.

1. 테이블 EMPLOYEE 에 기 생성된 인덱스 확인

SELECT IDX.OWNER, IDX.INDEX_NAME, IDX.TABLE_OWNER,
IDX.TABLE_NAME, IDX.TABLESPACE_NAME, IDX_COL.COLUMN_NAME
FROM DBA_INDEXES IDX, DBA_IND_COLUMNS IDX_COL
WHRE IDX.TABLE_NAME = 'EMPLOYEE'
AND IDX.INDEX_NAME=IDX_COL.INDEX_NAME
ORDER BY INDEX_NAME;

2. 아래의 구문을 사용한 인덱스 생성

CREATE INDEX EMP.IX_EMPLOYEE01 ON EMP.IX_EMPLOYEE(IDX01, IDX02, IDX03, IDX04)
NOLOGGING TABLESPACE TS_IDX_EMP LOCAL ONLINE;

3. 생성된 인덱스 10% 샘플링 통계수집

BEGIN
  SYS.DBMS_STATS.GATHER_INDEX_STATS (
     OwnName           => 'EMP'
    ,IndName           => 'IX_EMPLOYEE01'
    ,Estimate_Percent  => 10
    ,Degree            => 4
    ,No_Invalidate  => FALSE);
END;
/

감사합니다.

반응형