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 ํ์ผ์ ๋ค์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํด์ผ ํ๋ค.
๋ณธ ์ ์์๋ 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-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_pathAPPLY_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_BIND_VALUE ๋ฅผ ์ฌ์ฉํ์ฌ SAM ํ์ผ์ Query์ value ๊ฐ์ ์ ์ฅํ ์, ๋๊ธฐํ๋ฅผ ์งํ์ค์ธ table์ column ์ ํ์ ๋ฐ๋ผ SAM ํ์ผ์ ๊ณผ๋ํ ์ฉ๋ ์ฆ๊ฐ๋ฅผ ์ฃผ์ํด์ผ ํ๋ค.
ํด๋น Query๊ฐ ์ํ๋ ์๊ฐ๊ณผ ์ค๋ ๋ ๋ฐ์ดํฐ ์ ๋ณด๋ฅผ SAM ํ์ผ row์ ์์ ๋ถ๋ถ์ ๋ถ์ด๋ ๊ธฐ๋ฅ์ด๋ค. (Y|N)
Y : ํด๋น ์ ๋ณด๋ฅผ row์ ์์ ๋ถ๋ถ์ ์ฒจ๋ถํ๋ค. (๊ธฐ๋ณธ๊ฐ)
N : ํด๋น ์ ๋ณด๋ฅผ ๋จ๊ธฐ์ง ์๋๋ค.
SAM_DIR
ํ๋ก์ธ์ค์ SAM ํ์ผ์ด ์ ์ฅ๋๋ ๋๋ ํฐ๋ฆฌ ์์น๋ฅผ ๋ํ๋ธ๋ค.
SAM_FILE_SIZE
ํ๋ก์ธ์ค๋ณ SAM ํ์ผ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ค.
SAM ํ์ผ์ ํฌ๊ธฐ๊ฐ SAM_FILE_SIZE๋ฅผ ๋์ผ๋ฉด SAM_BACKUP_DIR๋ก ์ฎ๊ธด ํ ์๋ก์ด SAM ํ์ผ์ ์์ฑํ๋ค. (๊ธฐ๋ณธ๊ฐ: 100MB, ๋ฒ์: 1MB ~ 1GB)
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