SAM (Sequential Access Method)

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

Oracle

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

SAM 기능에 사용되는 Parameters

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

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-1G)
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

Parameters 설명

Parameter
설명

APPLY_TO_SAM

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

SAM_BIND_VALUE

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

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

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

SAM_LOG_PREFIX

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

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

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

SAM_DIR

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

SAM_FILE_SIZE

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

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

SAM_BACKUP_DIR

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

SAM_BACKUP_SIZE

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

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에 컬럼 정보를 남겨준다.

SAM FILE TEMPLATE 설정

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

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

TX_SAM_TEMPLATE

*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(dml) 개수, ext sam에서는 출력하지 않는다.

commit tsn

%T

트랜잭션의 commit tsn

STMT_SAM_TEMPLATE, COL_SAM_TEMPLATE

*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
}        

STMT_SAM_TEMPLATE

항목
표현값
설명

op(string)

%O

dml : INSERT, UPDATE, DELETE, ddl : DDL

op code

%o

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

COL_SAM_TEMPLATE

항목
표현값
설명

column name

%N

column 이름

column value

%V

column 값

column count

%n

column count

Last updated