All pages
1 of 5

Loading...

Loading...

Loading...

Loading...

Loading...

์žฅ์•  ๋Œ€์‘ ๊ฐ€์ด๋“œ

์žฅ์•  ์ƒํ™ฉ์— ๋Œ€ํ•œ ์กฐ์น˜๋กœ์„œ, ํ”„๋กœ์„ธ์Šค๋ณ„ ์žฅ์•  ์ƒํ™ฉ๊ณผ ์ด์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์•ˆ๋‚ดํ•œ๋‹ค.

Extract

์„ฑ๋Šฅ

Extract ํ”„๋กœ์„ธ์Šค๋Š” Redo Log ํŒŒ์ผ์„ ์ฝ์–ด ๋ณ€๊ฒฝ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋””์Šคํฌ ์ฝ๊ธฐ ์†๋„๊ฐ€ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ณ€๊ฒฝ ๋ฐ์ดํ„ฐ๋Š” Chunk ํ˜•ํƒœ๋กœ Apply ํ”„๋กœ์„ธ์Šค์— ์ „์†กํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋„คํŠธ์›Œํฌ ์†๋„๊ฐ€ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

ProSync ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ๋ณ€ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ๋กœ๊ทธ ๋ ˆ๋ฒจ(LOG_LEVEL)์ด ๋†’๋‹ค๋ฉด, disk write๊ฐ€ ๋งŽ์•„์ง์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

  2. ๋ฐ์ดํ„ฐ ์••์ถ• ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ๋ฐ์ดํ„ฐ ์••์ถ•์„ ์œ„ํ•œ ๋™์ž‘์ด ์ถ”๊ฐ€๋จ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

  3. ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”๋ฅผ ์œ„ํ•œ ๋™์ž‘์ด ์ถ”๊ฐ€๋จ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.


ProSync๋Š” ์ ์ ˆํ•œ ๋ฐ˜์˜ ์ฟผ๋ฆฌ ์ƒ์„ฑ์„ ์œ„ํ•ด ํ…Œ์ด๋ธ”์˜ DD image ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋Š” ์‹œ์ ์— Trigger๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€ ํŒจํ‚ค์ง€๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ฉ”ํƒ€ ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

๋ฉ”ํƒ€ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ๋Š” ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ์‹œ์Šคํ…œ ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜์—ฌ ๋™๊ธฐํ™” ํ•  Object๋“ค์˜ ์ •๋ณด๋ฅผ ๋ฉ”ํƒ€ ํ…Œ์ด๋ธ”์— insertํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ค์น˜ ์‹œ์ ์— PRS_USER์— ์ ์ ˆํ•œ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋˜์ง€๋งŒ, ์‚ฌ์šฉ ์ค‘์ธ PRS_USER์—๊ฒŒ์„œ ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ํšŒ์ˆ˜ํ•œ๋‹ค๋ฉด ํ•ด๋‹น ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•ด ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

ProSync๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” PRS_DDL_HIST์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•ด๋‹น ํ…Œ์ด๋ธ”์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ, PRS_USER์˜ ๊ถŒํ•œ ๋ณ€๊ฒฝ์ด ์žˆ๋Š”์ง€ ํ™•์ธ์ด ํ•„์š”ํ•˜๋‹ค.

Extract ํ”„๋กœ์„ธ์Šค๋Š” ์—ฌ๋Ÿฌ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ฝ๊ธฐ ๋˜๋Š” ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋‹ค.

  • ๋ณ€๊ฒฝ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ ์œ„ํ•ด Redo Log์™€ Archive Log๋“ค์— ๋Œ€ํ•œ ์ฝ๊ธฐ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋‹ค.

  • ๋กœ๊ทธ ์ž‘์„ฑ์„ ์œ„ํ•ด LOG_DIR, LOG_BACKUP_DIR ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋‹ค.

  • ์ด์ „ Redo Log์—์„œ commit๋˜์ง€ ์•Š์€ tx์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” tlr(olr) ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด $PRS_HOME/var/[instance_name]/lr[node_num] ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋‹ค.

