Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
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
๋ณธ ์ฅ์์๋ Map ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ์ค์ ํ ์ ์๋ Resolution Rule (DCR)๊ณผ Schema Mapping์ ์ํ DDL ์ค์ ์ ๋ํด ์์๋ณธ๋ค. Mapping์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ ์ด๋ธ๋ช , ์ปฌ๋ผ๋ช ์ ๋ํ Mapping์ ์ง์ํ๋ค.
ProSync๋ Apply ํ๋ก์ธ์ค ์ง์ฐ ์ ๋ชจ๋ ๊ณณ์ ์ง์ฐ์ด ๋ฐ์ํ๊ฒ ๋๋ค. ์ด ๋๋ฌธ์ ์ฑ๋ฅ์ ์ฌ๋ฆด ์ ์๋ ์๋จ๋ค์ด ์กด์ฌํ๋ค. ๋ณธ ์ฅ์์ Performance ์ธก๋ฉด์์ ์ค์ ํ ์ ์๋ Configuration๋ค์ ๋ํด ์์๋ณธ๋ค.
๋ฐ์ดํฐ ์ถฉ๋ ๋ฐ์ ์, ์ฒ๋ฆฌ๋ฐฉ์์ ๋ํด ํ์ธํ๋ค.
MAP Rule์์ ์๊ฐํ Data Conflict Rule์ ์๋๋ฆฌ์ค๋ค์ ์ ๋ฆฌํ๋ค. ์ต์ ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ํด๋น ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค.
Data Conflict๋ฅผ ํ์ธํ๋ ค๋ฉด Row๋ฅผ ํน์ ํ ์ ์์ด์ผ ํ๋ค. ProSync์์๋ ์ด์ ๋ํ ๊ธฐ์ค์ Primary key๋ก ๋๊ณ ์๋ค. Primary key ๋ก ์ธํด ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ, Source Database, Target Database, Column Min(Max) ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ Conflict์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๊ฒฐ์ ํ๋ค.
Insert๋ฌธ์์ ์ถฉ๋์ด ๋ฐ์ํ๋ค๋ ๊ฒ์, ์ด๋ฏธ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ค๋ ์๋ฏธ์ด๋ค. ๋ฐ๋ผ์ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ Source Database ๊ธฐ์ค์ผ๋ก ๋ง์ถฐ์ฃผ์ด์ผ ํ๋ค.
Insert๋ฌธ์ Update๋ก ๋ณ๊ฒฝํ์ฌ Conflict ์ ํด์ํด์ค๋ค.
Update์์์ ๋ฐ์ดํฐ ์ถฉ๋์ ์ํ๋ Row๊ฐ ์๋ค๋ ์๋ฏธ์ด๋ค.
Update๋ฌธ์ Insert๋ก ๋ณ๊ฒฝํ์ฌ Conflict ์ ํด์ํด์ค๋ค.
Delete์์์ ๋ฐ์ดํฐ ์ถฉ๋ ๋ํ ๋ง์ฐฌ๊ฐ์ง๋ก Row๊ฐ ์๋ค๋ ์๋ฏธ๊ฐ ๋๋ค.
Delete์ ๋ํ ์ถ๊ฐ์ ์ธ ์ฒ๋ฆฌ๊ฐ ์์ด ๋์ด๊ฐ๋ฉด ๋๋ค.
Insert๋ฌธ์ ์ถฉ๋์ ์ด๋ฏธ ๋ฐ์ดํฐ๊ฐ ์์ ๋ ๋ฐ์ํ๋๋ฐ, Target Database ๊ธฐ์ค์ผ๋ก ๋ง์ถฐ์ผ ํ๋ฏ๋ก, ๋ณ๋์ ์์ ์์ด ํด๋น ์ฒ๋ฆฌ๋ฅผ ๊ฑด๋๋ด๋ค.
Row๊ฐ ์๋ ์ํฉ์ด ๋ง๋ค๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์์ ์์ด ํด๋น ์ฒ๋ฆฌ๋ฅผ ๊ฑด๋๋ด๋ค.
Row๊ฐ ์๋ ์ํฉ์ด ๋ง๋ค๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์์ ์์ด ํด๋น ์ฒ๋ฆฌ๋ฅผ ๊ฑด๋๋ด๋ค.
์ ๋ ๊ฒฝ์ฐ์ ๋ํ ์กฐํฉ์ผ๋ก ๋ณผ ์ ์๋ค. ์ํฉ์ ๋ฐ๋ผ Source ๊ธฐ์ค ๋๋ Target ๊ธฐ์ค์ ๋ง์ถฐ ์ํํ๋ ์๋๋ฆฌ์ค๋ค. ๊ธฐ์ค์ด ๋๋ ๊ฒ์ด Database ๋จ์๊ฐ ์๋ Column ๋ด ๋ฐ์ดํฐ์ ๋์ ๋น๊ต๋ก ์ด๋ฃจ์ด์ง๋ค๋ ์ ์ด ๋ค๋ฅด๊ณ , ์ด์ ๋ฐ๋ผ ์ถฉ๋ ์ฒ๋ฆฌ ๋์์ ์์ Source / Target๊ณผ ๋์ผํ๊ฒ ์๋ํ๋ค.
Batch Execution์ RDBMS ์์์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ Batch ๊ด๋ จ API๋ผ๊ณ ์ดํดํ๋ ๊ฒ์ด ์ฉ์ดํ๋ค. DML ๊ฐ๊ฐ์ ๋ชจ๋ ์ฟผ๋ฆฌ ํํ๋ก ๋ณํํ์ฌ ์ ๋ฌํ๊ธฐ๋ณด๋จ, ๊ฐ์ ํํ์ ์ฟผ๋ฆฌ๋ผ๋ฉด ๋ฐ์ดํฐ๋ฅผ Batch๋จ์๋ก ๋ชจ์์ ์๋ฒ์์ ์ฌ์ฉํ๋๋ก ํ๋ ๊ธฐ๋ฅ์ด๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด Insert ์ ๊ฐ์ DML์ด ์ฐ์ํด์ ๋ค์ด์ฌ ๋, Target Database ์ ์ฑ๋ฅ์ ํฅ์ ์ํฌ ์ ์๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋๋ฅผ ์ฆ๊ฐ ์ํค๊ณ ๋๊ธฐํ ์๋๋ฅผ ๋์ด ์ฌ๋ ค์ค ์ ์๋ค.
ํ์ง๋ง ์ ์ฝ์ฌํญ๋ ์กด์ฌํ๋ ๊ธฐ๋ฅ์ผ๋ก, ์๋์ ๊ฐ์ ๋๊ฐ์ง ๊ด์ ์์ ๊ณ ๋ คํ ์ ์๋ค.
๊ฐ์ ํํ์ ์ฟผ๋ฆฌ
Batch๋ก ๋ชจ์์ ๋์ ํ๊ณ
ProSync๋ ํ ํธ๋์ญ์ ์์ DML์ด ์ฐ์ํด์ ๋ค์ด์ฌ ๋ ์ด ์์๋ฅผ ์์๋๋ก ๋ฐ๊พธ์ง ์๋๋ค. ์ ๋ ฅ๋๋ ๋ชจ๋ ์ฟผ๋ฆฌ๋ฅผ ์์๋๋ก ์ ์ฉํด์ผ ์ ํฉ์ฑ์ด ๊นจ์ง์ง ์๋๋ค๋ ๋์ ์ ๋๋ฌธ์ ์ด์ ๊ฐ์ด ์ฒ๋ฆฌ๊ฐ ๋๋ค.
ProSync์ Flow Control์ ์ํด ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ๋ค์ ์ ๋ฆฌํ ๋ฌธ์์ด๋ค. ๋ฐ์ดํฐ๊ฐ ๋๊ธฐํ๋๋ ์ผ๋ จ์ ๊ณผ์ ์ด ์์ ์ ์ผ๋ก ์ด์๋๊ธฐ ์ํด์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋๊ฐ ๊ด๊ฑด์ด๋ค.
์ฒ๋ฆฌ๊ฐ ๋๋ฌด ๋๋ฆฌ๋ค๋ฉด ๋๊ธฐํ ๋ก์ง ์ ๋ฐ์ดํฐ๋ ๊ณ์ํด์ ์์ด๊ฒ ๋๋ค. ์์ธ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ํด์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๋ฉด ๋น์ฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์๊ณ๊ฐ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ํ์ผ๋ก ์ ์ฅํ๊ฑฐ๋ ์ผ์์ ์ผ๋ก ์ง์ฐ์ํค๋ ๋์์ด ์ํ๋๋ค.
๋ํ ์ฒ๋ฆฌ ์๋๋ฅผ ์ฌ๋ฆฌ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ๋ค๋ ์กด์ฌํ๋ค. ์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฅด๋ฉด ๊ทธ๋งํผ ์ถ์ถํ ๋ฐ์ดํฐ๊ฐ ์ค์๊ฐ์ฑ์ด ๋๊ฒ ๋ฐ์์ด ๋๋ค๋ ์๋ฏธ์ด๋ฏ๋ก, ์ด ๋ถ๋ถ์ ๊ณ ๋ คํ์ฌ ํ๊ฒฝ ์ค์ ์ ํ๋ ๊ฒ์ด ์ข๋ค.
๋ง์ง๋ง์ผ๋ก ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋, ์ ํฉ์ฑ์ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก ๋๊ธฐํ๊ฐ ๋ฉ์ถ๊ฒ ๋์ด์๋๋ฐ, ์ด๋ ๊ฒ ๋๋ฉด ๋ฐ์ดํฐ๊ฐ ๋์ด์ ์ฒ๋ฆฌ๋ ์ ์์ด์ ์๊ตฌ์ ์ธ ์ง์ฐ์ด ๋ฐ์ํ ์ ์๋ค. ๋ฐ๋ผ์ ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋, ์ด๋ฅผ ์๋์ผ๋ก ์๋ตํ๊ฑฐ๋ Rule์ ๋ง์ถฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด์๋ ์์๋ณธ๋ค.
์ฃผ์
Data Conflict Rule(DCR) ๊ด๋ จ
Data Conflict Rule(DCR) ์ต์
์ ์ฌ์ฉํ ๊ฒฝ์ฐ USE_PK_FOR_WHERE ์ต์
์ ๋ฌด์๋๋ค. ๋๊ธฐํ์ ๋
ผ๋ฆฌ ๊ตฌ์กฐ์ Conflict๋ฅผ ์ฐพ๋ ๊ฒ์ด ์ฐ์ ์ด๊ธฐ ๋๋ฌธ์ ProSync์์ ๋ ์ต์
๊ฐ์ ์ด์ ๊ฐ์ ์ฐ์ ์์๋ฅผ ๋๋ค.
ProSync์๋ DML ์ด๋ ฅ์ ํ์ธํ ์ ์๋ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ด ์๋ค. configํ์ผ์์ ๋ก๊ทธ ๋ ๋ฒจ์ 5๋ ๋ฒจ๋ก ๋์ด๋ฉด, ๋ฐ์ํ๊ณ ์๋ SQL๊ณผ Bindํ Value๋ค์ด byte array ํํ๋ก ๋จ๊ฒ ๋๋ค. ๋ค๋ง ๋ก๊ทธ ๋ ๋ฒจ์ ๋ฐ๋์ ๋์ฌ์ผ ํ๋ค๋ ์ ๊ณผ, bind value๋ค์ด ๋ณ๋๋ก ๋จ์ผ๋ฏ๋ก ์ค์ SQL๋ก ๋ฐ๋ก ์ฒ๋ฆฌํ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
๋ณธ ์ฅ์์๋ ์์ ๊ฐ์ ์ํฉ์์ ํ์ธํ ์ ์๋ SAM(Sequential Access Method) ํ์ผ ๊ธฐ๋ฅ๊ณผ DML ์๋ฌ ๋ฐ์ ์์ report ํ์ผ, DML ์ด๋ ฅ ํ์ธ ๊ธฐ๋ฅ ๋ฑ์ ๋ํ์ฌ ๊ธฐ์ ํ๋ค.
์ ์ฌํ ์ฟผ๋ฆฌ๊ฐ ์ฐ์ํด์ ๋ค์ด์จ๋ค๋ฉด ProSync๋ ์ด๋ฅผ Batch๋ก ๋ฌถ์ด์ ์ฒ๋ฆฌ๋ฅผ ํ ์๊ฐ ์์ง๋ง, ์ฟผ๋ฆฌ๋ค์ ํํ๊ฐ ์ฐ์์ ์ด์ง ์๊ฒ ๋ค์ด์จ๋ค๋ฉด Batch๋ก ์ฒ๋ฆฌํ ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ๋ ํธ๋์ญ์ ์ ๊ฒฐ๊ณผ๊ฐ ๋์ผํ๋๋ผ๋ ํ๋๋ Batch ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ณ ๋ค๋ฅธ ํ๋๋ Batch ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
ํธ๋์ญ์ ๋ด์ ๊ฐ์ ํํ์ ์ฟผ๋ฆฌ๋ค์ด ์ฐ์ํด์ ๋ค์ด์จ๋ค๊ณ ๊ฐ์ ์ ํ์ฌ๋ ์ฑ๋ฅ ํฅ์์ด ๋ฏธ๋นํ ๊ฒฝ์ฐ๋ ์กด์ฌํ๋ค. ์๋ฅผ ๋ค์ด Insert์ ๊ฒฝ์ฐ Batch ๋์์ ํตํด ๋ฐ์ดํฐ์ ๊ฐ์๋ ํฌ๊ธฐ ๋ฑ์ Target Database์ ๋ฏธ๋ฆฌ ์๋ ค์ค๋ค๋ฉด Database๋ ์ด์ ๋ง๋ ํ๋์ ์ธ์์ ์ต์ ํ ํ์ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง Delete๋ Update ์ฒ๋ผ ๊ฐ row ๋ณ๋ก Where Clause์ ์ํด ๋ฐ๋ก ํ์์ ํด์ผ ํ๋ ํํ๋ก ๋ค์ด์จ๋ค๋ฉด ์๋ฌด๋ฆฌ ๋ชจ์ ๋ณด๋ด๋ ์๋ฒ ์ ์ฅ์์ ํ๋์ฉ ์ฒ๋ฆฌํ๋, ๋ชจ์์ ๋ค์ด์จ๊ฑธ ํ๋์ฉ ์ฒ๋ฆฌํ๋ ํฐ ์ฐจ์ด๊ฐ ์๋ค๊ณ ๋ณผ ์ ์๋ค.
๋ฐ๋ผ์ ProSync๋ ํน๋ณํ ์ค์ ์ด ์๋ค๋ฉด Insert์ ๋ํ Batch๋ง ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๊ธฐ๋ณธ ๋์์ด๋ค. ํ์ง๋ง Database ๋ณ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ์ Batch ์ฌ์ฉ ์ฌ๋ถ๋ ํ๋ผ๋ฏธํฐ๋ก ๋ชจ๋ ๊ด๋ฆฌ๊ฐ ๋๋ค.
Parameter ๋ณ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๋ค.
USE_BATCH_MODE
๊ธฐ๋ณธ ๊ฐ์ Y ๋ก, Batch๋ ํญ์ ๋์ํ๋๋ก ๋์ด์๋ค.
BATCH_MEM_SIZE
๊ธฐ๋ณธ ๊ฐ์ 10MB๋ก ์๋ฒ์ ๋ณด๋ผ ๋ ์ต๋ 10MB์ ๋ฐ์ดํฐ๊น์ง๋ง ์๊ณ ์ฟผ๋ฆฌ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์์ฒญํ๋ค.
USE_ONLY_INSERT_BATCH
Insert ๋ง Batch ๋ก ์ฒ๋ฆฌํ ๊ฒ ์ธ์ง์ ๋ํ ํ๋ผ๋ฏธํฐ๋ก ๊ธฐ๋ณธ ๊ฐ์ Y ์ด๋ค.
์ปค๋ฐ์ด ์์ฒญ ํธ๋์ญ์ ์ ๋ฐ์์ ํ ์ ์์ผ๋ฉด ๋ฐ์์ ํ๊ณ , ๋ฐ์์ ํ ์ ์์ผ๋ฉด ํ์์ ๋๊ธฐํ๊ฒ ๋๋ค. ๋ฐ์ ๊ฐ๋ฅ ์ฌ๋ถ๋ ๋ฐ์ํ๊ณ ์ ํ๋ ํธ๋์ญ์ ๊ณผ ๋ฐ์ ์ค์ธ ํธ๋์ญ์ ๊ฐ์ ์์กด์ฑ ์ฒดํฌ๋ฅผ ํตํด ์๋ก ๋ ๋ฆฝ์ ์ผ ๊ฒฝ์ฐ ๋ฐ์์ด ๊ฐ๋ฅํ๋ค๊ณ ํ๋จํ๋ค.
์์กด์ฑ ์ฒดํฌ๋ Table๊ณผ Row ๋จ์ ๋ชจ๋ ํ์ธ์ ํ๋ค. ํธ๋์ญ์ ์ ๋ ์ฝ๋๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ๋ ์ฝ๋์๋ ๋ ์ฝ๋๊ฐ ์ ๊ทผํ๋ Row๊ฐ ์ ํด์ ธ ์๊ธฐ ๋๋ฌธ์, ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ํธ๋์ญ์ ๊ณผ ์์กด ๊ด๊ณ์ธ์ง ์ฌ๋ถ๋ฅผ ํ๋จํ๋ค.
์์กด์ฑ ํ์ธ ๋์์ RedBlack Tree(RBT)์ Linked List๋ก ๊ด๋ฆฌ๊ฐ ๋๊ณ ์๋ค. Table ๋จ์๋ก RBT๋ฅผ ํ์ธํ๊ณ , Table์ด ํ์ธ๋๋ฉด, ํด๋น Table ๋ ธ๋ ๋ด์ RBT์์ Row๋ฅผ ํ์ธํ๋ค. ์ด ์์น์ Linked List๊ฐ ์กด์ฌํ๋ฉฐ, ํธ๋์ญ์ ์ ํด๋น List์ ์์กด์ฑ ๊ฐ์ฒด(TX Dependency )๋ฅผ ๋ฌ์ ๋๋๋ค.
์ด ๋์์ ํตํด ํธ๋์ญ์ ์ด ์ ๊ทผํ๋ ๋ชจ๋ Row์ ๋ํ Linked List์ TX Dependency๊ฐ ๋ฑ๋ก์ด ๋๋ค. ๋ฐ์ ์ค์ธ ํธ๋์ญ์ ์ด๋ ๋ฐ์ ๋๊ธฐ ์ค์ธ ํธ๋์ญ์ ๋ชจ๋ ์ด ๊ตฌ์กฐ ์์์ ๊ด๋ฆฌ๋๋ค.
๋ฐ์ ๊ฐ๋ฅ ์ฌ๋ถ๋ ํธ๋์ญ์ ์ ๋ชจ๋ TX Dependency๊ฐ Linked List์ front์ ์กด์ฌํ๋ ์ง์ ์ฌ๋ถ๋ก ํ์ธํ๋ค. ํ๋๋ผ๋ front์ ์กด์ฌํ์ง ์๋๋ค๋ฉด ๋ฐ์์ด ๋ถ๊ฐ๋ฅํ๊ณ , ์์ ๋ฐ์ ์ค์ธ ํธ๋์ญ์ ์ ์๋ฃ๋ฅผ ๋๊ธฐํ๊ฒ ๋๋ค.
๋ฐ์์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ชจ๋ ์์กด์ฑ ์ฒดํฌ๋ฅผ ํ์ ๋ Linked List ์์ TX Dependency ๊ฐ ๊ฐ์ฅ ์์ ๊ฒฝ์ฐ์ด๋ค.
๋ง์ฝ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด xid: 111์ธ ํธ๋์ญ์ ์ด ์์ง ๋ฐ์์ด ๋๋์ง ์์๋ค๋ฉด ๋๊ธฐํ๊ฒ ๋๋ค. ๋ฐ์์ด ์๋ฃ๋ ํธ๋์ญ์ ์ ์ Linked list์์ ์ ๊ฑฐ๊ฐ ๋๊ณ , xid: 112๊ฐ ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ๋๋ฉด ๋ฐ์ ์์ ์ ์งํํ๋ค.
๊ด๋ จ ํ๋ผ๋ฏธํฐ๋ REPLAY_THREAD_CNT ๋ก, ํด๋น ๊ฐ์ด ์ฌ๋ผ๊ฐ๋ฉด ๋ณ๋ ฌ ์ธ์
์ ์๊ฐ ๋ง์์ง๋ค. ํ์ง๋ง ์ ๋ก์ง์์ ์ ์ ์๋ฏ์ด ๊ฒฐ๊ตญ RBT ๋ด์์ Table, Row๋จ์๋ก TX Dependency๊ฐ ์ ํ๋ ค์ผ ๋ณ๋ ฌ ๋ฐ์์ด ๊ฐ๋ฅํ๋ค. ์ด๋ก ์ธํด ์ซ์๋ฅผ ์ฌ๋ฆฐ๋ค๊ณ ๋ฐ๋์ ์ฌ๋ฆฐ ์ซ์๋งํผ ์ ๋น๋กํ๊ฒ ์ฆ๊ฐํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ ๋ฐ์ํ๋ค.
APPLY ํ๋ก์ธ์ค์์ DML ๋ฐ์ ์ MAP ํ๋ผ๋ฏธํฐ๋ก ์ง์ ํ History ํ ์ด๋ธ์ ๋ฐ์๋ history ๋ฅผ ๋จ๊ธฐ๋ ๊ธฐ๋ฅ์ด๋ค.
ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๊ธฐ์กด ProSync ๋๊ธฐํ๋ฅผ ์งํํ๋ ์ธ์คํด์ค ์ด์ธ์ DML History ๊ธฐ๋ฅ ์๋์ ์ํ ์ธ์คํด์ค๊ฐ ์ถ๊ฐ๋ก ํ๋ ๋ ํ์ํ๋ค.
APPLY ํ๋ก์ธ์ค์ config ํ์ผ์ธ [inst_id]_apply1.cfg ํ์ผ์ ๋ค์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํด์ผ ํ๋ค.
RECORD_HISTORY
์ถ๊ฐ์ ์ผ๋ก ๋๊ธฐํ ๋์ ํ ์ด๋ธ์ ์ถ๊ฐ์ ์ธ column๋ค์ด ํ์ํ๋ค.
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์ด ๋จ์ง ์๋๋ค.
Redo Log๋ ๋ฌผ๋ฆฌ์ ์ธ ์์น์ ๋ํ ๋ณ๊ฒฝ๋ถ์ด ๋จ๋๋ค. RDBMS (์ฃผ๋ก Oracle, Tibero) ์์๋ row ๋ฐ์ดํฐ๊ฐ ROW_ID ๋ผ๋ ๊ณ ์ ์ ๊ฐ์ ๊ฐ์ง๊ฒ ๋๋๋ฐ, ์ด ID์๋ ๋ฐ์ดํฐ ํ์ผ์ ์์น, ํ์ผ ๋ด ๋ฐ์ดํฐ ๋ธ๋ก์ ์์น, ๋ธ๋ก ๋ด row์ ์์น ์ ๋ํ ์ ๋ณด๊ฐ ์ ์ฅ๋์ด์๋ค.
ProSync๋ ์ด ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ํด์ง ROW_ID๋ง ๊ฐ์ง๊ณ ๋ Target Database์์ ์ ํํ๊ฒ ์ด๋ค row์ธ์ง ํ๋ณํ ์๊ฐ ์๋ค. ์๋ํ๋ฉด ๋ฐ์ดํฐ ํ์ผ๋ ๋ค๋ฅผ ๊ฒ์ด๊ณ , ๋ธ๋ก ์์น๋ row ์์น ์ ๋ณด๋ ๋ชจ๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ROW_ID๋ก๋ ์๋ก ๋ค๋ฅธ Database์ row๋ฅผ ๋งค์นญ ์ํค๊ธฐ๊ฐ ์ด๋ ต๋ค.
๋ฐ๋ผ์ SUPPLEMENTAL_LOGGING์ต์ ๋ฑ์ ํตํด row ๋ฐ์ดํฐ์ ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ Redo Log์์ ํจ๊ป ๋จ๊ธฐ๊ฒ ๋๋ค. ์๋ฅผ ๋ค๋ฉด, ์ฌ์ฉ์๊ฐ Where Clause์ 1๊ฐ์ Column์ ๋ณด๋ง ๋ฃ์๋ค๊ณ ํ๋๋ผ๋, Redo Log์๋ ํด๋น Row ๋ด์ ์๋ ๋ชจ๋ Column ์ ๋ณด๊ฐ ๋ค ๋จ๋๋ก ํด์ค๋ค.
Target Database์ Apply ํ๋ก์ธ์ค๋ ์ด ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ฟผ๋ฆฌ๋ฅผ ์ฌ๊ตฌ์ถํ๋ค. ๋ค๋ง ์ด๋ ๊ฒ ๋๋ฉด, Primary key ๋ฅผ ๊ฐ์ง๊ณ ์๋ ํ ์ด๋ธ ์ ์ฅ์์ ๋ถํ์ํ ๋ค๋ฅธ ์ปฌ๋ผ ์ ๋ณด๋ค์ Where Clause์ ์ ๋ ฅํด์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค. Database์ ํ๋ ๋ณ๋ก ์ต์ ํ๋์ด ์ ์ฒ๋ฆฌ๋ ์๋ ์์ง๋ง, ๋ถํ์ํ ์ํฉ ์์ฒด๋ฅผ ๋ฐฉ์ดํ๊ธฐ ์ํด ProSync์์ Primary key๋ง ์ฌ์ฉํ ์ง์ ๋ํ ์ฌ๋ถ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๊ด๋ฆฌํ๋ค.
USE_PK_FOR_WHERE
์ด ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ๋ฉด Primary key๊ฐ ์๋ ํ
์ด๋ธ์ ๋ํ Update๋ Delete ์์ Where Clause์๋ Primary key๋ง ์
๋ ฅํ๊ฒ๋๋ค.
์ฃผ์
Data Conflict Rule(DCR) ๊ด๋ จ
์ต์
์ ์ฌ์ฉํ ๊ฒฝ์ฐ USE_PK_FOR_WHERE ์ต์
์ ๋ฌด์๋๋ค. ๋๊ธฐํ์ ๋
ผ๋ฆฌ ๊ตฌ์กฐ์ Conflict๋ฅผ ์ฐพ๋ ๊ฒ์ด ์ฐ์ ์ด๊ธฐ ๋๋ฌธ์ ProSync์์ ๋ ์ต์
๊ฐ์ ์ด์ ๊ฐ์ ์ฐ์ ์์๋ฅผ ๋๋ค.
ํ ์ด๋ธ, ์ปฌ๋ผ ๋งคํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํ
ํ
์ด๋ธ, ์ปฌ๋ผ ๋งคํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ $PRS_HOME/config ๋๋ ํฐ๋ฆฌ์ Apply config file์ธ '[INST_ID]_apply1.cfg'๋ฅผ ์ค์ ํ๋ค.
๋ค์์ ์ค์ ํด์ผ ํ ํ๋ผ๋ฏธํฐ์ ๋ํ ์ค๋ช ์ด๋ค.
๊ธฐ๋ณธ MAP ํ๋ผ๋ฏธํฐ์ Source DB์ ํน์ ํ ์ด๋ธ์ Target DB์ ํน์ ํ ์ด๋ธ๋ก ๋๊ธฐํํ๊ธฐ ์ํ ๊ท์น์ ์ค์ ํ๋ค.
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)
IUD_TIME
TIMESTAMP ์ด๋ฉฐ, DML ์ด ์ํ ๋์ด history ๊ฐ ๋จ์ ์๊ฐ์ ๋ปํ๋ค.
CLOB
ํด๋น ์ธ์คํด์ค์์ 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 ๋ก ์ค์ ํด ์ฃผ์ด์ผ ํ๋ค.
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๊ฐ ๋จ๋๋ค.
SYNC OPTION
TABLE : ๋๊ธฐํ ํ ํ ์ด๋ธ์ ์ง์ ํ๋ ๊ฒฝ์ฐ ์ค์ ํ๋ค. OBJECT : ๋๊ธฐํ ๋์์ด ์๋ ์ค๋ธ์ ํธ์ DDL ๋งคํ์ ์ง์ ํ๋ ๊ฒฝ์ฐ ์ค์ ํ๋ค. EXCLUDE : ๋๊ธฐํ๋ฅผ ์ ์ธํ ํ ์ด๋ธ์ ์ง์ ํ๋ ๊ฒฝ์ฐ ์ค์ ํ๋ค.
SOURCE_USER
๋๊ธฐํ ํ Source DB ํ ์ด๋ธ์ ์ฌ์ฉ์ ์ด๋ฆ์ ์ค์ ํ๋ค.
SOURCE_TABLE
๋๊ธฐํ ํ Source DB ํ ์ด๋ธ์ ํ ์ด๋ธ ์ด๋ฆ์ ์ค์ ํ๋ค.
SOURCE_COLUMNS
๋๊ธฐํ ํ Source DB ํ ์ด๋ธ์ ์ปฌ๋ผ๋ค์ ์ค์ ํ๋ค. (Column1, Column2, Column3)๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ค์ ํ๋ค.
COLUMN FILTERING OPTION
๋ค์์ MAP ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํด์ ๋๊ธฐํ ๋์ ๋ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ ์ด๋ค.
๋ค์์ Source DB์ PROSYNC1 ์ฌ์ฉ์์ T1 ํ ์ด๋ธ์ Target DB์ PROSYNC2 ์ฌ์ฉ์์ T2 ํ ์ด๋ธ๋ก ๋๊ธฐํํ๋ ์์ ์ด๋ค.
๋ค์์ Source DB์ PROSYNC1 ์ฌ์ฉ์์ T1 ํ ์ด๋ธ์ ์ปฌ๋ผ C1, C2, C3๊ฐ ์๊ณ , ์ด์ค C1์ C2 ์ปฌ๋ผ๋ง Target DB์ PROSYNC2 ์ฌ์ฉ์์ T2 ํ ์ด๋ธ์ C1, C2 ์ปฌ๋ผ๊ณผ ๋๊ธฐํํ๋ ์์ ์ด๋ค.
๋ค์์ Source DB์ PROSYNC1 ์ฌ์ฉ์์ T1 ํ ์ด๋ธ์ ์ปฌ๋ผ C1, C2, C3๊ฐ ์๊ณ , ์ด์ค C1์ C2 ์ปฌ๋ผ๋ง Target DB์ PROSYNC2 ์ฌ์ฉ์์ T2 ํ ์ด๋ธ์ D1, D2 ์ปฌ๋ผ๊ณผ ๋๊ธฐํํ๋ ์์ ์ด๋ค.
๋๊ธฐํ ํ ์ด๋ธ ์ฌ์ฉ์ฌ๋ถ๋ฅผ ์ค์ ํ๋ค.
๋๊ธฐํ ํ ์ด๋ธ์ ์ง์ ํ๋ ๊ฒฝ์ฐ SYNC OPTION์ TABLE์ ์ค์ ํ๋ค.
๋๊ธฐํ ๋์์ด ์๋ ์ค๋ธ์ ํธ์ DDL ๋งคํ์ ์ง์ ํ๋ ๊ฒฝ์ฐ SYNC OPTION์ OBJECT๋ฅผ ์ค์ ํ๋ค.
๋๊ธฐํ ๋์ ํ ์ด๋ธ์ ๋ํด์๋ ์์ ์ค๋ช ํ TABLE ๊ท์น์ ๋ฐ๋ผ DDL ๋งคํ์ด ์ง์๋๋ฉฐ, TABLE ๊ท์น์ด ๋ช ์๋์ง ์์ ๊ฒฝ์ฐ ๋งคํ ์์ด ๋๊ธฐํ๋๋ค. ๋๊ธฐํ ๋์์ผ๋ก ์ค์ ํ ์ ์๋ INDEX ๋ฑ์ OBJECT๋ ๋๊ธฐํ ๋์์ด ์๋ ํ ์ด๋ธ์ ๋ํด์๋ง ํด๋น ๊ท์น์ผ๋ก ์ค์ ํ ์ ์๋ค. OBJECT ๊ท์น์ ๋ํด์๋ ๋ฐ๋์ ์์ ํํ๋ก๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. OBJECT_NAME์ ์์ผ๋ ์นด๋๋ก '%'๋ฅผ ์ ๋ ฅํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ [SOURCE_USER]์ ์์์ OBJECT [SOURCE_USER].[OBJECT_NAME]์ [TARGET_USER].[OBJECT_NAME]์ DDL ๋งคํํ์ฌ DDL์ ๋๊ธฐํํ๋ค.
๋๊ธฐํ๋ฅผ ์ ์ธํ ํ ์ด๋ธ์ ์ง์ ํ๋ ๊ฒฝ์ฐ SYNC OPTION์ EXCLUDE๋ฅผ ์ค์ ํ๋ค.
Source DB์ PROSYNC ์ฌ์ฉ์์ SKIP ํ ์ด๋ธ์ ์ ์ธํ๊ณ ๋๊ธฐํ ํ ๋ ๋ค์๊ณผ ๊ฐ์ด '[INST_ID]_apply1.cfg'์ MAP ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํ๋ค.
COLUMN FILTERING OPTION์ ์ฌ์ฉํ์ฌ ์ผ๋ถ ์ปฌ๋ผ์ ๋ํ ๋๊ธฐํ๋ฅผ ์ ๊ฑฐํ ์ ์๋ค. ๋ค๋ง Constraint๊ฐ ๊ฑธ๋ ค์๋ ์ปฌ๋ผ์ ๋ํด์๋ ํด๋น ์ต์ ์ ์ฌ์ฉํ ์ ์๋ค.
๋ค์๊ณผ ๊ฐ์ด COLUMN FILTERING OPTION์ ์ฌ์ฉํ ์ ์๋ค.
Source DB์ PROSYNC1 ์ฌ์ฉ์์ T1 ํ ์ด๋ธ์ ์ปฌ๋ผ C1, C2, C3๊ฐ ์๊ณ , ์ด์ค C1 ์ปฌ๋ผ๋ง ์ ์ธํ๊ณ Target DB์ PROSYNC2 ์ฌ์ฉ์์ T2 ํ ์ด๋ธ์ C2, C3 ์ปฌ๋ผ๊ณผ ๋๊ธฐํํ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด '[INST_ID]_apply1.cfg'์ MAP ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํ๋ค.
๋๊ธฐํ ์ ์ถฉ๋ ์ํฉ์์ Source DB์ ์ ํฉ์ฑ ๊ธฐ์ค์ ๋ง์ถ ์ง, Target DB์ ์ ํฉ์ฑ ๊ธฐ์ค์ ๋ง์ถ ์ง, ์๋๋ฉด ํน์ ์ปฌ๋ผ์ Min ํน์ Max ๊ฐ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ๋ง์ถ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ์ต์ ์ด๋ค. ํ์ ์ต์ ์ ์๋๋ฉฐ ์ฃผ๋ก ์๋ฐฉํฅ ๋๊ธฐํ์ ์ฌ์ฉ๋๋ค.
์ ํด์ง Rule์ ๋ฐ๋ผ DML ๋ค์ด ๋ณ๊ฒฝ๋๊ฑฐ๋ ์๋ต ๋๋ค.
๋ค์์ RESOLVE OPTION์ ์ค์ ํ ์ ์๋ RESOLVE_RULE์ ์ข ๋ฅ์ด๋ค.
SOURCE
Source ํ ์ด๋ธ์ Row๋ฅผ ์ฐ์ ์ผ๋ก ํ๋ค.
TARGET
Target ํ ์ด๋ธ์ Row๋ฅผ ์ฐ์ ์ผ๋ก ํ๋ค.
MAX(COLUMN_NAME)
MAX์ MIN RESOLVE_RULE์ ๊ฒฝ์ฐ์๋ ๋ฐ๋์ DEFAULT OPTION์ ์ค์ ํด์ผ ํ๋ค. ์ปฌ๋ผ ๊ฐ์ด null์ธ ๊ฒฝ์ฐ์ ์ค์ ํ DEFAULT ๊ฐ์ผ๋ก ๋น๊ตํ๋ค. ๋จ, ๋๊ธฐํ๋ ์ค์ ํ DEFAULT ๊ฐ์ด ์๋๋ผ ์ค์ ์ปฌ๋ผ ๊ฐ์ผ๋ก ์ํํ๋ค.
UPDATE์ ๋๊ธฐํํ๋ ๊ฒฝ์ฐ MIN, MAX Rule์ ์ฌ์ฉํ๋ค๋ฉด ๋น๊ต ๋์ ์ปฌ๋ผ์ ๋ณ๊ฒฝ ์ ๋ฌด์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋น๊ต๋ฅผ ์ํํ๋ค. ๋น๊ต ๋์ ์ปฌ๋ผ์ด ๋ณ๊ฒฝ๋์๋ค๋ฉด ๋ณ๊ฒฝ๋ ๊ฐ, ๋ณ๊ฒฝ๋์ง ์์๋ค๋ฉด ๊ธฐ์กด ๊ฐ์ผ๋ก Target DB์ row์ ๋น๊ต๋ฅผ ์งํํ๋ค. ๋น๊ต ๋์ ์ปฌ๋ผ์ด NULL์ธ ์ํ์์ UPDATE๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ๋น๊ต๊ฐ ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋น๊ต ์์ด Source DB ๊ฐ์ ์ฐ์ ์ผ๋ก DML์ ์ํํ๋ค.
์๋ฅผ ๋ค์ด DB1๊ณผ DB2๊ฐ์ ์๋ฐฉํฅ ๋๊ธฐํํ๋ ๊ฒฝ์ฐ DB1์ PROSYNC ์ฌ์ฉ์์ T1 ํ ์ด๋ธ์ DB2์ PROSYNC ์ฌ์ฉ์์ T1 ํ ์ด๋ธ๋ก ๋๊ธฐํํ๊ณ , column c3์ ๊ฐ์ด ๋ ํฐ ๊ฐ์ ์ฐ์ ํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ ๋ง์ง๋ง์ผ๋ก INSERTํ ๋ DCR ์ปฌ๋ผ์ธ c3์ null์ด ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ 10์ผ๋ก ๋น๊ตํ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ๋ค.
SKIP OPTION์๋ ๋๊ธฐํํ์ง ์๊ธธ ์ํ๋ row๋ค์ ํน์ ํ๊ธฐ ์ํ ์กฐ๊ฑด์ ์ค์ ํ๋ค.
TIBERO
CHAR, VARCHAR, NUMBER, TIME, DATE, TIMESTAMP
ORACLE
CHAR, VARCHAR, NUMBER
POSTGRESQL
CHAR, VARCHAR
EQUAL (=), NOT_EQUAL (!=)
NUMBER, TIME, DATE, TIMESTAMP
EQUAL (=), NOT_EQUAL (!=), INEQUALITY (<, <=, >, >=)
SKIP OPTION์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ๋ค. SKIP_CONDITION์ด True์ธ Row๋ค์ ๋๊ธฐํํ์ง ์๋๋ค.
Source DB์ PROSYNC ์ฌ์ฉ์์ T1 ํ ์ด๋ธ์ Target DB์ PROSYNC ์ฌ์ฉ์์ T1 ํ ์ด๋ธ๋ก ๋๊ธฐํํ๊ณ , column c1์ ๊ฐ์ด 'example'์ด ์๋๋ฉด DML์ skipํ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด MAP ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํ๋ค.
์์ ์กฐ๊ฑด์ ์ถ๊ฐ๋ก Source DB์ PROSYNC ์ฌ์ฉ์์ T2 ํ ์ด๋ธ์ Target DB์ PROSYNC ์ฌ์ฉ์์ T2 ํ ์ด๋ธ๋ก ๋๊ธฐํํ๊ณ , column c2์ ๊ฐ์ด 'example2'์ด๋ฉด DML์ skipํ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด MAP ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํ๋ค.
MAP=([SYNC OPTION] SOURCE_USER.SOURCE_TABLE [SOURCE_COLUMNS]
[COLUMN FILTERING OPTION],
[TARGET_DATABASE.]TARGET_USER.TARGET_TABLE [TARGET_COLUMNS]
[RESOLVE OPTION] [SKIP OPTION]))MAP=(TABLE PROSYNC1.T1, PROSYNC2.T2)MAP=(TABLE PROSYNC1.T1(C1, C2), PROSYNC2.T2)MAP=(TABLE PROSYNC1.T1(C1, C2), PROSYNC2.T2(D1, D2))MAP=(TABLE [SOURCE_USER].[SOURCE_TABLE]... )MAP=(OBJECT [SOURCE_USER].[OBJECT_NAME], [TARGET_USER].[OBJECT_NAME])MAP=(EXCLUDE [SOURCE_USER].[SOURCE_TABLE]...)MAP=(TABLE DEFAULT EXCLUDE PROSYNC.SKIP TABLE TIBERO.T1)MAP=(... EXCEPT FOR ([COLUMN_NAME], ..., [COLUMN_NAME])...)MAP=(TABLE PROSYNC1.T1 EXCEPT FOR (C1), PROSYNC2.T2)MAP=(... RESOLVE BY [RESOLVE_RULE] ...)MAP=(... RESOLVE BY MAX(COLUMN_NAME) DEFAULT (COLUMN_VALUE) ...)MAP=(TABLE PROSYNC.T1, PROSYNC.T1 RESOLVE BY MAX(c3) DEFAULT (10))MAP=(... SKIP=(SKIP_CONDITION))MAP=(TABLE PROSYNC.T1, PROSYNC.T1 SKIP=(c1!="example"))MAP=(TABLE PROSYNC.T1, PROSYNC.T1 SKIP=(c1!="example")
TABLE PROSYNC.T2, PROSYNC.T2 SKIP=(c2="example2"))์ฃผ์
๋ค์ ํค์๋๋ MAP Rule ์ ์์ฝ์ด์ด๋ฏ๋ก table ๋ฑ ๋์์ ๋ช ์ํ๋ ์ฉ๋๋ก ์ฌ์ฉ ๋ถ๊ฐํ๋ค.
"ALL" "BY" "DEFAULT" "EXCEPT FOR" "EXCLUDE" "FILTER" "INCLUDE" "MAX" "MIN" "RESOLVE" "SOURCE" "SKIP" "SYNC" "TABLE" "TARGET" "TYPE" "OBJECT" "INSERT" "DELETE" "UPDATE"
์ฃผ์
DB ๋ฒ์ , ๋นํ์ค ์ฟผ๋ฆฌ ๋ฑ์ผ๋ก ์ธํด DDL์ OBJECT์ ์ธ์์ด ๋ถ๊ฐ๋ฅํ ์ ์๋ค. ๋ฐ๋ผ์ MAP ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํด์ DDL ๋งคํ์ ํ ๋ TABLE๊ณผ OBJECT์ schema๋ฅผ ๋ช ์ํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
๋ํ, ๋๊ธฐํ ํ ์ด๋ธ T1์ ๋ํด DROP TABLE T1 ์คํ ํ CREATE TABLE T1๋ฅผ ์คํํ ๋ T1์ OBJECT๋ก์จ ๋งคํ๋ ๊ฒ์ด๊ณ , ์์ฑ๋ ์ปฌ๋ผ์ ๋๊ธฐํ ํ ์ด๋ธ ์ปฌ๋ผ MAP ํ๋ผ๋ฏธํฐ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
ProSync์ ๋ฐ์ดํฐ ํ๋ฆ๋๋ฅผ ์์ธํ ์ดํดํ๊ณ , ์ด๋ฅผ ํตํด Memory ์ฌ์ฉ๋ ์กฐ์ ๋ฐฉ์์ ์๋ดํ๋ค.
๋ฐ์ดํฐ๊ฐ ์ฒ์ ์์ฑ๋๋ ์์น๋ Source DB์ Redo Log์ด๋ค. Redo Log์์ ๋ฐ์๋ ๋ฐ์ดํฐ๋ฅผ Extract ๊ฐ ์ถ์ถํ์ฌ Chunk ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฌํ๋ค.
์ ์ฌ๋ ๋ฐ์ดํฐ๋ TCP Socket์ ํตํด ์ ์ก์ด ๋๋ค. Non Blocking ํต์ ์ด๊ธฐ ๋๋ฌธ์ ์ ์ฒด ๋ฐ์ดํฐ์ ๋ํ ์ ์ก์ด ์คํจํ๋ฉด, ์ดํ์ ๋ฐ์ดํฐ๋ค์ Non Blocking Queue์ ์์ด๊ฒ ๋๋ค. ์ด Queue์ ์์ธ ๋ฐ์ดํฐ๋ ์ปค๋๋ก๋ถํฐ ๋ฐ๋์ชฝ TCP Recv Buffer๊ฐ ๋น์ด์๋ค๋ ์ ํธ๊ฐ ์ฌ ๋, ์์๋๋ก ๋ค์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ฒ ๋๋ค.
Apply๋ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๊ฐ์ฒดํ (์ญ์ง๋ ฌํ) ํ์ฌ TX_HASH์ ์์ด๊ฒ๋๋ค. xid ๋ ํธ๋์ญ์ ๊ณ ์ ์ id ๋ฅผ ์๋ฏธํ๋ฉฐ, ACID๋ฅผ ์ง์ผ์ฃผ๊ธฐ ์ํด ํธ๋์ญ์ ์ ์ปค๋ฐ๊น์ง ์ด ์์น์์ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ๋ณด๊ดํ๋ค. ํธ๋์ญ์ ์ ์ปค๋ฐ์ด ๋ค์ด์ค๋ฉด ํด๋น ํธ๋์ญ์ ์ Target Database์ ๋ฐ์์ด ๊ฐ๋ฅํ ์ํ๋ก ํ๋จํ๊ณ Replay Queue๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ค๋ค.
Wait Queue์ ์์ธ ๋ฐ์ดํฐ๋ ํธ๋์ญ์ ๋ค์ด ์ปค๋ฐ๋ ์์์ ๋ง๊ฒ Target Database๋ก ๋ฐ์์ด ๋๋ค. ์ด ๋ ๋ฐ์ ์ค์ธ ํธ๋์ญ์ ๊ณผ ๋ฐ์ ๋๊ธฐ ์ค์ธ ํธ๋์ญ์ ์ด ์์ ํ ๋ฐ, ์ด๋ค๊ฐ์ ์์กด์ฑ ๊ฒ์ฌ๋ฅผ ํตํ์ฌ ์๊ฐ ์์์ ๋ง๊ณ , ์์กด์ฑ์ด ์๋ ํธ๋์ญ์ ๋ค์ ๋ณ๋ ฌ ์ฒ๋ฆฌํ์ฌ ์ฑ๋ฅ์ ๋์ธ๋ค.
TX_HASH ์ ๋ฐ์ดํฐ๊ฐ ๊ณ์ ์์ธ๋ค๋ฉด Out of Memory ๋ฅผ ํผํ ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ํน์ ์๊ณ์น๋ฅผ ๋์ด๊ฐ ๊ฒฝ์ฐ Part File์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ ํ์ผ์ ์์ฑํ์ฌ ์ด ์์น๋ก ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ฒจ์ค๋ค.
๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธฐ๋ ๊ธฐ์ค์ ํ์ฌ TX_HASH
๋๊ธฐํํ์ง ์์ Source DB ํ ์ด๋ธ์ ์ปฌ๋ผ๋ค์ ์ค์ ํ๋ค.
TARGET_DATABASE
๋๊ธฐํ์ํฌ Target DB์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ์ ์ค์ ํ๋ค.
TARGET_USER
๋๊ธฐํ์ํฌ Target DB ํ ์ด๋ธ์ ์ฌ์ฉ์ ์ด๋ฆ์ ์ค์ ํ๋ค.
TARGET_TABLE
๋๊ธฐํ์ํฌ Target DB ํ ์ด๋ธ์ ํ ์ด๋ธ ์ด๋ฆ์ ์ค์ ํ๋ค. ์ธ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ฐ ์ ์ ์ค๋ช ์ ์ฐธ๊ณ ํ๋ค.
RESOLVE OPTION
๋๊ธฐํ์ํฌ Target DB ํ ์ด๋ธ์ ํ ์ด๋ธ ์ค DCR Rule๋ฅผ ์ ์ฉํ ํ ์ด๋ธ์ ์ด๋ฆ์ ์ค์ ํ๋ค. ์ธ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ฐ ์ ์ ์ค๋ช ์ ์ฐธ๊ณ ํ๋ค.
SKIP OPTION
๋๊ธฐํ ํ ๋ ๋๊ธฐํ๋ฅผ ํ์ง ์์ row์ ์กฐ๊ฑด์ ์ค์ ํ๋ค.
TARGET_COLUMNS
๋๊ธฐํ์ํฌ Target DB ํ ์ด๋ธ์ ์ปฌ๋ผ๋ค์ ์ค์ ํ๋ค. SOURCE_COLUMNS์ ์์๋๋ก ๋งคํ๋๊ณ ์ปฌ๋ผ ๊ฐ์๋ ์ผ์นํด์ผ ํ๋ค. (Column1, Column2, Column3)๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ค์ ํ๋ค.
ํด๋น ์ปฌ๋ผ์ ๊ฐ์ด ๋ ํฐ Row๋ฅผ ์ฐ์ ์ผ๋ก ํ๋ค.
๋ฐ๋์ DEFAULT OPTION์ ์ค์ ํด์ผ ํ๋ค.
MIN(COLUMN_NAME)
ํด๋น ์ปฌ๋ผ์ ๊ฐ์ด ๋ ์์ Row๋ฅผ ์ฐ์ ์ผ๋ก ํ๋ค.
๋ฐ๋์ DEFAULT OPTION์ ์ค์ ํด์ผ ํ๋ค.
CHAR, VARCHAR, NUMBER
์ด์ ๋ํ ๊ธฐ์ค์ด ๋๋ ํ๋ผ๋ฏธํฐ๊ฐ TX_HASH_SIZE ํ๋ผ๋ฏธํฐ์ด๋ค. TX_HASH_SIZE๋ผ๋ ์๊ณ์น๋ณด๋ค ๋ ๋ง์ด ๋ฐ์ดํฐ๊ฐ ์์ด๊ฒ ๋ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ ๋์์ด ์ํ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
TX_HASH_SIZE ํ๋ผ๋ฏธํฐ๋ณด๋ค ํฐ ๊ฒฝ์ฐPart File์ ๋ฐ์์ด ์๋ฃ๋๋ฉด ์ ๊ฑฐ๊ฐ ๋๋ฉฐ, ๋ฐ์์ด ๋๊ธฐ ์ ๊น์ง Disk์ ๋จ๋๋ค. ์ค์ ํธ๋์ญ์ ๋ฐ์ ์์ ์๋ Part File๋ก ๋ด๋ ค๊ฐ DML ๋ฐ์ดํฐ๋ค์ด ์๊ฐ ์ ๋ ์์๊ธฐ ๋๋ฌธ์, ํ์ผ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ๋ฐ์ํ ํ ๋ฉ๋ชจ๋ฆฌ์ ๋จ์ ํธ๋์ญ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํ๋ค.
ProSync๋ ACID๋ฅผ ์ง์ผ์ฃผ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ์์์ ๋ง๊ฒ ๋ฐ์ํด์ผ ํ๋ค. ์ฆ, ์์ ํธ๋์ญ์ ์ด ๋ฐ์๋์ง ์๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ ๋ฐ์๋ ์ ์๋ค๋ ์๋ฏธ์ด๋ค. ๋ฐ๋ผ์ Target Database์ ์ฅ์ ๊ฐ ๋ฐ์ํ์ฌ ํธ๋์ญ์ ์ฒ๋ฆฌ๊ฐ ์ง์ฐ๋๋ค๋ฉด ๊ทธ๋งํผ Queue์๋ ๋ฐ์ดํฐ๊ฐ ์์ด๊ฒ ๋๋ค.
Queue์ ์๊ตฌ์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์์ด๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ProSync๋ Queue ๋ด์์ ๋๊ธฐ ํน์ ๋ฐ์ ์ค์ธ ํธ๋์ญ์ ๋ค์ ํฌ๊ธฐ๋ฅผ ๋ชจ๋ ํ์ธํ๋ค. ์ด ํฌ๊ธฐ๊ฐ ๋๋ฌด ํฌ๋ค๋ฉด Memory ํ ๋น์ ๋ฉ์ถฐ์ผ ํ๋ค.
Memory ํ ๋น์ ๋ฉ์ถ๊ธฐ ์ํด ProSync๋ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ์ ์ผ๋ก ์์ฐ๋๋ ๊ฒ์ ๋ง๋๋ค. ์ฆ, Extract ์์ ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์์ ์ผ๋ก ์ฐจ๋จํจ์ผ๋ก์จ, ํ์ฌ ๋ณด์ ์ค์ธ ๋ฐ์ดํฐ๊ฐ ์ผ์ ์์ค ์ด์ ์ฒ๋ฆฌ๋ ๋๊น์ง ๋๊ธฐ ์ํ๋ฅผ ์ ์งํ๋๋ก ๊ฐ์ ํ๋ ๋ฐฉ์์ด๋ผ ๊ณ ๋ณผ ์ ์๋ค.
Extract๋ ์์์ ์ค๋ช ํ ๋ด์ฉ๋๋ก Non Blocking Queue์ ๋ฐ์ดํฐ๋ฅผ ์๋ค๊ฐ ์ค์ ์ถ์ถ์ ๋ฉ์ถค์ผ๋ก์จ ์ถ๊ฐ์ ์ธ ๋ฐ์ดํฐ ์์ฐ์ ๋ฉ์ถ๊ฒ ๋๋ค.
์๊ณ์น์ ํด๋นํ๋ ํ๋ผ๋ฏธํฐ๋ ์๋์ ๊ฐ๋ค.
MEMORY_CTRL_STOP_SIZE Wait Queue์ ์ด ํฌ๊ธฐ ์ด์ ๋งํผ์ ๋ฐ์ดํฐ๊ฐ ์์ด๋ฉด Socket ์ผ๋ก ๋ถํฐ ์ถ๊ฐ์ ์ผ๋ก ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ค.
MEMORY_CTRL_RESUME_SIZE Wait Queue์ ์ด ํฌ๊ธฐ ์ดํ๋งํผ ๋ฐ์ดํฐ๊ฐ ์ค์ด๋ค๋ฉด, Socket ์ผ๋ก ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ฐ๋๋ค.
๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.
Active-Active Cluster์ธ RDBMS๋ค์ Physical Disk๋ฅผ ๊ณต์ ํ๊ณ ์๋ค. ๋ฐ๋ผ์ ๊ฐ์ ๊ณต๊ฐ์ ์๋ก ์์์ ์ ํฉํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ค. Redo Log๋ ์๋ก ๋ค๋ฅธ ๊ณณ์ ์์ฑํ๋๋ผ๋ Change Data๋ค์ ์๊ฐ์ ์์์ ๋ง๊ฒ ๋ ์์ฑ์ด ๋๋ค. ProSync ์ ์ฅ์์ ๋ณด๋ฉด ์๋ก ๋ค๋ฅธ ์์น์ ๋จ์ Redo Log๋ค์ ๋ชจ์ ์ง๋ ฌํ๋ฅผ ํ๋ฉด ๊ฒฐ๊ตญ DB Time ์์๋๋ก ๋ฐ์ดํฐ ์ ๋ ฌ์ด ๊ฐ๋ฅํ๋ค๋ ์๋ฏธ์ด๋ค.
๋ฐ๋ผ์ ProSync์ Apply ์ ์ฅ์์ ์ถ์ถ์ด Cluster์ธ์ง ์๋์ง๋ ๊ด์ฌ์ฌ๊ฐ ์๋๋ค. ์ด์ฐจํผ DB Time๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ด ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ผ๋ฉด ๋จ์ํ ํ ์ค๋ก ์ธ์ ๋๊ณ ํ๋์ฉ ์ฟผ๋ฆฌ๋ก ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋๋ค. ๋ค๋ง ๋ฌธ์ ๋ ์ฅ์ ์ํฉ์ด๋ ์ง์ฐ ์ํฉ์์ ๋ฐ์ํ๋ค.
๋ง์ฝ์ ํ์ชฝ ๋ ธ๋์์ ์๋ฌด๋ฐ ๋ถํ๊ฐ ์๊ฑฐ๋ ์ฅ์ ๋ก ๋ฉ์ถฐ๋ฒ๋ฆฌ๊ฒ ๋๋ฉด Redo Log ์์ฑ์ด ๋ฉ์ถ๊ฒ ๋๋ค. ์ฝ์ ๊ฒ์ด ์๋ Extract ํ๋ก์ธ์ค๋ ์๋ฌด๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์๊ฐ ์๋ค. ์ด๋ ๊ฒ ๋๋ฉด Apply ํ๋ก์ธ์ค ์ ์ฅ์์ ํ์ฌ Cluster ์ค ํ๋๊ฐ ์ฅ์ ๊ฐ ๋์ ๋ชป ๋ณด๋ด๊ณ ์๋ ๊ฒ์ธ์ง, ๋ถํ๊ฐ ์์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ชป ๋ณด๋ด๋ ๊ฒ์ธ ์ง ํ์ธํ ๋ฐฉ๋ฒ์ด ์๋ค.
๋ฐ๋ผ์ Extract ์์๋ ๋ฐ์ํ์, ์ฅ์ ๊ฐ ๋ฐ์ํ๋ค๋ ๋ฉ์์ง๋ฅผ TCP Socket์ผ๋ก ์ ๋ฌํด์ฃผ๊ณ , ๋ถํ๊ฐ ์๋ ์ํฉ์ ๋๋นํ์ฌ ProSync์ฉ Dummy Table์ ๊ฐ์ ๋ก ๋ถํ๋ฅผ ๋ง๋ค์ด ๋ฐ์ดํฐ๋ฅผ ์์ฐํด์ ์ ๋ฌํด์ค๋ค.
์ด ๊ณผ์ ์ ํตํด Applyํ๋ก์ธ์ค๋ ์๋ก ๋ค๋ฅธ Cluster Node์ ๋ฐ์ดํฐ๋ค์ ํญ์ ์ ๋ ฌํ ์ ์๋ค. ํ์ง๋ง ์ ๋ ฌ์ ํ๊ธฐ ์ํด์ ์ ๋ ฌ์ ์ํ ๊ณต๊ฐ์ด ํ์ํ๋ฉฐ, ์ด ์์น๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
์์ ๊ฐ์ด Extract๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ์ํฉ (Active Cluster) ์์ ๊ฐ Extract ๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ ๋จผ์ Merge Queue์ ์์ ๋๋๋ค. ์์ธ ๋ฐ์ดํฐ๊ฐ ์ง๋ ฌํ๊ฐ ๋๋ ค๋ฉด ๋ชจ๋ Extract ๋ณ ๋ฐ์ดํฐ๊ฐ 1๊ฐ๋ผ๋ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋๊น์ง Merge Queue์ ๋ฐ์ดํฐ๊ฐ ์์ด๊ฒ ๋๋ค.
๋ค๋ง ๋คํธ์ํฌ ์ฅ์ ๋ ๋ชจ์ข ์ ์ด์ ๋ก ํ์ชฝ์์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ ํ์๊ฐ ๋งค์ฐ ์ง์ฐ๋ ์ ์๊ธฐ ๋๋ฌธ์, ๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ๊ธฐ์๋ ์ถ๊ฐ์ ์ธ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค์ง ๋ชปํ๊ฒ TCP Socket์ผ๋ก ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ ๋์์ด ์ฌ์ฉ๋๋ค.
์ฌ๊ธฐ์ ์ฌ์ฉ๋๋ ํ๋ผ๋ฏธํฐ๋ ์๋์ ๊ฐ๋ค.
MERGE_BLOCK_CNT ํน์ ๋ ธ๋๋ก๋ถํฐ ๋ฐ์ดํฐ๊ฐ ์ด ๊ฐฏ์ ์ด์๋งํผ ์์ด๋ฉด ํด๋น TCP Socket์ ๋ง๋๋ค.
MERGE_RESUME_CNT ํน์ ๋ ธ๋๋ก๋ถํฐ ๋ฐ์ดํฐ๊ฐ ์ด ๊ฐฏ์ ๋ณด๋ค ์๋ค๋ฉด ํด๋น TCP Socket์ ๋ค์ ์ด์ด์ค๋ค.
๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
Extract ๋ณ๋ก ์ฐ๊ฒฐ์ด ๋ฐ๋ก ์กด์ฌํ๋ฏ๋ก ์ด์ ๊ฐ์ด ๋ณ๋๋ก ๊ด๋ฆฌํ๊ฒ ๋๋ค.
์ฃผ์
Wait Queue ๊ด๋ จ
Replay ์ชฝ์์ ๋ง์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค. ๋ฐ๋์ Wait Queue๋ง ์ฌ์ฉํ๋ ๊ฒ์ ์๋๋ฉฐ, ์ฌ๋ฌ ์ข ๋ฅ์ Queue๋ Tree ๋ฑ์ด ์ฌ์ฉ๋๋๋ฐ, ์ฌ๊ธฐ์ ์ค๋ช ์ ์ํด ๋ชจ๋ Wait Queue๋ก ์ถ์ํํ์ฌ ์ค๋ช ํ๋ค.
ProSync๊ฐ ๋๊ธฐํ ๊ณผ์ ์์ DML์ Target DB์ ๋ฐ์ ์ค ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์๋ ProSync๊ฐ ํด๋น DML์ ๋ํ ๋ฐ์์ ์ฑ๊ณตํ ๋ ๊น์ง ์ฌ์๋ํ๊ฒ ๋๋ค.
ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ํน์ ํ ์๋ฌ์ ๋ํด ์ฌ์๋ํ๋ ๋์ ํด๋น DML์ ๋ํ ๋ฐ์์ ์๋ตํ๊ณ ์ดํ์ ๋๊ธฐํ๋ฅผ ์งํํ๋๋ก ์ค์ ํ ์ ์๋ค.
๋ํ DISCARD ๊ธฐ๋ฅ์ด ๋ฐ์ํ ์ด๋ ฅ์ ๊ธฐ๋กํ๋ Discard file ์ ์์ฑํ ์ ์๋ค.
ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์ config ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ Parameter๋ฅผ ์ค์ ํด์ผ ํ๋ค.
DISCARD_YN=[Y|N]
DISCARD_EC=2 10007 8033
DISCARD_FILE_YN=[Y|N]
DISCARD_FILE_DIR=/directory/to/save/file
DISCARD_FILE_SIZE=200M
DISCARD_BACKUP_DIR=/directory/to/save/backup/file
DISCARD_BACKUP_SIZE=10GDISCARD_YN
DDL๋ DML๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Target DB์ ๋ฐ์ ์ค ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์๋ ProSync๊ฐ ํด๋น DDL์ ๋ํ ๋ฐ์์ ์ฑ๊ณตํ ๋ ๊น์ง ์ฌ์๋ํ๊ฒ ๋๋ค.
ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ฌ์๋ํ๋ ๋์ ํด๋น DDL์ ๋ํ ๋ฐ์์ ์๋ตํ๊ณ ์ดํ์ ๋๊ธฐํ๋ฅผ ์งํํ๋๋ก ์ค์ ํ ์ ์๋ค.
๋ํ DISCARD ๊ธฐ๋ฅ์ด ๋ฐ์ํ ์ด๋ ฅ์ ๊ธฐ๋กํ๋ Discard file ์ ์์ฑํ ์ ์๋ค.
ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์ config ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ Parameter๋ฅผ ์ค์ ํด์ผ ํ๋ค.
๋ณธ ์ฅ์์๋ Apply ํ๋ก์ธ์ค์ ์ฃผ์ ๊ธฐ๋ฅ๋ค์ ์ค๋ช ํ๋ค. Apply ํ๋ก์ธ์ค ์ด์์ ์ํ ํต์ฌ์ ์ธ ์์๋ค๋ก์ ์ํํ ์ด์์ ๋์์ด ๋ ์ ์๋ค.


