문서유형ㅣ기술정보
분야ㅣ마이그레이션
적용제품버전ㅣ7FS04PS
문서번호ㅣTMITI029
개요
테스트 환경
- OS : CentOS Linux release 8.4.2105
- Tibero : Tibero 7.2.4 (build 303667)
방법
1. DB Link를 통한 데이터 이관 방법
1.1 Source에서 Target으로 데이터 이관
Source에서 Target으로 DB Link를 통해 데이터 이관을 할 수 있습니다.
--Source
SQL> alter session enable parallel dml;
Session altered.
SQL> insert /*+ append parallel(4) */ into tbl_link_test@ttot select /*+ parallel(4) */ * from tbl_link_test;
SQL> select * from v$pe_session; --타 세션에서 조회
SID SERIAL# PEP_ID QCSID QCSERIAL# DEGREE REQ_DEGREE
---------- ---------- ---------- ---------- ---------- ---------- ----------
97 1601 0 77 531 4 4
98 1600 0 77 531 4 4
99 1598 0 77 531 4 4
100 1599 0 77 531 4 4
4 rows selected.
--Target
SQL> alter table TBL_LINK_TEST parallel 4;
Table 'TBL_LINK_TEST' altered.
SQL> select * from v$pe_session;
0 row selected.
주의
Source의 DB link를 이용할 경우 Target 테이블에 Insert 시 parallel 옵션을 사용할 수 없습니다.
미리 Target 테이블에 대해 parallel 설정을 변경 후 이관하여도 병렬처리가 되지 않습니다.
따라서, 해당 데이터 이관 방법은 권장하지 않습니다.
1.2 Target에서 Source의 데이터 이관
--Target
SQL> alter session enable parallel dml;
Session altered.
SQL> insert /*+ append parallel(4) */ into tbl_link_test select /*+ parallel(4) */ * from tbl_link_test@ttot;
SQL> select * from v$pe_Session; --타 세션에서 조회
SID SERIAL# PEP_ID QCSID QCSERIAL# DEGREE REQ_DEGREE
---------- ---------- ---------- ---------- ---------- ---------- ----------
97 3879 0 77 3852 4 4
98 3881 0 77 3852 4 4
99 3882 0 77 3852 4 4
100 3884 0 77 3852 4 4
101 3883 0 77 3852 4 4
102 3885 0 77 3852 4 4
103 3880 0 77 3852 4 4
104 3886 0 77 3852 4 4
8 rows selected.
--Source
SQL> select * from v$pe_session;
SID SERIAL# PEP_ID QCSID QCSERIAL# DEGREE REQ_DEGREE
---------- ---------- ---------- ---------- ---------- ---------- ----------
97 4054 0 79 3928 4 4
98 4053 0 79 3928 4 4
99 4052 0 79 3928 4 4
100 4051 0 79 3928 4 4
4 rows selected.
참고
해당 방법은 Target, Source 모두 병렬 처리가 가능합니다.
2. 데이터 이관 전 설정
2.1 TABLE LOGGING 설정
이관 대상 테이블을 nologging 모드로 설정하여 이관 속도를 향상 시킬 수 있습니다.
alter table <유저명>.<테이블명> nologging;
2.2 인덱스 삭제
이관 대상 테이블에 생성되어 있는 인덱스를 drop하여 이관 속도를 향상 시킬 수 있습니다.
DROP INDEX <유저명>.<인덱스명>;
참고
DROP INDEX 수행 전 인덱스 생성문 미리 확보하면 추후 INDEX 생성 시 사용이 가능합니다.
2.3 테이블 병렬처리 설정
힌트를 통해 append 처리 및 이관 대상 테이블의 DOP를 지정할 수 있습니다.
ALTER SESSION ENABLE PARALLEL DML; INSERT /*+ append parallel(4) */ <유저명>.<테이블명> SELECT /*+ parallel(4) */ <유저명>.<테이블명>@<DB Link명>; COMMIT;
주의
session level에서 parallel dml 활성화 필요 및 이관 후 commit 수행이 필요합니다.
2.4 NOARCHIVELOG MODE 설정
Target의 ARCHIVELOG MODE를 NOARCHIVELOG로 설정하여 이관 속도를 향상 시킬 수 있습니다.
ALTER DATABASE NOARCHIVELOG;
주의
해당 작업은 mount 상태에서 수행 가능하며, DB 재기동이 필요합니다.
2.5 UNDO RETENTION 설정
데이터 이관 시 가장 많이 사용되는 UNDO TABLESPACE 재사용 시간을 단축하여 이관 속도를 향상 시킬 수 있습니다. (기본값 : 900(초))
-- DB 기동 중 변경 방법 ALTER SYSTEM SET UNDO_RETENTION=30; -- DB 재기동이 필요한 변경 방법 (파라미터 추가) vi $TB_HOME/config/$TB_SID.tip UNDO_RETENTION=30
참고
DB 기동 중 변경하는 방법인 ALTER문 수행 이후 새로 접속된 세션에 대해서 적용됩니다.
100 이하 값으로 설정 권고합니다.
2.6 제약조건 비활성화 및 삭제
Target에 데이터 INSERT 시 제약조건을 체크합니다. 따라서, Target의 제약조건을 비활성화 하거나 삭제하면 데이터 이관 속도를 향상 시킬 수 있습니다.
-- 제약조건 비활성화 방법 ALTER TABLE <유저명>.<테이블명> disable constraint <제약조건명>; -- 제약조건 삭제 방법 ALTER TABLE <유저명>.<테이블명> drop constraint <제약조건명>;
참고
DROP CONSTRAINT 수행 전 제약조건 생성문 미리 확보하면 추후 CONSTRAINT 생성 시 사용이 가능합니다.
3. 데이터 이관 후 설정
3.1 TABLE LOGGING 설정
데이터 이관이 완료된 후 TABLE LOGGING 설정값을 원복해야 합니다.
-- Source의 LOGGING 모드를 조회하여 Target에 반영 SELECT 'ALTER TABLE ' || OWNER || '.' || TABLE_NAME || '.' || ' logging;' FROM DBA_TABLES@<DB Link 명> WHERE LOGGING='YES' and OWNER='<유저명>';
주의
NOLOGGING으로 계속 사용할 경우 성능상 이점은 있지만 복구가 불가능합니다.
3.2 인덱스 재생성
데이터 이관이 완료된 후 기존에 DROP 했던 인덱스를 다시 생성합니다. 미리 확보해둔 생성문을 parallel 처리하여 생성하고, 생성이 완료되면 다시 인덱스 DOP를 원복합니다.
CREATE INDEX <유저명>.<인덱스명> ~~~~ PARALLEL 4; ALTER INDEX <유저명>.<인덱스명> NOPARALLEL;
3.3 테이블 병렬처리 설정 원복
데이터 이관이 완료된 후 테이블 DOP 설정값을 원복합니다.
-- Source의 DOP 값을 조회하여 Target에 반영 SELECT 'ALTER TABLE ' || OWNER || '.' || TABLE_NAME || ' parallel ' || degree || ';' FROM DBA_TABLES@<DB Link 명> WHERE OWNER='<유저명>';
3.4 ARCHIVELOG MODE 설정
데이터 이관이 완료된 후 Target의 ARCHIVELOG MODE를 ARCHIVELOG로 변경해야 합니다.
ALTER DATABASE ARCHIVELOG;
주의
해당 작업은 mount 상태에서 수행 가능하며, DB 재기동이 필요합니다.
ARCHIVELOG 상태에서만 HOTBACKUP이 가능합니다.
3.5 UNDO RETENTION 원복
데이터 이관이 완료된 후 UNDO RETENTION 값을 원복합니다. (기본값 : 900(초))
-- DB 기동 중 변경 방법 ALTER SYSTEM SET UNDO_RETENTION=900; -- DB 재기동이 필요한 변경 방법 (파라미터 추가) vi $TB_HOME/config/$TB_SID.tip UNDO_RETENTION=900
3.6 제약조건 활성화 및 재생성
데이터 이관이 완료된 후 제약조건을 활성화해야 합니다. 테이블의 크기가 큰 경우 상당한 시간이 소요되므로 해당 작업시간까지 고려하여 이관 시간을 산정해야 합니다.
-- 제약조건 추가 방법 ALTER TABLE <유저명>.<테이블명> ADD CONSTRAINT <제약조건명> <제약조건> <컬럼명> [NOVALIDATE]; -- 제약조건 활성화 방법 ALTER TABLE <유저명>.<테이블명> ENABLE <제약조건명>;
주의
NOVAILIDATE 옵션을 활용하여 시간을 단축할 수 있으나, 실행 플랜이 변경되는 side-effect가 존재하므로 비권장합니다.
NOVALIDATE 옵션의 경우 ADD 시에만 사용이 가능합니다.
4. 기타 참고 사항
- NOLOGGING으로 이관된 데이터들은 복구가 불가능하므로 이관이 완료된 후에는 반드시 풀백업 수행을 권장합니다.
- DB Link를 통해 데이터 이관시에는 특정 파티션만 조회할 수 없습니다. 따라서, 작업자가 별도로 범위 조건절을 지정하여 조회가 필요합니다.
- TAC 환경일 경우 한쪽 노드를 종료한 후 데이터 이관을 진행합니다. 유저(스키마) 별로 데이터를 이관할 경우에는 각 노드에 다른 유저(스키마)로 데이터 이관을 수행합니다.
5. 결론
- Target의 DB Link를 통해 데이터 이관
- Target의 대상 테이블 노로깅 설정
- Target의 대상 테이블 인덱스 비활성화 혹은 삭제
- Target의 대상 테이블에 append 처리 및 병렬처리 설정
- Target의 대상 DB NOARCHIVELOG MODE 변경
- Target의 대상 제약조건 비활성화 혹은 삭제