Log Reader๊ฐ€ ํŠน์ • ๋ณ€๊ฒฝ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด, ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ ํ›„ ์ƒˆ๋กœ์šด ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ๊ต์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์ •ํ•ฉ์„ฑ ๋ถˆ์ผ์น˜๋ฅผ ๊ฐ์ˆ˜ํ•˜๊ณ  ๋™๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋ ค๋ฉด ์„ค์น˜ ์•ˆ๋‚ด์„œ์˜ ์ด๋ ฅ์กฐ์ ˆ(๋งํฌ)์„ ์ฐธ๊ณ ํ•˜์—ฌ ๋ฌธ์ œ๋˜๋Š” Redo Log๋ฅผ ๋„˜๊ธฐ๊ฑฐ๋‚˜ corrupted lcr์ด ์ถ”์ถœ๋œ ๊ฒฝ์šฐ _LR_SKIP_CORRUPTED_LCR ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด ๋„˜๊ธธ ์ˆ˜ ์žˆ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ
์„ค๋ช…

_LR_SKIP_CORRUPTED_LCR

Log Reader์—์„œ corrupted lcr์ด ์ถ”์ถœ๋˜์–ด๋„ ์ถ”์ถœ์„ ์ •์ง€ํ•˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ•œ๋‹ค.

์žฅ์• 

ํŒจํ‚ค์ง€ ์ˆ˜ํ–‰ ์‹คํŒจ

๊ถŒํ•œ ์—†์Œ

Log Reader ์˜ค๋ฅ˜

Bug Report

ProSync ์šด์˜ ์ค‘ ์žฅ์•  ๋ฐœ์ƒ ์‹œ, ๋ถ„์„์„ ์œ„ํ•ด ํ˜„์ƒ ๋ฐœ์ƒํ•œ ํ”„๋กœ์„ธ์Šค์˜ 5๋ ˆ๋ฒจ ๋กœ๊ทธ์™€ config๋ฅผ ์ฒจ๋ถ€ํ•ด์•ผ ํ•˜๋ฉฐ ์žฅ์•  ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ค์Œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค
config ํŒŒ์ผ ์œ„์น˜

Extract

$PRS_HOME/config/[INST_ID]_ext[NODE_NUM].cfg

Apply

๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—์„œ ์ „๋‹ฌํ•œ ์ •๋ณด์— ์˜ค๋ฅ˜๊ฐ€ ์˜์‹ฌ๋˜๋Š” ๊ฒฝ์šฐ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

config ํŒŒ์ผ์˜ LOG_DIR ๊ฒฝ๋กœ์— ์œ„์น˜ํ•œ๋‹ค.

ํ˜„์ƒ ๋ฐœ์ƒํ•œ ํ”„๋กœ์„ธ์Šค์™€ ๋™์ผํ•˜๊ฒŒ 5๋ ˆ๋ฒจ ๋กœ๊ทธ(LOG_LEVEL=5)๋ฅผ ์ฒจ๋ถ€ํ•ด์•ผ ํ•œ๋‹ค.

Log Reader ์˜ค๋™์ž‘์ด ์˜์‹ฌ๋˜๋Š” ๊ฒฝ์šฐ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž์„ธํ•œ ๋ถ„์„์„ ์œ„ํ•ด, Extract ํ”„๋กœ์„ธ์Šค์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ '''LR_TRACE_LVL=5''' ๋กœ ์„ค์ •ํ•œ ๋’ค, ํ˜„์ƒ ์žฌํ˜„์„ ์š”์ฒญํ•œ๋‹ค.

$PRS_HOME/var/[INST_ID]/lr[NODE_NUM]/ ๊ฒฝ๋กœ์— ์ƒ์„ฑ๋˜๋Š” til[NODE_NUM].log/oli[NODE_NUM].log ํŒŒ์ผ์„ ์ฒจ๋ถ€ํ•ด์•ผ ํ•œ๋‹ค.

์—ฌ๋Ÿฌ Redo Log์— Chaining๋œ TX์— ๋Œ€ํ•ด, ์ž˜๋ชป๋œ ๊ฐ’์„ ์ถ”์ถœํ•œ ๊ฒƒ์œผ๋กœ ์˜์‹ฌ๋˜๋Š” ๊ฒฝ์šฐ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