DDL_DISCARD_FILE_SIZE
discard ํ์ผ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ ํ๋ผ๋ฏธํฐ.
์ ํ: int32
๋ฒ์: 1M - 1G
๊ธฐ๋ณธ๊ฐ: 100M
DDL_DISCARD_BACKUP_DIR
discard ํ์ผ์ ํฌ๊ธฐ๊ฐ ์ค์ ํ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ด๊ณผํ๊ฒ ๋๋ฉด ์์ฑํ๋ ๋ฐฑ์ ํ์ผ์ ์์น๋ฅผ ์ง์ ํ๋ ํ๋ผ๋ฏธํฐ.
์ ํ: ๋๋ ํ ๋ฆฌ
๋ฒ์: -
๊ธฐ๋ณธ๊ฐ: "/"
DDL_DISCARD_BACKUP_SIZE
backup ๋๋ ํ ๋ฆฌ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ ํ๋ผ๋ฏธํฐ.
์ ํ: uint64
๋ฒ์: 0 - 128G
๊ธฐ๋ณธ๊ฐ: 0
๋๊ธฐํ ์ค ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ์ ์คํตํ ์ง์ ์ฌ๋ถ๋ฅผ ์ค์ ํ๋ค. Y ์ํ์์ ๋ฐ์ํ ์๋ฌ๊ฐ DISCARD_EC ์ ์์ฑ๋ ์๋ฌ์ฝ๋์ ์ํด์๋ ๊ฒฝ์ฐ ์ฌ์๋๋ฅผ ์๋ตํ๋ค.
์ ํ: Y/N
๋ฒ์: Y/N
๊ธฐ๋ณธ๊ฐ: N
DISCARD_EC
์ฌ์๋๋ฅผ ํ์ง ์๊ณ ๊ฑด๋๋ฐ๊ณ ์ ํ๋ ์๋ฌ์ฝ๋๋ฅผ ์ ๋ ฅํ๋ค.
์ ํ: ์๋ฌ์ฝ๋
๋ฒ์: ์ต๋ 256๊ฐ
๊ธฐ๋ณธ๊ฐ:
DISCARD_FILE_YN
DISCARD ๋์์ด ๋ฐ์ํ์ ๋ ํด๋น ๋ด์ฉ์ discard ํ์ผ์ ๋จ๊ธฐ๋ ๊ธฐ๋ฅ์ ํ์ฑํ ํ๋ ํ๋ผ๋ฏธํฐ์ด๋ค.
์ ํ: Y/N, dynamic
๋ฒ์: Y/N
๊ธฐ๋ณธ๊ฐ: N
DISCARD_FILE_DIR
discard file์ ์ ์ฅ ์์น๋ฅผ ์ง์ ํ๋ ํ๋ผ๋ฏธํฐ.
์ ํ: ๋๋ ํ ๋ฆฌ
๋ฒ์: -
๊ธฐ๋ณธ๊ฐ: (LOG_DIR๊ณผ ๊ฐ์ ๋๋ ํ ๋ฆฌ)
DISCARD_FILE_SIZE
discard ํ์ผ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ ํ๋ผ๋ฏธํฐ.
์ ํ: int32, dynamic
๋ฒ์: 1M - 1G
๊ธฐ๋ณธ๊ฐ: 100M
DISCARD_BACKUP_DIR
discard ํ์ผ์ ํฌ๊ธฐ๊ฐ ์ค์ ํ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ด๊ณผํ๊ฒ ๋๋ฉด ์์ฑํ๋ ๋ฐฑ์ ํ์ผ์ ์์น๋ฅผ ์ง์ ํ๋ ํ๋ผ๋ฏธํฐ.
์ ํ: ๋๋ ํ ๋ฆฌ
๋ฒ์: -
๊ธฐ๋ณธ๊ฐ: DISCARD_FILE_DIR/backup
DISCARD_BACKUP_SIZE
backup ๋๋ ํ ๋ฆฌ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ ํ๋ผ๋ฏธํฐ.
์ ํ: uint64, dynamic
๋ฒ์: 0 - 128G
๊ธฐ๋ณธ๊ฐ: 0(๋ฌด์ ํ)
DDL_DISCARD_YN
๋๊ธฐํ ์ค ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ์ ์คํตํ ์ง์ ์ฌ๋ถ๋ฅผ ์ค์ ํ๋ค.
์ ํ: Y/N
๋ฒ์: Y/N
๊ธฐ๋ณธ๊ฐ: N
DDL_DISCARD_FILE_YN
DISCARD ๋์์ด ๋ฐ์ํ์ ๋ ํด๋น ๋ด์ฉ์ discard ํ์ผ์ ๋จ๊ธฐ๋ ๊ธฐ๋ฅ์ ํ์ฑํ ํ๋ ํ๋ผ๋ฏธํฐ์ด๋ค.
์ ํ: Y/N
๋ฒ์: Y/N
๊ธฐ๋ณธ๊ฐ: N
DDL_DISCARD_FILE_DIR
์ฃผ์
DISCARD ๊ธฐ๋ฅ์ ํ์ฑํํ๋ฉด batch apply ๊ธฐ๋ฅ์ด ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ๋ค.
DML์ ๋ฐ์ํ ๋ ๋ฐ์ํ๋ ์๋ฌ์ ๋ํด์ ๋ง DISCARD ๊ธฐ๋ฅ์ ์ง์ํ๋ค.
(12032)Deadlock detected. ์๋ฌ๋ DISCARD ๊ธฐ๋ฅ์ ์ง์ํ์ง ์๋๋ค.
SAM_BIND_VALUE=Y ๋ฅผ ์ฌ์ฉํ๋ฉด, discard log์ ์คํจํ query์ value ๊ฐ์ด ํจ๊ป ์ ์ฅ๋๋ค.
์ฃผ์
๋จ, TABLE ๊ด๋ จ DDL์ ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋๋ผ๋ ์คํจํ๋ ๊ฒฝ์ฐ ์๋ตํ ์ ์๋ค.
discard file์ ์ ์ฅ ์์น๋ฅผ ์ง์ ํ๋ ํ๋ผ๋ฏธํฐ.
์ ํ: ๋๋ ํ ๋ฆฌ
๋ฒ์: -
๊ธฐ๋ณธ๊ฐ: "/"
DDL_DISCARD_YN=[Y|N]
DDL_DISCARD_FILE_YN=[Y|N]
DDL_DISCARD_FILE_DIR=/directory/to/save/file
DDL_DISCARD_FILE_SIZE=200M
DDL_DISCARD_BACKUP_DIR=/directory/to/save/backup/file
DDL_DISCARD_BACKUP_SIZE=10GProSync ์ฌ์ฉ์๋ ์ ์ฉ ํ๋ก์ธ์ค์ ์ค์ ํ์ผ์์ DDL ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํ ์ ์๋ค. DDL ํ๋ผ๋ฏธํฐ๋ ๋๊ธฐํ ํ DDL์ ๋ํ ์ค์ ์ด๋ค.
DDL ํ๋ผ๋ฏธํฐ๋ ํ๋ ์ด์์ DDL Rule ๋ฌธ์ฅ์ผ๋ก ๊ตฌ์ฑ๋๋ค. DDL Rule์๋ DDL ๋๊ธฐํ๋ฅผ ํฌํจ/๋ฐฐ์ ํ ๋์๊ณผ DDL ์ข ๋ฅ๋ฅผ ๋ช ์ํ ์ ์๋ค.
ALL ๋๋ DEFAULT ์ค ํ๋๋ฅผ ๋ช ์ํ๊ฑฐ๋, DB์ ์ค๋ธ์ ํธ ์ด๋ฆ์ ์ง์ ๋ช ์ํ ์ ์๋ค.
ALL: ๋ชจ๋ ์คํค๋ง, ํ ์ด๋ธ์ ๋ํด ์ ์ฉ๋๋ค.
DEFAULT: ๋ชจ๋ ๋๊ธฐํ ๋์ ํ ์ด๋ธ์ ๋ํด ์ ์ฉ๋๋ค.
์ค๋ธ์ ํธ ์ด๋ฆ์ ์ง์ ๋ช ์: ๋์์ ๋ํด ์ ์ฉ๋๋ค.
TYPE
TYPE์ ํ๋ ์ด์์ DDL OPERATION๊ณผ DDL OBJECT ์์ผ๋ก ๊ตฌ์ฑ๋๋ค. ์ง์ ๋์ด ์์ง ์๋ ๊ฒฝ์ฐ, Wildcard๋ก ์ฒ๋ฆฌํ๋ค.
[DDL OPERATION]
Rule์ ์ ์ฉํ DDL ์ข ๋ฅ๋ฅผ ๋ช ์ํ๋ค.
[DDL OBJECT]
Rule์ ์ ์ฉํ DDL ์ข ๋ฅ์ ๋ํ ๋์์ ๋ช ์ํ๋ค.
๋ค์์ Source DB์ ๋ฐ๋ผ ์ค์ ๊ฐ๋ฅํ [DDL OPERATION]๊ณผ [DDL OBJECT]์ ์กฐํฉ์ด๋ค.
CREATE
ALTER
DROP
COMMENT ON
TABLE
INDEX
TRIGGER
SEQUENCE
VIEW
FUNCTION
PACKAGE
PACKAGE BODY
PROCEDURE
SYNONYM
PUBLIC SYNONYM
TRUNCATE
TABLE
CREATE
TABLE
INDEX
TRIGGER
SEQUENCE
VIEW
MVIEW
FUNCTION
PACKAGE
PACKAGE BODY
PROCEDURE SYNONYM
PUBLIC SYNONYM TABLESPACE DIRECTORY MLOG
ROLE (โ Password ํฌํจ DDL ๋๊ธฐํ ์ ์ฝ์ฌํญ ์ฐธ์กฐ)
PUBLIC DATABASE LINK (โ Password ํฌํจ DDL ๋๊ธฐํ ์ ์ฝ์ฌํญ ์ฐธ์กฐ)
ALTER
TABLE
INDEX
TRIGGER
SEQUENCE
VIEW
MVIEW
FUNCTION
PACKAGE
PACKAGE BODY
PROCEDURE SYNONYM
PUBLIC SYNONYM TABLESPACE DIRECTORY MLOG
ROLE (โ Password ํฌํจ DDL ๋๊ธฐํ ์ ์ฝ์ฌํญ ์ฐธ์กฐ) TYPE TYPEBODY
DROP
๋ค์์ ๋ชจ๋ ์คํค๋ง์ ๋ํด์ ๋ชจ๋ ์ข ๋ฅ์ DDL ๋๊ธฐํ๋ฅผ ํ์ง๋ง, ์คํค๋ง EXCLUDED_USR์ ๋ชจ๋ ํ ์ด๋ธ์ ๋ํ DDL ๋๊ธฐํ๋ ๋ฐฐ์ ํ๋ ์์ ์ด๋ค.
๋ค์์ ๋๊ธฐํ ๋์ ํ ์ด๋ธ์ ๋ํด TABLE์ ๋์์ผ๋ก ํ๋ DDL์ ๋๊ธฐํํ๊ณ , INCLUDED_USR์ ๋ชจ๋ ์ค๋ธ์ ํธ ์ด๋ฆ์ ๋ํด INDEX๋ฅผ ๋์์ผ๋ก ํ๋ DDL์ ๋๊ธฐํํ๋ค. ๋ฐ๋ฉด, ์ค๋ธ์ ํธ ์ด๋ฆ์ด EXCLUDED_USR.IDX1์ผ ๊ฒฝ์ฐ INDEX๋ฅผ ๋์์ผ๋ก ํ๋ DDL์ ๋๊ธฐํํ์ง ์๋๋ค.
๋ค์์ SRCUSR์ ๋ชจ๋ ํ ์ด๋ธ์ ๋ํด TYPE์ ํด๋น๋๋ DDL์ ๋๊ธฐํํ์ง๋ง, SRCUSR.T1์ ๋ํด์๋ DROP TABLE๊ณผ CREATE TABLE์ ํด๋น๋๋ DDL์ ๋๊ธฐํํ์ง ์๋๋ค.
DDL ๋ฌธ์ฅ ํฌ๊ธฐ ๋๊ธฐํ ํ DDL ๋ฌธ์ฅ์ ๊ฐ ์์๋ 128๊ธ์๋ฅผ ๋์ ์ ์๋ค.
์ค์ ์ ํ์ธ DDL ํ๋ผ๋ฏธํฐ์ ๋์๊ณผ, ๋๊ธฐํ ํ DDL ์ข ๋ฅ๊ฐ ์ ํํ์ง Wildcard๋ฅผ ๊ณ ๋ คํ์ฌ ํ์ธํ๊ณ ์ค์ ํ๋ค. ๋ค๋ฅธ DB๋ ๋์์๊ฒ ๋จผ์ ์ ์ฉํด๋ณด๊ณ ์ค์ ํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
CREATE TABLE ์ดํ ๋๊ธฐํ CREATE TABLE์ ๋ํ DDL ๋๊ธฐํ ํ ์์ฑ๋ ํ ์ด๋ธ์ DML ๋๊ธฐํ ํ๋ ค๋ฉด ์๋์ผ๋ก ๋๊ธฐํ ๋์ ์ถ๊ฐ๋ฅผ ํด์ผํ๋ค. ๋ฐ๋ฉด DDL์ Rule์ ์ํด ์์ฑ๋ ์งํ๋ถํฐ ๋๊ธฐํ ๋ ์ ์์ผ๋ฏ๋ก ์ฃผ์ํ๋ค.
implicit DDL CREATE TABLE์ ๋ํ DDL ๋๊ธฐํ ์คํ ์ค ์ปฌ๋ผ์ PRIMARY KEY๋ก ์ธํด INDEX ์์ฑ์ด ๋๋ ๊ฒ์ฒ๋ผ ๋ช ์๋์ง ์์ DDL์ implicit DDL์ด๋ผ ํ๋ฉฐ, ๋๊ธฐํ ์ค์ ํ ๋ ์ด๋ฅผ ์ฃผ์ํ๋ค.
RENAME ์ง์ DDL ์ค RENAME์ ์ง์ํ์ง ์๋๋ค. ALTER ... RENAME์ ์ด์ฉํ DDL ๊ตฌ๋ฌธ์ ALTER๋ฅผ ๋๊ธฐํ ์ค์ ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
ORACLE LOGMNR Source DB๊ฐ Oracle, logmnr ๋ฅผ ์ฌ์ฉํ ๋ ๋๊ธฐํ ๋์์ ๋ํ DDL ๋๊ธฐํ๋ง ์ง์ํ๋ค.
INDEX / CONSTRAINTS ๊ด๋ จ ์ฃผ์์ฌํญ INDEX / CONSTRAINTS์ ๊ฒฝ์ฐ SRC/TAR DB์์ ์ด๋ฆ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ ๋๊ธฐํ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
DDL ์ค์ ์กฐํฉ ๋ณต์ ๊ฐ์ DDL ๋ฃฐ์ ๋ํ ์ค์ ์ ์๋์ ๊ฐ์ ํํ๋ก ๋ช ์ํ๋ค.
OBJECT ๋๊ธฐํ DDL ๋๊ธฐํ์ ๊ฒฝ์ฐ INCLUDE DEFAULT ์ฌ์ฉ ์ ์ค๋ธ์ ํธ์ ๋ํ DDL ๋๊ธฐํ๋ ์ํ๋์ง ์์ผ๋ฉฐ, ์ค๋ธ์ ํธ์ ๋ํ DDL ๋๊ธฐํ ์ํ์ ์ํ๋ ๊ฒฝ์ฐ ์ง์ ๋ช ์ํด์ผํ๋ค
์คํค๋ง ๋ฏธ๋ช ์ DDL ๊ตฌ๋ฌธ์ ๋๊ธฐํ ์ ํ DDL ๊ตฌ๋ฌธ์์ ๋์ ๊ฐ์ฒด์ ์คํค๋ง(Schema) ๊ฐ ๋ช ์๋์ง ์์ ๊ฒฝ์ฐ, ํด๋น ๊ตฌ๋ฌธ์ ๋๊ธฐํ๊ฐ ์ํ๋์ง ์๋๋ค. ๋ฐ๋ผ์ ์คํค๋ง๋ฅผ ๋ช ์ํ ํํ์ DDL ๊ตฌ๋ฌธ์ผ๋ก ์์ฑํด์ผ๋ง ๋๊ธฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
์์
SYS ์คํค๋ง DDL ๋๊ธฐํ ์ ์ฝ์ฌํญ ์คํค๋ง๊ฐ SYS์ธ ๊ฒฝ์ฐ, ํด๋น ์คํค๋ง๋ฅผ ๋์์ผ๋ก ์ํ๋๋ ๋ชจ๋ DDL์ ๋๊ธฐํ ์ Skip ์ฒ๋ฆฌ๋๋ค.
์คํค๋ง ๋น์ข ์ ๊ฐ์ฒด(Non-Schema Object) ๋๊ธฐํ ์ ์ฝ์ฌํญ
TABLESPACE, DIRECTORY, DATABASE LINK, ROLE, LIBRARY ๊ฐ์ฒด๋ ํน์ ์คํค๋ง์ ์ข ์๋์ง ์๋ ๊ฐ์ฒด๋ก, DDL ๋๊ธฐํ ์ INCLUDE ALL ์ต์ ์ด ์ค์ ๋ ๊ฒฝ์ฐ์๋ง ๋๊ธฐํ๋ฅผ ์ง์ํ๋ค. INCLUDE DEFAULT์ธ ๊ฒฝ์ฐ ๋๊ธฐํ๋ฅผ ์ง์ํ์ง ์๋๋ค.
Password ํฌํจ DDL ๋๊ธฐํ ์ ์ฝ์ฌํญ
CREATE ROLE, ALTER ROLE, CREATE PUBLIC DATABASE LINK ๋ฑ ๋น๋ฐ๋ฒํธ ์ ๋ณด๊ฐ ํฌํจ๋ ์ ์๋ DDL ๋ฌธ์ฅ์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ช ์ํ์ง ์๋ ๊ฒฝ์ฐ์๋ง DDL ๋๊ธฐํ๋ฅผ ์ง์ํ๋ค.
DDL=([SET] [RANGE], TYPE=('[DDL OPERATION] [DDL OBJECT]', ...))[SET]
INCLUDE ๋๋ EXCLUDE๋ฅผ ๋ช ์ํ ์ ์๋ค.
INCLUDE: ๊ธฐ์ ๋ ๊ท์น์ ๋ํด ๋๊ธฐํํ๋ค.
EXCLUDE: ๊ธฐ์ ๋ ๊ท์น์ ๋ํด ๋๊ธฐํํ์ง ์๋๋ค. ์ด๋ ํ INCLUDE๋ณด๋ค EXCLUDE๋ฅผ ์ฐ์ ์ํ๋ค.
[RANGE]
DDL=(
INCLUDE ALL, TYPE=('%')
EXCLUDE EXCLUDED_USR.%, TYPE=('%')
)DDL=(
INCLUDE DEFAULT, TYPE=('% TABLE')
INCLUDE INCLUDED_USR.%, TYPE=('% INDEX')
EXCLUDE EXCLUDED_USR.IDX1, TYPE=('% INDEX')
)DDL=(
INCLUDE SRCUSR.%, TYPE=('DROP TABLE', 'ALTER TABLE', 'TRUNCATE TABLE')
EXCLUDE SRCUSR.T1, TYPE=('DROP TABLE', 'CREATE TABLE')
)์ฃผ์ DDL=(INCLUDE ALL, TYPE=('%'))์ค์ ์, Source DB์ ๋ชจ๋ ์คํค๋ง์์ ์ํ๋๋ ๋ชจ๋ ํ์ ์ DDL์ด ๋๊ธฐํ๋๋ค. ๋๊ธฐํ ๋์ ์ฌ๋ถ์ ๊ด๊ณ์์ด ๋ชจ๋ DDL์ด ์ ์ฉ๋๋ฏ๋ก ์ฌ์ฉ ์ ์ฃผ์๊ฐ ํ์ํ๋ค. ์ถ๊ฐ์ ์ผ๋ก INCLUDE ALL๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ ์ค์น๋ Instance ๋ ๋จ์ผ Instance ๋ก ๊ตฌ์ฑ๋์ด์ผ ํ๋ค.
LIBRARY TYPE TYPEBODY
TABLE
INDEX
TRIGGER
SEQUENCE
VIEW
MVIEW
FUNCTION
PACKAGE
PACKAGE BODY
PROCEDURE
SYNONYM
PUBLIC SYNONYM TABLESPACE DIRECTORY MLOG
ROLE
DATABASE LINK
PUBLIC DATABASE LINK LIBRARY TYPE TYPEBODY
COMMENT ON
-
TRUNCATE
TABLE
DDL=([SET] [RANGE], TYPE=('[DDL OPERATION] [DDL OBJECT]', ...)
[SET] [RANGE], TYPE=('[DDL OPERATION] [DDL OBJECT]', ...) ....)CREATE TABLE TEST_TABLE2 (
c1 NUMBER,
CONSTRAINT fk_test FOREIGN KEY (c1) REFERENCES [์คํค๋ง๋ช
].TEST_TABLE1 (c1)
);



