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 설명
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