Extract ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ธฐ๋™ํ•œ ์žฅ๋น„์˜ $PRS_HOME/var/[INST_ID]/lr[NODE_NUM]/ ๊ฒฝ๋กœ์— ์ƒ์„ฑ๋œ๋‹ค.

Log Reader์—์„œ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ถ”์ถœํ•œ ๊ฒƒ์œผ๋กœ ์˜์‹ฌ๋˜๋Š” ๊ฒฝ์šฐ, ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฝ์€ Redo Log๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

Extract ํ”„๋กœ์„ธ์Šค์—์„œ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ถœ๋ ฅํ•œ redo log found ๋˜๋Š” redo/archived log found ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฝ์€ ๋กœ๊ทธ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ๋™ ์‹คํŒจ, ํŒŒ๋ผ๋ฏธํ„ฐ ๋™์  ๋ณ€๊ฒฝ ์‹คํŒจ, ๋™๊ธฐํ™” ํ…Œ์ด๋ธ” ์ถ”๊ฐ€ ์‹คํŒจ ๋“ฑ Agent ํ”„๋กœ์„ธ์Šค์—์„œ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์ด ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ, ์‹คํŒจํ•œ ์ง€์ ์„ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด 5๋ ˆ๋ฒจ Agent ๋กœ๊ทธ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

config ํŒŒ์ผ์˜ LOG_DIR ๊ฒฝ๋กœ์— ์œ„์น˜ํ•œ๋‹ค.

Apply ํ”„๋กœ์„ธ์Šค์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ํŒŒ์ผ๋กœ ๋‚ด๋ฆฐ TX ๋ฐ์ดํ„ฐ์˜ ์†์ƒ์ด ์˜์‹ฌ๋˜๋Š” ๊ฒฝ์šฐ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

Apply ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ธฐ๋™ํ•œ ์žฅ๋น„์˜ $PRS_HOME/var/[INST_ID]/tx ๊ฒฝ๋กœ์— ์ƒ์„ฑ๋˜๋ฉฐ configํŒŒ์ผ์— TX_HASH_FILE_DIR ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ • ์‹œ, ํ•ด๋‹น ๊ฒฝ๋กœ์— ์ƒ์„ฑ๋œ๋‹ค.

Llob

Llob ํ”„๋กœ์„ธ์Šค๋Š” Apply ํ”„๋กœ์„ธ์Šค์˜ ์š”์ฒญ์— ๋”ฐ๋ผ read Thread ์—์„œ ํ•ด๋‹น ์‹œ์ (TSN ๋˜๋Š” SCN)์˜ llob ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ select ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ์‹œ์ ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ(flashback ์ฟผ๋ฆฌ ์‹คํŒจ) ํ˜„์žฌ ์‹œ์ ์„ ๊ธฐ์ค€์œผ๋กœ ์กฐํšŒํ•˜๋ฉฐ ์ด๋•Œ, ํ˜„์žฌ ์‹œ์ ์— ํ•ด๋‹น row๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์กฐํšŒ๋ฅผ ์‹คํŒจํ•  ์ˆ˜ ์žˆ๋‹ค.

Apply ํ”„๋กœ์„ธ์Šค์—์„œ ์ตœ๋Œ€ 20๊ฐœ์˜ Replay Thread ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ชจ๋“  Thread ์—์„œ llob ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ํ…Œ์ด๋ธ”์„ ๋™๊ธฐํ™” ํ•œ๋‹ค๋ฉด Llob ํ”„๋กœ์„ธ์Šค์—์„œ ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋•Œ, LLOB_THREAD_CNTํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Apply ํ”„๋กœ์„ธ์Šค์˜ ์š”์ฒญ์„ ๋ถ„๋ฐฐํ•ด ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.


์ถ”์ถœํ•œ ์‹œ์ ์˜ TSN(SCN)์œผ๋กœ flashback ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฉด์„œ ํ˜„์žฌ ํ•ด๋‹น row๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด llob ๋ฐ์ดํ„ฐ ์กฐํšŒ๊ฐ€ ์‹คํŒจํ•˜๊ณ  Prosync๋Š” ํ•ด๋‹น row ๋™๊ธฐํ™”๋ฅผ ๊ณ„์†ํ•ด์„œ ์žฌ์‹œ๋„ํ•œ๋‹ค.

