모든 페이지
1 / 4

Loading...

Loading...

Loading...

Loading...

DML History

APPLY 프로세스에서 DML 반영 시 MAP 파라미터로 지정한 History 테이블에 반영된 history 를 남기는 기능이다.

해당 기능을 사용하기 위해서는 기존 ProSync 동기화를 진행하는 인스턴스 이외에 DML History 기능 작동을 위한 인스턴스가 추가로 하나 더 필요하다.

참고

다음의 타입들에 대해선 이 기능을 제공하지 않는다.

아래의 타입이 있는 테이블의 경우에는 컬럼의 값이 NULL로 기록된다.

  • LONG

APPLY 프로세스의 config 파일인 [inst_id]_apply1.cfg 파일에 다음의 파라미터를 설정해야 한다.

Parameter
설명

RECORD_HISTORY

해당 인스턴스에서 DML history 기능을 사용 할 지에 대한 여부를 결정한다. (Y|N)

  • Y : MAP RULE 로 지정된 history 테이블에 row by row로 DML이 남게 된다.

  • N : MAP RULE 로 지정된 history 테이블에 row by row로 DML이 남지 않는다. (기본값)

해당 파라미터를 Y 로 설정할 경우, MAP 파라미터를 history 를 남길 테이블로 설정해 주어야 하며, DDL 파라미터의 경우 exclude all 로 설정해 주어야 한다.

추가적으로 동기화 대상 테이블에 추가적인 column들이 필요하다.

