Database 대용량 데이터 이관 예제

Database 대용량 데이터 이관 방법의 예제를 설명합니다.

데이터 이관은 다양한 방법을 이용하여 수행할 수 있고 이로 인해 수행 속도를 최적화 시킬 수 있습니다.

circle-info

단, 테이블에 대한 데이터 이관만 가능하므로 Object에 대한 이관은 수동으로 수행해야 합니다.

아래는 예제에서 사용하는 테이블 정보입니다.

CREATE TABLE DBTECH.LINEITEM ( 
L_ORDERKEY NUMBER,
L_PARTKEY NUMBER, 
L_SUPPKEY NUMBER, 
L_LINENUMBER NUMBER, 
L_QUANTITY NUMBER(15,2),
L_EXTENDEDPRICE NUMBER(15,2), 
L_DISCOUNT NUMBER(15,2), 
L_TAX NUMBER(15,2), 
L_RETURNFLAG CHAR(1), 
L_LINESTATUS CHAR(1), 
L_SHIPDATE DATE,
L_COMMITDATE DATE, 
L_RECEIPTDATE DATE, 
L_SHIPINSTRUCT CHAR(25), 
L_SHIPMODE CHAR(10), 
L_COMMENT VARCHAR(44)
) NOLOGGING;


Table Migrator 예제

Table Migrator 방법으로 대용량 데이터를 이관하는 순서입니다.

  1. migrator.properties 파일에 속성값을 설정합니다.

circle-info

전체 건수를 균등하게 나눌 수 있는 조건을 검토합니다.(SELECT_CONDITION 부분에 설정)

만족하는 조건이 있는 경우 SQL문을 나눈 후에 병렬 세션(터미널 또는 다른 컴퓨터)으로 수행하며 Temp와 Undo Tablespace 사용량의 모니터링이 필요합니다.

  1. Background Process를 이용하여 병렬 프로세싱으로 migrator를 수행합니다.

  1. 수행 결과와 로그 파일을 확인합니다.


DB Link 예제

DB Link로 insert ... select ... 구문을 수행할 때 parallel 힌트를 사용하면 select는 serial하게 동작하고, insert일 때만 parallel로 동작합니다. 따라서 DB Link 원본 데이터가 존재하는 서버의 사양이 좋을 경우 parallel 힌트를 사용하여 view를 생성하고 해당 view를 Tibero에서 select하는 방식으로 이관하면 성능 향상을 기대할 수 있습니다.

아래는 DB Link 방법으로 대용량 데이터를 이관하는 순서입니다.

circle-info

세션이 2개일 경우 동시에 수행합니다.

  1. 전체 건수를 균등하게 나눌 수 있는 조건을 검토합니다.

만족하는 조건이 있는 경우 SQL문을 나눈 후에 병렬 세션(터미널 또는 다른 컴퓨터)으로 수행하며 Temp와 Undo Tablespace 사용량의 모니터링이 필요합니다.

  1. SQL문에 append, parallel 힌트를 사용합니다.

append Insert하는 대상 테이블에 대해서 nologging 옵션이 적용되있어야 합니다.

parallel 힌트를 적용하기 위해 해당 세션에 parallel dml 옵션을 enable해야 합니다.

circle-info

Select하는 부분에 병렬 수행을 적용하기 위해서는 DB Link의 테이블에 대해서 parallel을 적용한 View를 만 들어 조회해야 합니다.

아래는 세션이 2개일 경우 DB Link를 수행하는 예입니다.

세션 1수행 L_LINESTATUS가 '0'에 대해서 Insert합니다.

세션 2수행 L_LINESTATUS가 'F'에 대해서 Insert합니다.

COMMIT된 데이터 확인


tbLoader 예제

Load할 SAM 파일을 n등분하고 직접 로딩과 병렬 프로세싱을 동시에 사용합니다.

데이터를 로딩하는 방식으로 디스크에서 wait만 발생하지 않는다면 최적의 수행 속도가 보장됩니다.

circle-info

Loader 방법 사용 시 Source 데이터의 unload 시간을 고려합니다. 또한Source 서버에서 Tartget 서버로 파일 전송 시간을 고려합니다.

아래는 tbLoader 방법으로 대용량 데이터를 이관하는 순서입니다.

  1. Unload(spool 또는 unload 유틸을 이용하여 데이터 unload) 및 SAM 파일을 전송합니다.

  2. Load할 SAM 파일을 n등분 하여 n개의 SAM 파일을 준비합니다.

  3. 각 SAM 파일을 읽는 n개의 컨트롤 파일을 작성하고, 작성할 때 append 옵션을 사용합니다.

아래는 2개의 컨트롤 파일을 작성하는 방법입니다.

  1. Background Process를 이용하여 병렬 프로세싱으로 tbloader를 실행하고, tbloder 명령어에 'direct=y dpl_parallel=y' 옵션을 사용합니다.

circle-info

dpl_parallel 옵션은 하나의 테이블에 대해 병렬 프로세싱으로 tbloader를 수행할 때 사용하며 Tibero5r70450 이후 버전에서 사용이 가능합니다.

아래는 2개의 SAM 파일 및 컨트롤 파일을 가지고 tbLoader를 수행하는 예입니다.

세션 1 수행

세션 2 수행

Last updated