$PRS_HOME/config/[INST_ID]_apply[NODE_NUM].cfg

Llob

$PRS_HOME/config/[INST_ID]_llob.cfg

Agent

$PRS_HOME/config/prs_agent_[AGENT_ID].cfg

ํƒ€ ํ”„๋กœ์„ธ์Šค ๋กœ๊ทธ

TLI(OLI) ๋กœ๊ทธ

TLR(OLR) ๋กœ๊ทธ

Redo Log

Agent ๋กœ๊ทธ

Tx Hash

์„ฑ๋Šฅ

์žฅ์• 

Apply

์„ฑ๋Šฅ

Apply ํ”„๋กœ์„ธ์Šค๋Š” Extract ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ „๋‹ฌํ•œ ๋ณ€๊ฒฝ ๋ฐ์ดํ„ฐ๋ฅผ TX๋ณ„๋กœ ์ •๋ฆฌ ํ›„ commit ์š”์ฒญ๋œ ์‹œ์ ๋ถ€ํ„ฐ Target DB์— ๋ฐ˜์˜ํ•˜๋ฉฐ ์ฃผ๋กœ DB์— ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ณผ์ •์—์„œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•œ๋‹ค.

์ง€์—ฐ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, Target DB์— ๋ฐ˜์˜ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” APPLY_NUM ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์กฐ์ ˆํ•˜์—ฌ Thread ์ˆ˜๋ฅผ ๋Š˜๋ ค ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.


์žฅ์• 

๋ฐ˜์˜ ์‹คํŒจ

Source DB์—์„œ ์ถ”์ถœํ•œ ๋ณ€๊ฒฝ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด Target DB์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ํ”„๋กœ์‹ฑํฌ๋Š” ์‹คํŒจํ•œ DML์„ ์„ฑ๊ณตํ•  ๋•Œ ๊นŒ์ง€ ๋‹ค์‹œ ์‹œ๋„ํ•œ๋‹ค.

์‚ฌ์šฉ์ž๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ˜์˜๋  ์ˆ˜ ์žˆ๋„๋ก Target DB๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ DCR ๊ธฐ๋Šฅ ๋˜๋Š” DISCARD ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๊ณผ์ ์œ 

ProSync๋Š” TX์— ๋Œ€ํ•ด commit ๋˜๋Š” rollback ์ด์ „๊นŒ์ง€ ๋ฐ˜์˜์„ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— commit ์—†์ด ๋ณ€๊ฒฝ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์†ํ•ด์„œ ์ „๋‹ฌ๋ฐ›๋Š” ๊ฒฝ์šฐ, Apply ํ”„๋กœ์„ธ์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋•Œ, ๋ฉ”๋ชจ๋ฆฌ ์กฐ์ ˆ์šฉ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค.

MEMORY_CTRL_STOP_SIZE/MEMORY_CTRL_RESUME_SIZE

Replay Thread ์—์„œ ์™„๋ฃŒ๋˜์ง€ ์•Š์€ TX๋“ค์˜ ์ด ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ€ MEMORY_CTRL_STOP_SIZE ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ๋„˜๋Š” ๊ฒฝ์šฐ extract ํ”„๋กœ์„ธ์Šค์—์„œ ๋ณด๋‚ด๋Š” chunk๋ฅผ ์ˆ˜์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ดํ›„, Replay Thread ์—์„œ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์™„๋ฃŒ๋˜์ง€ ์•Š์€ TX๋“ค์˜ ์ด ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ€MEMORY_CTRL_RESUME_SIZE ๊ฐ’๋ณด๋‹ค ๋‚ฎ์•„์ง€๋Š” ๊ฒฝ์šฐ ๋‹ค์‹œ Extract ํ”„๋กœ์„ธ์Šค์—์„œ ๋ณด๋‚ด๋Š” chunk๋ฅผ ์ˆ˜์‹ ํ•œ๋‹ค.