column
설명
BLOB
  • CLOB

  • LEADING_PRS_USER

    DML history 기능에 의해서 history를 기록할 선행되는 PRS_USER를 설정하는 파라미터이다.

    선행되는 인스턴스에 동기화가 이루어져야 DML history가 남게 된다. 3초씩 10번 총 30초 동안 바라보며, 그 안에 동기화가 이루어지지 않을 경우 history는 남지 않는다.

    OLD_{컬럼 명}

    해당 column의 경우 UPDATE, DELETE 같은 column의 값이 변경 될 때의 값이 남게 된다. 따라서 기존 컬럼과 똑같은 타입으로 설정해 주어야 한다.

    HIST_NO

    NUMBER 이며, 순차 채번을 위한 column이다. Target DB SYS User 에 SQ_{HISTORY_TABLE} 의 이름을 가진 sequence의 생성이 필요하다. 이 때 Sequence table 은 MIN 1 MAX 99999999 을 가지며, cycle 로 순환되어야 한다.

    IUD_FLAG

    VARCHAR(6) 이며, History 가 남을 DML 의 유형을 뜻하는 column이다. INSERT / UPDATE / DELETE가 남는다.

    IUD_TIME

    TIMESTAMP 이며, DML 이 수행 되어 history 가 남은 시간을 뜻한다.

    DML Error Report

    APPLY 프로세스가 동기화 진행 중 DML 반영을 실패 또는 장애 상황이 발생했을 때 일정 횟수를 재시도 한 뒤 report 파일로 write하는 기능이다.

    DML에 관해서만 기록이 가능하며, APPLY 프로세스의 config 파일인 [inst_id]_apply1.cfg 파일에 다음의 파라미터를 설정해야 한다.

    파라미터
    설명

    APPLY_TO_REPORT

    Dml Error Report 기능의 사용 여부를 결정한다. (Y|N)

    • Y : report file에 row by row로 DML이 남게 된다. (기본값)

    • N : report file에 row by row로 DML이 남지 않는다.

    APPLY_DML_ERR_REPORT_CNT

    Dml Error Report 기능에 의해서 report file write가 시작되기 전 재시도 횟수를 설정하는 파라미터이다. (기본값: 20)

    APPLY_REPORT_DIR

    report 파일이 남겨질 디렉터리를 설정한다. (기본값: [prosync_directory]/var/[inst_id]/dml_err)

    APPLY_REPORT_FILE_SIZE

    각 프로세스 별 DML error report 파일의 최대 크기를 설정한다. report 파일의 크기가 APPLY_REPORT_FILE_SIZE를 넘으면 APPLY_REPORT_BACKUP_DIR로 옮긴 후 새로운 report 파일을 생성한다. (기본값: 100MB, 범위: 1MB ~ 1GB)

    APPLY_REPORT_BACKUP_DIR

    DML error report 파일의 백업 파일이 저장되는 디렉터리 위치를 설정한다.

    APPLY_REPORT_BACKUP_SIZE

    APPLY_REPORT_BACKUP_DIR에 백업되는 report 파일들의 최대 크기를 설정한다. 각 프로세스 별로 백업된 총 report 파일의 크기가 APPLY_REPORT_BACKUP_SIZE를 넘으면 가장 오래된 파일부터 순차적으로 삭제한다. (기본값: 0, 범위: 0 ~ 128GB)

    참고

    다음의 타입들에 대해선 이 기능을 제공하지 않는다.

    아래의 타입이 있는 테이블의 경우에는 컬럼의 값이 NULL로 기록된다.

    • NCHAR

    • NVARCHAR

    • LONG

    • BLOB

    • CLOB

    Sequential Access Method (SAM)

    ProSync는 동기화 과정 중에 전달하는 세그먼트를 파일에 순차적으로 기록할 수 있다. APPLY 프로세스에서 Target DB에 반영하는 STATEMENT 를 파일에 저장할 수 있는데, 이를 SAM 기능이라고 한다.

    다음은 SAM 기능을 지원하는 데이터 타입이다.

    구분
    지원 타입

    Tibero

    NUMBER, CHAR, VARCHAR, DATE, TIME, TIMESTAMP, INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND, CLOB, TIMESTAMP WITH TIMEZONE, TIMESTAMP WITH LOCAL TIMEZONE, BINARY_FLOAT, BINARY_DOUBLE

    [INST_ID]_apply1.cfg 파일에 다음의 파라미터를 설정해야 한다.

    Parameter
    설명

    본 절에서는 TX_SAM_TEMPLATE, STMT_SAM_TEMPLATE, COL_SAM_TEMPLATE 파라미터에서 사용할 템플릿을 설정하는 방법에 대해 서술한다.

    템플릿 구성요소는 '% + 알파벳 하나(대소문자 구분)'으로 구성하며, 이렇게 구성된 표현값을 치환하여 Sam File에 출력한다.

    항목
    표현값
    의미
    항목
    표현값
    설명
    항목
    표현값
    설명

    Oracle

    NUMBER, CHAR, VARCHAR, DATE, TIME, TIMESTAMP, INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND, CLOB

    PostgreSQL

    SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL, REAL, DOUBLE PRECISION, CHARACTER, CHARACTER VARYING, DATE, TIMESTAMP WITHOUT TIMEZONE

    APPLY_TO_SAM=[Y|N]
    SAM_BIND_VALUE=[Y|N]
    SAM_LOG_PREFIX=[Y|N]
    
    SAM_DIR=sam_dir_path
    SAM_FILE_SIZE=file_size(1M-16G)
    SAM_BACKUP_DIR=sam_backup_dir_path
    SAM_BACKUP_SIZE=file_size(0-128G)
    
    SQL_REDO_MODE=[Y|N]
    TX_SAM_TEMPLATE=tx_template_file_path
    STMT_SAM_TEMPLATE=stmt_template_file_path
    COL_SAM_TEMPLATE=col_template_file_path

    APPLY_TO_SAM

    APPLY 프로세스에서 DB로 반영하는 STATEMENT를 SAM 파일로 남길지 여부를 설정한다. (Y/N)

    SAM_BIND_VALUE

    SAM 파일에 남겨지는 Query 의 Value 값 저장 여부를 설정한다. (Y/N)

    • Y : Value 값을 저장한다. (기본값)

    • N : Value 값을 '?' 로 치환한다.

    SAM_LOG_PREFIX

    *transaction template file 설정*
    tx {
    xid: %X
    stmt count: %C
    commit tsn: %T
    }
    
    *EXT SAM FILE 출력 예제*
    tx {
    xid: 655403
    stmt count:
    commit tsn: 26362351
    }
    
    *APPLY SAM FILE 출력 예제*
    tx {
    xid: 655403
    stmt count: 100
    commit tsn: 26362351
    }

    xid

    %X

    트랜잭션의 xid

    statement count

    %C

    *statement template file 설정*
    stmt {
        op: %O
        op code: %o
        owner: %W
        table name: %N
        sgmt id: %I
        tsn: %T
        wrap no: %R
        log seq: %L
        set: %s
        where: %w
        values: %v
        ddl/dml string: %D
    }
    
    *column template file 설정*
    col {
        name: %N
        values: %V
        column count: %n
    }
    
    *INSERT STATEMENT 결과 예제*
    INSERT)
    stmt {
        op:INSERT
        op code:0
        owner:PRS_TEST
        table name:VARCHAR_T
        sgmt id:26424
        tsn:26362394
        wrap no:43
        log seq:2102
        set:
        where:
        values:
            col {
                name:C1
                values:1
                column count:0
            }
            col {
                name:VCHAR_COL
                values:VARCHAR
                column count:1
            }
        ddl/dml string:INSERT INTO "PRS_TEST"."VARCHAR_T" ("C1", "VCHAR_COL") VALUES
                   (1, VARCHAR)
    }
    
    *UPDATE STATEMENT 결과 예제*
    UPDATE)
    stmt {
        op:UPDATE
        op code:2
        owner:PRS_TEST
        table name:NVARCHAR_T
        sgmt id:26436
        tsn:26362421
        wrap no:87
        log seq:2103
        set:
            col {
                name:NVCHAR_COL
                values:NVARCHAR2
                column count:1
            }
        where:
            col {
                name:C1
                values:10
                column count:0
            }
            col {
                name:NVCHAR_COL
                values:NVCHAR
                column count:1
            }
        values:
        ddl/dml string:UPDATE "PRS_TEST"."NVARCHAR_T" SET NVCHAR_COL = NVARCHAR2
                   WHERE C1 = 10 AND NVCHAR_COL = NVCHAR
    }
    
    *DELETE STATEMENT 결과 예제*
    DELETE)
    stmt {
        op:DELETE
        op code:1
        owner:PRS_TEST
        table name:NVARCHAR_T
        sgmt id:26436
        tsn:26362437
        wrap no:175
        log seq:2103
        set:
        where:
            col {
                name:C1
                values:10
                column count:0
            }
            col {
                name:NVCHAR_COL
                values:NVARCHAR2
                column count:1
            }
        values:
        ddl/dml string:DELETE FROM "PRS_TEST"."NVARCHAR_T" WHERE C1 = 10 AND
                   NVCHAR_COL = NVARCHAR2
    }
    
    *DDL STATEMENT 결과 예제*
    DDL)
    stmt {
        op:DDL
        op code:9
        owner:PRS_TEST
        table name:NVARCHAR_T
        sgmt id:
        tsn:26362654
        wrap no:332
        log seq:2103
        set:
        where:
        values:
        ddl/dml string:truncate table nvarchar_t
    }        

    op(string)

    %O

    dml : INSERT, UPDATE, DELETE, ddl : DDL

    op code

    %o

    column name

    %N

    column 이름

    column value

    %V

    SAM 기능에 사용되는 Parameters

    Parameters 설명

    주의

    SAM_BIND_VALUE 를 사용하여 SAM 파일에 Query의 value 값을 저장할 시, 동기화를 진행중인 table의 column 유형에 따라 SAM 파일의 과도한 용량 증가를 주의해야 한다.

    SAM FILE TEMPLATE 설정

    TX_SAM_TEMPLATE

    STMT_SAM_TEMPLATE, COL_SAM_TEMPLATE

    STMT_SAM_TEMPLATE

    COL_SAM_TEMPLATE

    해당 Query가 수행된 시간과 스레드 데이터 정보를 SAM 파일 row의 시작 부분에 붙이는 기능이다. (Y|N)

    • Y : 해당 정보를 row의 시작 부분에 첨부한다. (기본값)

    • N : 해당 정보를 남기지 않는다.

    SAM_DIR

    프로세스의 SAM 파일이 저장되는 디렉터리 위치를 나타낸다.

    SAM_FILE_SIZE

    프로세스별 SAM 파일의 최대 크기를 설정한다.

    SAM 파일의 크기가 SAM_FILE_SIZE를 넘으면 SAM_BACKUP_DIR로 옮긴 후 새로운 SAM 파일을 생성한다. (기본값: 16GB, 범위: 1MB ~ 16GB)

    SAM_BACKUP_DIR

    SAM 파일의 백업 파일이 저장되는 디렉터리 위치를 설정한다.

    SAM_BACKUP_SIZE

    SAM_BACKUP_SIZE는 SAM_BACKUP_DIR에 백업되는 SAM 파일들의 최대 크기를 설정한다. (기본값: 0 (제한없음), 범위: 0 ~ 128GB)

    SQL_REDO_MODE

    SQL_REDO_MODE 파라미터는 Sam File에 적히는 내용을 full dml/ddl로 적어주는 기능이다. (Y|N)

    • Y : sam file에 row by row로 DML이 남게 된다. (기본값)

    • N : sam file에 row by row로 DML이 남지 않는다.

    TX_SAM_TEMPLATE

    TX_SAM_TEMPLATE 파라미터는 트랜잭션을 Sam File에 출력할 때 사용할 user_defined_template 파일의 경로를 설정하는 파라미터이다. SQL_REDO_MODE가 N인 경우에 동작한다.

    ProSync는 트랜잭션이 commit을 만날 때마다 본 파라미터 경로에 있는 템플릿을 읽어 해당 템플릿 형식대로 sam file에 트랜잭션 내용을 남긴다.

    STMT_SAM_TEMPLATE

    STMT_SAM_TEMPLATE 파라미터는 statement(dml/ddl) 내용을 Sam File에 남겨줄 때 사용할 user_defined_template 파일의 경로를 설정하는 파라미터이다. SQL_REDO_MODE가 N인 경우에 동작한다.

    ProSync는 DDL과 DML 내용을 Sam File에 남겨줄 때 본 파라미터 경로에 있는 템플릿을 읽어 해당 템플릿 형식대로 sam file에 DDL, DML 내용을 남긴다.

    COL_SAM_TEMPLATE

    COL_SAM_TEMPLATE 파라미터는 DML을 출력할 때 컬럼 내용을 남길 때 사용할 user_defined_template 파일의 경로를 설정하는 파라미터이다. SQL_REDO_MODE가 N인 경우에 동작한다.

    ProSync는 DML을 파일에 남겨줄 때 COL_SAM_TEMPLATE에 컬럼에 대한 정의가 되어 있다면 해당 템플릿 형식대로 sam file에 컬럼 정보를 남긴다.

    트랜잭션의 statement(dml) 개수, ext sam에서는 출력하지 않는다.

    commit tsn

    %T

    트랜잭션의 commit tsn

    insert, update, delete, ddl에 대한 opcode

    owner

    %W

    statement의 user name

    name

    %N

    statement의 table name

    sgmt id

    %I

    해당 object의 segment id

    tsn

    %T

    statement가 실행된 tsn

    wrap no

    %R

    statement의 wrap number

    log seq

    %L

    statement가 기록된 log sequence number

    set

    %s

    update 구문의 set 절에 대한 내용 (insert와 delete의 경우 empty string으로 치환)

    where

    %w

    update, delete 구문의 where 절에 대한 내용 (insert의 경우 empty string으로 치환)

    values

    %v

    insert 구문의 values 절에 대한 내용 (update, delete의 경우 empty string으로 치환)

    ddl/dml string

    %D

    statement의 full dml/ddl string

    column 값

    column count

    %n

    column count

    History

    ProSync에는 DML 이력을 확인할 수 있는 다양한 기능들이 있다. config파일에서 로그 레벨을 5레벨로 높이면, 반영하고 있는 SQL과 Bind할 Value들이 byte array 형태로 남게 된다. 다만 로그 레벨을 반드시 높여야 한다는 점과, bind value들이 별도로 남으므로 실제 SQL로 바로 처리할 수 없다는 단점이 있다.

    본 장에서는 위와 같은 상황에서 확인할 수 있는 SAM(Sequential Access Method) 파일 기능과 DML 에러 발생 시의 report 파일, DML 이력 확인 기능 등에 대하여 기술한다.