CYCLONE 이중화가 실패하는 경우
MASTER 와 SLAVE 간의 테이블 메타정보가 일치하지 않아서 이중화가 되지 않는 경우도 있지만,
이중화가 성공적으로 수행 된 후, 나중에 발생되는 DDL 문으로 인해서 이중화가 실패하는 경우도 발생합니다.
GIVE-UP 이후부터터는 이중화가 진행되지 않습니다.
이 때 진행되지 않는 범위는 CYCLONE 전체가 아닌 GIVE-UP 이 발생된 테이블에만 종속됩니다.
* CYCLONE 사용해보기 - 이후 이어지는 포스팅
CYCLONE 이 GIVE-UP 된 상황 발생 시 이중화 재수행 방법
CYCLONE MASTER 의 Group1 T1 테이블이 GIVE-UP 이 발생되었습니다.
$ cyclone --master --info --group group1 ================================================ GROUP NAME = GROUP1 ================================================ SCHEMA NAME : PUBLIC TABLE NAME : T1 (GIVE-UP (DDL-LSN:173080)) PHYSICAL ID : 80801219739648 ================================================ SCHEMA NAME : PUBLIC TABLE NAME : T2 (ACTIVE (CAPTURE-START-LSN:173004)) PHYSICAL ID : 80809809674240 ================================================ TOTAL COUNT : 2 GIVE-UP COUNT : 1 ================================================
T2 테이블은 이중화가 잘 되는지 확인해봅니다. 확인 결과 잘 되고 있습니다.
M-gSQL> INSERT INTO T2 VALUES (1, 1); M-gSQL> COMMIT;
S-gSQL> SELECT * FROM T2; C1 C2 -- -- 1 1
GIVE-UP 된 T1 테이블에 대해서 이중화를 재구동하여 이중화를 다시 수행합니다.
이 때 로직은 다음과 같습니다.
1. CYCLONE 을 종료합니다.
2. RESET 옵션을 부여하여 CYCLONE 을 구동합니다.
RESET 옵션 부여시 아래와 같습니다.
1. GIVE-UP 된 테이블을 RESET 옵션을 부여하여 재구동 하는 경우, GIVE-UP 시점부터가 아닌 RESET 시점부터 이중화가 진행됩니다.
2. GIVE-UP 된 테이블이 아닌 경우 RESET 옵션을 부여하지 않아도 됩니다.
3. 이중화 재구동시 RESET 옵션에 속하지 않은 테이블은, CYCLONE 을 종료한 시점 이후부터 이중화가 진행됩니다.
GIVE-UP 된 테이블에 대한 이중화를 재구동 하는방법입니다.
예제) $ cyclone --master --start --reset PUBLIC.T1, [SCHEMA_NAME.TABLE_NAME, SCHEMA_NAME.TABLE_NAME ..]
$ cyclone --master --start --reset PUBLIC.T1
GIVE-UP 된 테이블 RESET 옵션을 부여하여 이중화 재수행
이중화를 종료합니다.
$ cyclone --master --stop stop done.
$ cyclone --slave --stop stop done.
T1 테이블에 데이터를 적재합니다.
M-gSQL> INSERT INTO T1 VALUES (1, 1); M-gSQL> COMMIT;
T2 테이블에 데이터를 적재합니다. T2 는 GIVE-UP 대상이 아니기 때문에 CYCLONE 재구동시 데이터가 반영됩니다.
M-gSQL> INSERT INTO T2 VALUES (1, 1); M-gSQL> COMMIT;
T1 테이블을 이중화를 RESET 옵션을 부여하여 재구동 합니다.
이중화 대상이 현시점부터이므로 위의 T1 데이터는 반영되지 않습니다.
$ cyclone --master --start --reset PUBLIC.T1 $ [GROUP1] Startup done as Master.
$ cyclone --slave --start $ [GROUP1] Startup done as Slave.
--info 옵션을 사용하여 GIVE-UP 테이블을 확인합니다.
$ cyclone --master --info --group group1 ================================================ GROUP NAME = GROUP1 ================================================ SCHEMA NAME : PUBLIC TABLE NAME : T2 (ACTIVE (CAPTURE-START-LSN:173004)) PHYSICAL ID : 80809809674240 ================================================ SCHEMA NAME : PUBLIC TABLE NAME : T1 (ACTIVE (CAPTURE-START-LSN:173107)) PHYSICAL ID : 80818399608832 ================================================ TOTAL COUNT : 2 GIVE-UP COUNT : 0 ================================================
T1, T2 테이블에 데이터를 적재합니다.
M-gSQL> INSERT INTO T1 VALUES (2, 2); M-gSQL> COMMIT;
M-gSQL> INSERT INTO T2 VALUES (2, 2); M-gSQL> COMMIT;
이중화된 데이터를 확인합니다.
S-gSQL> SELECT * FROM T1; C1 C2 -- -- 2 2
S-gSQL> SELECT * FROM T2; C1 C2 -- -- 1 1 2 2
이 옵션은 GIVE-UP 시점부터 이중화 재구동 시간사이의 데이터 변경에 대해 반영이 되지 않습니다.
SYNC 옵션을 사용하여 반영할 수 있으며, 이때는 다른 절차가 필요합니다.
CYCLONE SYNC 옵션을 사용하여 GIVE-UP 된 테이블의 데이터를 완전 동기화하기
'Database > Goldilocks' 카테고리의 다른 글
[GOLDILOCKS] CYCLONE SYNC 옵션을 사용하여 GIVE-UP 된 테이블의 데이터를 완전 동기화하기 (0) | 2018.07.09 |
---|---|
[GOLDILOCKS] CYCLONE 중 메타 변경을 위한 DDL 수행하기 (0) | 2018.07.07 |
[GOLDILOCKS] CYCLONE 환경구축 및 사용해보기 (0) | 2018.07.07 |
[GOLDILOCKS] ODBC - SQLSetDescField, SQLGetDescField, SQLSetDescRec, SQLGetDescRec 사용법 (0) | 2018.07.03 |
[GOLDILOCKS] ODBC - SQLSetEnvAttr, SQLGetEnvAttr 사용법 (0) | 2018.07.03 |