TAC/RAC ํ™˜๊ฒฝ์—์„œ ํŠน์ • extract ํ”„๋กœ์„ธ์Šค์˜ chunk๋งŒ ๊ณ„์†ํ•ด์„œ ์ˆ˜์‹  ๋ฐ›๋Š” ๊ฒฝ์šฐ, stmt์ˆ˜๊ฐ€ MERGE_BLOCK_CNT ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ๋„˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น extract ํ”„๋กœ์„ธ์Šค์—์„œ ๋ณด๋‚ด๋Š” chunk๋ฅผ ์ˆ˜์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ดํ›„, ๋‹ค๋ฅธ extract ํ”„๋กœ์„ธ์Šค๋“ค์—๊ฒŒ chunk๋ฅผ ์ˆ˜์‹  ๋ฐ›์•„ ์ฒ˜๋ฆฌ๋˜์ง€ ๋ชปํ•œ stmt์ˆ˜๊ฐ€ MERGE_RESUME_CNT ๊ฐ’๋ณด๋‹ค ๋‚ฎ์•„์ง€๋Š” ๊ฒฝ์šฐ ๋‹ค์‹œ extract ํ”„๋กœ์„ธ์Šค์—์„œ ๋ณด๋‚ด๋Š” chunk๋ฅผ ์ˆ˜์‹ ํ•œ๋‹ค.

extract ํ”„๋กœ์„ธ์Šค์—์„œ ์ˆ˜์‹ ํ•œ chunk์— ๋Œ€ํ•ด, const Thread ์—์„œ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•œ TX๋“ค์˜ ์ด ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ€ CHUNK_TOTAL_SIZE ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ๋„˜๋Š” ๊ฒฝ์šฐ extract ํ”„๋กœ์„ธ์Šค์—์„œ ๋ณด๋‚ด๋Š” chunk๋ฅผ ์ˆ˜์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ดํ›„, const Thread ๊ฐ€ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•œ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์˜ ์ ˆ๋ฐ˜ ์ดํ•˜๋กœ ๋‚ฎ์•„์ง€๋Š” ๊ฒฝ์šฐ ๋‹ค์‹œ extract ํ”„๋กœ์„ธ์Šค์—์„œ ๋ณด๋‚ด๋Š” chunk๋ฅผ ์ˆ˜์‹ ํ•œ๋‹ค.

apply ํ”„๋กœ์„ธ์Šค์˜ Const Thread ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” tx์ •๋ณด๋“ค์˜ ํฌ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ commit์ด ์˜ค์ง€ ์•Š์€ stmt๋“ค ์ •๋ณด๊ฐ€ TX_HASH_SIZE๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ ๊ฐ€์žฅ ํฐ TX๋ถ€ํ„ฐ partํŒŒ์ผ ์ƒ์„ฑ ํ›„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•˜๋ฉฐ ํ•ด๋‹น ๊ฐ’๋ณด๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋‚ฎ์•„์งˆ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

Log Switch ๊ฐ์ง€ ์‹œ, const Thread ์—์„œ ์•„์ง commit๋˜์ง€ ์•Š์€ tx์ •๋ณด๋ฅผ ์žฌ๊ธฐ๋™ ์ƒํ™ฉ์—์„œ๋„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด txh ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋•Œ, txh ํŒŒ์ผ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜ ๋˜๋Š” ํŒŒ์ผ๋“ค์˜ ํ•ฉ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

TX_HASH_FILE_MODE ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด ์ œํ•œ ๋ฐฉ์‹์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ Extract๋ณ„๋กœ txh์˜ ํฌ๊ธฐ๋‚˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

TX_HASH_SIZE ์ด์ƒ์œผ๋กœ const Thread ์—์„œ TX ์ •๋ณด๋“ค์ด ์Œ“์ด๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด partํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•˜๊ฒŒ ๋˜๋ฉฐ ๊ด€๋ จ๋œ TX๊ฐ€ commit ๋˜๋Š” rollback๋˜๊ธฐ ์ „๊นŒ์ง€ partfile์€ ์ œ๊ฑฐ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ, ํ•œ TX๊ฐ€ ๋๋‚˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๊ณ„์†ํ•ด์„œ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.


Source DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ๋Š” ํ•ด๋‹น DB์˜ Character Set๊ณผ ์ผ์น˜ํ•˜๋Š” Terminal ๋ฐ OS์˜ LANG ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค.

LANG ์„ค์ •์ด Source DB์˜ Character Set๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด, ProSync๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ๋•Œ ์ž˜๋ชป๋œ ์ธ์ฝ”๋”ฉ์œผ๋กœ ์ธ์‹ํ•˜๊ฒŒ ๋˜์–ด, Target DB๋กœ ์ „์†ก ์‹œ ๋ฌธ์ž ๊นจ์ง ๋˜๋Š” ์†์ƒ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ, Source DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ์‹œ์Šคํ…œ์˜ LANG ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” Source DB์˜ Character Set๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜์‹œ์ผœ์•ผ ํ•˜๋ฉฐ, ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž ๋˜๋Š” ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์—์„œ๋„ ์ผ๊ด€๋œ ๋ฌธ์ž์…‹ ์„ค์ •์ด ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค.

Trigger๊ฐ€ ์„ค์ •๋œ ํ…Œ์ด๋ธ”์„ ๋™๊ธฐํ™”ํ•  ๊ฒฝ์šฐ, Trigger๋กœ ์ธํ•ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฐ์ดํ„ฐ ์ค‘๋ณต์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ Trigger๊ฐ€ Source DB์™€ Target DB์— ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

์œ„์™€ ๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ TEST.T1 ํ…Œ์ด๋ธ”์„ ๋™๊ธฐํ™”ํ•  ๊ฒฝ์šฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ๋ฆ„์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. Source DB์—์„œ TEST.T1 ํ…Œ์ด๋ธ”์— INSERT ์ˆ˜ํ–‰ -> Trigger ์ž‘๋™ -> TEST.T2์—๋„ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

  2. ๋™๊ธฐํ™” ๊ณผ์ •์—์„œ Target DB์— TEST.T1 INSERT ๋ฐ˜์˜ -> Target DB์˜ Trigger ์ž‘๋™ -> TEST.T2์—๋„ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

  3. ๋˜ํ•œ, Source DB์—์„œ ์ถ”์ถœ๋œ TEST.T2์˜ INSERT ๋ฌธ์ด Target DB์— ๋ฐ˜์˜๋˜๋ฉด์„œ ์ค‘๋ณต ์‚ฝ์ž… ๋ฐœ์ƒ

์ด๋กœ ์ธํ•ด Target DB์˜ TEST.T2 ํ…Œ์ด๋ธ”์—๋Š” ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ํ”„๋กœ์‹ฑํฌ ๋™๊ธฐํ™” ๋กœ์ง ์ƒ ์ •ํ•ฉ์„ฑ์ด ํ‹€์–ด์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Target DB์—๋Š” Trigger๊ฐ€ ์กด์žฌํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

Oracle To Tibero ๋™๊ธฐํ™”์˜ ๊ฒฝ์šฐ, ์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ํ…Œ์ด๋ธ”์— ALTER TABLE DDL ์ˆ˜ํ–‰ ์‹œ ์˜ค๋ผํด ๋‚ด๋ถ€ ๋™์ž‘์œผ๋กœ ์ธํ•ด DPI(Direct Path Insert)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ Unique Constraints Violation์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•์ƒ์˜ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ๋ฆ„์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

์ด ๋•Œ, ALTER TABLE ๊ตฌ๋ฌธ์œผ๋กœ ์ธํ•ด ์˜ค๋ผํด ๋‚ด๋ถ€์—์„œ DPI๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ณผ์ •์ด ์ˆ˜ํ–‰๋˜๋Š”๋ฐ, ํ•ด๋‹น DPI ๊ตฌ๋ฌธ์ด ๋™๊ธฐํ™” ํ…Œ์ด๋ธ”๊ณผ ๊ฐ™์€ OBJ_ID๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ํ•จ๊ป˜ ๋™๊ธฐํ™”๊ฐ€ ์ง„ํ–‰๋˜๋ฉฐ Unique Constraints Violation์ด ๋ฐœ์ƒํ•œ๋‹ค.

ํ•ด๋‹น ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œDISCARD_EC ํŒŒ๋ผ๋ฏธํ„ฐ์— UNIQUE VIOLATION Error code๋ฅผ ๊ธฐ์žฌํ•˜์—ฌ ์šฐํšŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

MERGE_BLOCK_CNT/MERGE_RESUME_CNT

CHUNK_TOTAL_SIZE

TX_HASH_SIZE

๋””์Šคํฌ ์‚ฌ์šฉ

TX_HASH_FILE_CNT/TX_HASH_FILE_TOTAL_SIZE

partfile

์ฃผ์˜์‚ฌํ•ญ

Character Set ์„ค์ • ์ฃผ์˜์‚ฌํ•ญ

Source DB์˜ Character Set๊ณผ OS ํ™˜๊ฒฝ ๋ณ€์ˆ˜(LANG) ๋ถˆ์ผ์น˜ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

์ฐธ๊ณ 

์˜ˆ์‹œ

  • Source Database Character Set: UTF-8

  • Terminal ๋ฐ OS LANG ์„ค์ •: EUC-KR ์ด ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ํ•œ๊ธ€ ๋ฐ์ดํ„ฐ๋Š” ์‹ค์งˆ์ ์œผ๋กœ EUC-KR๋กœ ์ธ์ฝ”๋”ฉ๋˜์–ด ์ €์žฅ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ProSync๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ UTF-8๋กœ ๊ฐ„์ฃผํ•˜๊ณ  Target DB์˜ ๋ฌธ์ž์…‹์— ๋งž๊ฒŒ ๋ณ€ํ™˜์„ ์‹œ๋„ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ, ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ž˜๋ชป๋œ ๋ฌธ์ž ๋ณ€ํ™˜์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

Trigger๊ฐ€ ์„ค์ •๋œ ํ…Œ์ด๋ธ” ๋™๊ธฐํ™” ์‹œ ์ฃผ์˜ ์‚ฌํ•ญ

์ฃผ์˜

์ œ์•ฝ ์กฐ๊ฑด์ด ์„ค์ •๋œ ํ…Œ์ด๋ธ” ๋™๊ธฐํ™” ์‹œ ์ฃผ์˜ ์‚ฌํ•ญ

Trigger๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ON DELETE, ON UPDATE์™€ ๊ฐ™์€ ์ œ์•ฝ ์กฐ๊ฑด(Constraint) ๋˜ํ•œ ๋™์ผํ•œ ์ด์œ ๋กœ Target DB์— ์„ค์ •๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

์ด๋Ÿฌํ•œ ์ œ์•ฝ ์กฐ๊ฑด์ด ์กด์žฌํ•  ๊ฒฝ์šฐ, ๋™๊ธฐํ™” ์‹œ ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…ยท์‚ญ์ œยท๊ฐฑ์‹  ์ž‘์—…์ด ์ค‘๋ณต ๋ฐ˜์˜๋˜์–ด ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ๋‹ค.

Oracle To Tibero ๋™๊ธฐํ™” ์‹œ ์ฃผ์˜ ์‚ฌํ•ญ

์ฃผ์˜

์˜ค๋ผํด ๋‚ด๋ถ€ ๋™์ž‘์ด๋ฏ€๋กœ, ์–ด๋–ค ๊ตฌ๋ฌธ ์‹คํ–‰ ์‹œ DPI๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€๋Š” ์ •ํ™•ํžˆ ์•Œ ์ˆ˜ ์—†๋‹ค.

SQL> CREATE OR REPLACE TRIGGER trg_test
AFTER INSERT ON TEST.T1
FOR EACH ROW
BEGIN
INSERT INTO TEST.T2 VALUES (:NEW.C1, 'Trigger Fired');
END;
/
SQL> CREATE TABLE TEST.T1 (
    ROWCNT NUMBER PRIMARY KEY,
    C1 NUMBER,
    C2 VARCHAR2(2000)
) ROW STORE COMPRESS ADVANCED;

SQL> INSERT INTO TEST.T1 (1, 1001, RPAD('C', 4000, 'C'));
SQL> INSERT INTO TEST.T1 (2, 1002, RPAD('B', 4000, 'B'));
SQL> COMMIT;

SQL> ALTER TABLE TEST.T1 MOVE ONLINE NOCOMPRESS;
-- Unique Constraints Violation ๋ฐœ์ƒ