2. altiComp#
이 장은 altiComp 유틸리티의 기능을 소개하고, 불일치하는 데이터를 비교하고 일치시키는 기능 등을 설명한다.
altiComp 소개#
Altibase altiComp 유틸리티는 두 Altibase 간의 이중화 중에 발생한 데이터 불일치를 해결하기 위해 사용한다.
altiComp은 Altibase 데이터베이스를 또 다른 Altibase 데이터베이스와 테이블 단위로 비교, 검사하여 불일치 정보를 출력한다. 또한 불일치 데이터가 발생한 경우에는 두 데이터베이스를 일치시키는 기능도 제공한다.
altiComp 용어#
Master Server#
두 서버 간의 불일치 레코드 발견 시 수정을 하는 기준이 되는 서버이다. altiComp 실행 시 어느 쪽 서버도 master로 지정될 수 있다.
Master DB#
Master Server의 데이터베이스이다.
Slave Server#
두 서버 간의 불일치 레코드 발견 시 기준 데이터베이스에 따라서 수정이 되는 쪽 서버이다. altiComp 실행 시 어느 쪽 서버도 slave로 지정될 수 있다.
Slave DB#
Slave Server의 데이터베이스이다.
불일치 레코드(Different Record)#
Master DB의 지정 테이블과 Slave DB의 지정 테이블간에 주요 키(Primary Key)를 기준으로 칼럼 값이 일치하지 않는 레코드를 의미한다.
불일치 레코드가 발생하는 이유는 다음의 세 가지 경우이다.
MOSX 불일치#
특정 레코드가 주요 키를 기준으로 Master DB에는 있으나, Slave DB에는 없는 경우
MOSO 불일치#
특정 레코드가 주요 키를 기준으로 Master DB와 Slave DB에도 있지만, 레코드의 내용이 다른 경우
MXSO 불일치#
특정 레코드가 주요 키를 기준으로 Master DB에는 없고, Slave DB에는 있는 경우
일치 정책(Synchronization Policy)#
일치 정책은 불일치 레코드를 일치시키는 방법을 명시하는 정책이다. altiComp 프로그램은 기본적으로 Master DB를 기준 DB로 고정하고, Slave DB를 일치시키는 정책을 채택하고 있다.
Altibase는 일치 정책으로 다음과 같은 네 가지 방법을 제공한다.
SU 정책#
MOSO 불일치를 해소하는 정책으로, Master DB의 레코드 내용으로 Slave DB를 변경(update)한다.
SI 정책#
MOSX 불일치를 해소하는 정책으로, Master DB의 레코드를 Slave DB에 삽입(insert)한다.
MI 정책#
MXSO 불일치를 해소하는 정책으로. Slave DB의 레코드를 Master DB에 삽입(insert)한다.
SD 정책#
MXSO 불일치를 해소하는 정책으로, Slave DB의 레코드를 삭제(delete)한다.
SU 정책, SI 정책, MI 정책, SD 정책은 사용자가 altiComp 환경 파일을 사용하여 지정할 수 있다. 단, MI 정책과 SD 정책은 서로 배타적이므로, 동시에 지정할 수 없다는 것을 주의하라.
DIFF#
Master DB와 Slave DB간의 이중화 작업에서 발생할 수 있는 불일치 레코드를 식별하여 실행 결과 파일로 생성하는 기능을 가진다.
SYNC#
Master DB와 Slave DB 사이의 불일치 레코드를 식별하여 altiComp 환경 파일에 기술된 일치 정책에 따라 양방향으로 반영하여 불일치를 해소하고, 실행 요약정보와 에러 정보를 포함하는 실행 결과 파일을 생성한다.
altiComp 환경 파일#
altiComp를 실행하기 위한 옵션을 지정하는 환경 파일이다. 이 파일은 연결정보, altiComp 기능 설정, 일치 정책 등의 내용을 포함한다.
altiComp 사용 방법#
이 절에서는 altiComp을 실행하기 위한 정보를 기술하는 altiComp 환경 파일을 먼저 설명하고, 비교(DIFF)와 일치(SYNC) 기능에 대해 설명한다.
altiComp 실행 방법#
altiComp 기능을 사용하기 위해서는 먼저 DIFF 또는 SYNC를 수행할 테이블에 대한 정보를 가지고 있는 altiComp 환경 파일을 만들어야 한다. altiComp 환경 파일은 운용 방법의 altiComp 환경 파일에서 설명한다.
altiComp 명령은 다음과 같은 형태를 갖는다.
$ altiComp -f script_file_name
- script_file_name : 환경 파일의 경로명을 포함한 파일 이름
현재 디렉토리가 /user/charlie/altibase_home/altiComp 라면
/user/charlie/altibase_home/altiComp$ altiComp script_file_name
또는
/user/charlie/altibase_home/altiComp$ altiComp ./script_file_name
altiComp 프로퍼티 설정#
비교 또는 일치 작업의 내용을 기술하는 환경 파일로, 각각의 고유한 프로퍼티를 포함한다. 프로퍼티는 altiComp 유틸리티 실행에 필요한 정보를 기술한다. ($ALTIBASE_HOME/altiComp 디렉터리 밑에 제시된 sample.cfg 참조)
설정 규칙#
프로퍼티는 프로퍼티 이름 = 프로퍼티 값
의 형식으로 구성되며, 대소문자 구분이 없다.
환경 파일은 다음과 같은 특별한 의미를 가지는 기호를 포함할 수 있다.
-
" # " 기호는 주석(comment)으로 이후의 문자열은 무시된다.
-
" { } " 기호는 프로퍼티 값을 여러 줄로 기술하기 위한 목적으로 사용된다.
-
" ; " 기호는 여러 개의 값을 분리하기 위한 구분자 역할을 한다.
-
" " " 기호: 사용자 이름, 비밀번호 또는 테이블 이름, 칼럼 이름에 예약어 또는 특수 문자가 포함되어 있다면, 이 기호로 해당 문자열을 감싸준다. Altibase에서 특수 문자는 ~, !, \@, #, $, %, ^, &, *, (, ), _, +, | 이다.
프로퍼티 이름#
공백이 없는 문자로 구성되며, 프로퍼티 그룹 내에서 식별하도록 하는 이름이다.
프로퍼티 값#
단일 값(single value), 다중 값(multi value) 또는 표현식(expression)을 가질 수 있다.
-
표현식은 공백이 가능하며, 대부분의 프로퍼티는 이 형태의 값을 가진다.
예: TABLE = EMPLOYEE
-
다중 값은 ";" 분리자로 구분되는 여러 개의 단일 값을 가지며, 특히 여러 줄에 기술할 때는 "{ }" 기호 안에 값을 기술한다(예2). 다중 값이 허용되는 프로퍼티는 EXCLUDE 이다.
예: - EXCLUDE = ENO; DNO; ENAME - EXCLUDE = {ENO; DNO; ENAME}
-
표현식은 공백을 포함한 문자열을 표현하기 위한 것이며, 반드시 "{ }" 기호 안에 기술되어야 한다. 표현식을 가지는 프로퍼티는 WHERE 이다.
예: WHERE = { ENO > '1000' and ENO < '2000' }
데이터 타입 지원#
altiComp 대상에서 특정 칼럼을 제외시키려면 프로퍼티 EXCLUDE를 다음과 같이 사용한다.
예: EMP 테이블에 CLOB 칼럼이 존재할 때, 해당 칼럼을 altiComp 대상에서 제외한다.
TABLE = EMP
EXCLUDE = { CCC }
프로퍼티 옵션#
altiComp 유틸리티는 아래의 프로퍼티로 Local Server와 Remote Server의 접속 정보 및 비교(DIFF) 작업, 일치(SYNC)작업, 불일치 레코드에 대한 일치 정책을 지정할 수 있다.
DB_MASTER#
두 서버 간의 불일치 레코드 발견 시 데이터 수정의 기준으로 하려는 서버를 지정한다.
값은 사용자명, 패스워드, 서버의 IP 주소 또는 서버명, NLS_USE 를 지정한다. 각 프로퍼티의 값은 Altibase 홈 디렉터리의 프로퍼티 파일에 있는 정보와 일치하여야 한다.
-
TCP 접속:
DB_MASTER = altibase://sys:manager@DSN=192.188.1.1;PORT_NO=20300;NLS_USE=US7ASCII
-
SSL 접속:
DB_MASTER = altibase://sys:manager@DSN=192.188.1.1;PORT_NO=${ALTIBASE_SSL_PORT_NO};NLS_USE=US7ASCII;CONNTYPE=6;SSL_CA=/home/altibase/cert/ca-cert.pem;SSL_CERT=/home/altibase/cert/client-ert.pem;SSL_KEY=/home/altibase/cert/client-key.pem
- 연결 문자열의 SSL 관련 속성은 SSL/TLS User's Guide를 참고하기 바란다.
DB_SLAVE#
상대 서버를 지정한다.
값은 사용자명, 패스워드, 서버의 IP 주소 또는 서버명, NLS_USE 를 지정한다. 프로퍼티 값은 Altibase 홈 디렉터리의 프로퍼티 파일에 있는 정보와 일치하여야 한다.
OPERATION#
비교 작업을 하는 경우에는 "DIFF"를, 일치 작업을 하는 경우에는 "SYNC"를 지정한다.
INSERT_TO_SLAVE#
MOSX 불일치에 대한 SI정책을 지정. 해당 레코드의 Slave DB에 삽입(insert) 여부를 결정한다. 프로퍼티 값은 "ON", "OFF"를 가질 수 있으며, "ON"이면 삽입하고, "OFF"이면 삽입하지 않는다.
INSERT_TO_MASTER#
MXSO 불일치에 대한 MI정책을 지정. 해당 레코드의 Master DB에 삽입(insert) 여부를 결정. 프로퍼티 값은 "ON", "OFF"를 가질 수 있으며, "ON"이면 삽입하고, "OFF"이면 삽입하지 않는다.
DELETE_IN_SLAVE 프로퍼티 값과 동시에 "ON"을 가질 수 없다.
DELETE_IN_SLAVE#
MXSO 불일치에 대한 SD정책을 지정. 해당 레코드의 Slave DB에서 삭제(delete) 여부를 결정. 프로퍼티 값은 "ON", "OFF"를 가질 수 있으며, "ON"이면 삭제하고, "OFF"이면 삭제하지 않는다.
INSERT_TO_MASTER 프로퍼티 값과 동시에 "ON"을 가질 수 없다.
UPDATE_TO_SLAVE#
MOSO 불일치에 대한 SU정책을 지정. 해당 레코드의 Slave DB에서 수정(update) 여부를 결정. 프로퍼티 값은 "ON", "OFF"를 가질 수 있으며, "ON"이면 수정하고, "OFF"이면 수정하지 않는다.
CHECK_INTERVAL#
테이블에 대하여 SYNC 작업을 한 후 다음 테이블의 SYNC 작업을 하기 전에 지정한 시간만큼 간격을 둔다. 단위는 MS(Millisecond)이다.
MAX_THREAD#
운영하기 위한 쓰레드의 개수를 지정한다. 작업하려는 쓰레드의 개수를 제한 없이 사용하려면 "-1"을 명시한다.
COUNT_TO_COMMIT#
변경된 데이터(Insert, Delete, or Update)를 몇 건 단위로 커밋할 것인가를 나타내는 단위 옵션이다. 기본값은 1000건 단위로 커밋한다.
FILE_MODE_MAX_ARRAY#
이 값이 1보다 크면 작업 대상 테이블의 데이터를 파일에 저장한 후, 파일의 데이터에 대해서 SYNC 또는 DIFF 작업을 수행하게 된다. 이 값은 array fetch 하기 위한 array의 사이즈로 사용되고, altiComp는 지정한 값만큼의 레코드를 array fetch하여 csv 형식으로 파일에 저장한다.
이 옵션은 대용량의 테이블에 대한 altiComp 작업 성능을 향상시키기 위해 사용할 수 있으나, 대상 테이블에 LOB타입의 칼럼이 있으면 이 옵션을 사용해도 성능 향상이 미미할 수 있다.
이 옵션은 Altibase 서버간의 SYNC 또는 DIFF 작업 시에만 사용할 수 있다.
예: FILE_MODE_MAX_ARRAY = 1000
DIFF LOG 옵션#
DIFF는 Master DB의 지정 테이블과 Slave DB의 지정 테이블 간에 주요 키(Primary Key)를 기준으로 레코드 값을 비교하여 실행 결과 파일에 기록하는 작업이다. 4가지 유형의 레코드 비교 결과를 실행 결과 파일에 기록 여부를 설정할 수 있도록 각각의 프로퍼티를 제공한다.
프로퍼티 값은 "ON", "OFF"를 가질 수 있으며, "ON"이면 기록하고, "OFF"이면 기록 하지 않는다. 프로퍼티를 지정하지 않으면 기본값에 따라 동작한다.
1. LOG_EQ_MOSO#
PK를 포함한 모든 칼럼의 값이 일치하는 레코드(EQ_MOSO)를 실행 결과 파일에 기록할지 결정하는 프로퍼티이다. 프로퍼티를 지정하지 않으면 "OFF"로 동작한다.
이 옵션은 대용량 테이블을 비교할 때, 실행 결과 파일 용량이 커질 수 있으므로 주의해서 사용해야 한다.
2. LOG_DF_MOSO#
PK는 동일하지만 나머지 칼럼값 중 하나라도 일치하는 않는 레코드(DF_MOSO)를 실행 결과 파일에 기록할지 결정하는 프로퍼티이다. 프로퍼티를 지정하지 않으면 "ON"으로 동작한다.
3. LOG_MOSX#
Master DB에는 있으나, Slave DB에는 없는 레코드(MOSX)를 실행 결과 파일에 기록할지 결정하는 프로퍼티이다. 프로퍼티를 지정하지 않으면 "ON"으로 동작한다.
4. LOG_MXSO#
Master DB에는 없지만, Slave DB에는 있는 레코드(MXSO)를 실행 결과 파일에 기록할지 결정하는 프로퍼티이다. 프로퍼티를 지정하지 않으면 "ON"으로 동작한다.
TABLES 그룹#
실행 대상이 되는 테이블에 관련된 정보를 정의한다. 이 그룹은 실행 대상이 되는 테이블의 개수만큼 기술되어야 하며, 반드시 그룹명은 Master DB의 테이블 이름이어야 한다.
이 그룹에서 지정할 수 있는 프로퍼티는 다음과 같다.
WHERE#
테이블의 레코드를 selection하는 조건을 지정한다. SQL 문의 WHERE 절에 기술하는 방식과 동일하게 기술한다. 다중 값을 허용하며, ";" 구분자로 여러 조건을 지정하는 것은 불가능하다. 또한 이 프로퍼티에는 주석을 달 수 없다. 비교(DIFF)와 일치(SYNC) 기능에 적용된다.
EXCLUDE#
테이블의 레코드를 projection하는 조건을 지정한다. 프로퍼티 값은 다중 값으로 기술해야 한다. 기술된 칼럼들은 비교와 일치 작업에서 제외된다.
WHERE와 EXCLUDE를 적절히 조합하면, selection과 projection을 결합한 결과에 대해 altiComp 작업을 수행할 수 있다.
TABLE#
Slave DB의 테이블 이름을 지정한다. Master DB와 Slave DB의 테이블 이름이 다른 경우에는 반드시 기술해야 하며, 비교(DIFF)와 일치(SYNC)기능에 적용된다. 생략하면 Master DB의 테이블 이름과 동일하게 지정된다.
단, 테이블 이름은 반드시 영문 및 숫자와 해당 특수문자((공백,~, !, \@, #, $, %, ^, &, *, (, ), _, +, |)로 지정해야 하며, 한글은 사용할 수 없다.
SCHEMA#
Slave Db의 테이블 스키마를 기술한다.
Slave의 접속하는 사용자의 스키마 이름과 대상 테이블의 스키마가 다른 경우에 반드시 기술해야 하며, 생략하면 Slave의 접속 사용자의 스키마를 사용하게 된다.
비교(DIFF) 기능#
Master DB와 Slave DB 간의 이중화 작업에서 발생할 수 있는 불일치 레코드를 식별하여 실행 결과 파일로 생성하는 기능을 가진다.
환경 파일#
altiComp 환경 파일의 OPERATION 프로퍼티 값을 "DIFF"로 지정한다.
실행 옵션의 모든 프로퍼티 파일을 기술해야 하며, 테이블 그룹의 WHERE, EXCLUDE, TABLE, SCHEMA 프로퍼티를 선택적으로 기술한다.
실행방법#
비교(DIFF)기능은 다음과 같이 실행한다.
$ altiComp -f script_file_name
- script_file_name : 환경 파일의 경로명을 포함한 파일 이름
실행결과#
실행 결과로, 실행결과에 대한 요약 정보를 포함하는 실행 로그 파일과 테이블 별로 Master Database와 Slave Database의 내용을 비교하여 불일치가 발생한 레코드의 불일치 칼럼 내용을 포함하는 실행 결과 파일이 생성된다.
예를 들어, /user/charlie/altibase_home/altiComp$ altiComp sample.cfg
과 같이 altiComp 명령을 실행했을 때, altiComp 명령이 성공적으로 실행되면 altiComp 디렉터리 하위에는 sample.log와 각각의 테이블에 대한 "마스터 테이블-사용자명.슬레이브 테이블.log" 파일이 생성된다.
실행 로그 파일#
"script_file_name.log" 이름으로 생성되며 실행한 환경 파일의 내용을 출력하고, 각 TABLES 그룹의 테이블에 대한 비교(DIFF)작업의 요약 정보를 출력한다.
환경 파일의 내용은 다음과 같이 출력된다.
INFO[ MNG ] Tread # 0 init is OK!
INFO[ MNG ] Tread # 0 start is OK!
[TAB_2->TAB_2]
Fetch Rec In Master: 3
Fetch Rec In Slave : 2
MOSX = DF, Count : 1
MXSO = DF, Count : 0
MOSO = DF, Count : 1
MOSO = EQ, Count : 1
SCAN TPS: 20547.95
Time: 0.00 sec
실행 결과 파일#
마스터 테이블-사용자명.슬레이브 테이블.log
이름으로 생성되며, 비교 결과를 다음과 같은 형식으로 표현한다.
DF[m,n]-> COL_N (Vn_M, Vn_S):PK->{ PCOL_V }
-
DF : 불일치 원인 (MOSX, MOSO, MXSO)
-
m : Master Server의 레코드 순서
-
n : Slave Server의 레코드 순서
-
COL_N : 비교결과 다른 값을 가지는 첫 칼럼 이름
-
Vn_M : Master Server의 해당 칼럼의 값
-
Vn_S : Slave Server의 해당 칼럼의 값
단, 데이터 타입이 LOB인 칼럼이 있는 레코드의 경우 해당 칼럼의 값이 기록되지 않는다.
비교(DIFF) 예제#
host1의 EMP 테이블과 host2의 EMPLOYEES 테이블, 그리고 host1의 DEPARTMENTS 테이블과 host2의 DEPARTMENTS 테이블에 대해 비교(DIFF) 기능을 수행하는 예제는 다음과 같다.
DIFF 예제 1#
DB_MASTER를 host1, DB_SLAVE를 host2로 지정하고, 각각의 테이블의 모든 레코드를 비교하는 경우에 환경설정 파일은 다음과 같다
DB_MASTER = "altibase://sys:manager@DSN=host1;PORT_NO=10111;NLS_USE=US7ASCII"
DB_SLAVE = "altibase://sys:manager@DSN=host2;PORT_NO=20111;NLS_USE=US7ASCII"
OPERATION = DIFF
MAX_THREAD = -1
DELETE_IN_SLAVE = ON
INSERT_TO_SLAVE = ON
INSERT_TO_MASTER = ON
UPDATE_TO_SLAVE = ON
LOG_DIR = "./"
LOG_FILE = "sample.log"
[EMP]
TABLE = EMPLOYEES
SCHEMA = SYS
[DEPARTMENTS]
TABLE = DEPARTMENTS
SCHEMA = SYS
위 예제와 같이 Master Server(host1)의 대상 테이블 이름과 Slave Server(host2)의 대상 테이블 이름이 다를 수 있다.
DIFF 예제 2#
EMP 테이블의 ENO 칼럼을 기준으로 selection하고, JOIN_DATE, SEX 칼럼은 비교 대상에서 제외하는 경우는 다음과 같다.
CONDITION 프로퍼티 값에 따라, 비교 대상이 되는 EMP 레코드는 "ENO가 1 이상이고 20 이하"인 레코드로 제한된다.
또한 EXCLUDE 프로퍼티 값에 따라, JOIN_DATE 와 SEX는 비교 대상에서 제외된다.
즉, 다른 모든 칼럼은 같고, JOIN_DATE와 SEX만 다르다면 레코드는 동일한 것으로 처리된다.
[EMP]
TABLE = EMPLOYEES
WHERE = {ENO >= 1 and ENO <= 20}
EXCLUDE = {JOIN_DATE; SEX}
[DEPARTMENTS]
DIFF 예제 3#
EMP 테이블의 ENO 칼럼과 JOIN_DATE를 기준으로 selection하고, SEX 칼럼은 비교 대상에서 제외하는 경우는 다음과 같다.
[EMP]
TABLE = EMPLOYEES
WHERE = {(ENO >= 1 and ENO <= 20) or (JOIN_DATE >= '20001010')}
EXCLUDE = {SEX}
[DEPARTMENTS]
WHERE 프로퍼티 값에 따라, 비교 대상이 되는 EMP 레코드는 "ENO가 1 이상이고 20 이하" 또는 "JOIN_DATE가 2000년 10월 10일 이후"인 레코드로 제한된다. 또한 EXCLUDE 프로퍼티 값에 따라, SEX는 비교 대상에서 제외된다.
일치(SYNC) 기능#
Master DB와 Slave DB 사이의 불일치 레코드를 식별하여 altiComp 환경 파일에 기술된 일치 정책에 따라 양 방향으로 반영하여 불일치를 해소하고, 실행요약정보와 에러정보를 포함하는 실행 결과 파일을 생성한다.
환경 파일#
altiComp 환경 파일의 OPERATION 프로퍼티 값을 "SYNC"로 지정한다.
실행 옵션의 모든 프로퍼티 파일을 기술해야 하며, 테이블 그룹의 WHERE, EXCLUDE, TABLE, SCHEMA 프로퍼티는 선택적으로 기술한다
실행방법#
일치(SYNC)기능은 다음과 같이 실행한다.
$ altiComp -f script_file_name
- script_file_name : 환경 파일의 경로명을 포함한 파일 이름
실행결과#
실행 결과로, 실행의 요약정보를 포함하는 실행 로그 파일과 테이블 별로 Master Database와 Slave Database의 내용을 비교하여 불일치가 발생한 레코드에 대한 일치 작업의 정보를 포함하는 실행 결과 파일, 일치 작업중 발생한 에러에 관한 정보를 포함하는 에러로그 파일로 구성된다.
실행 로그 파일#
script_file_name.log
이름으로 생성되며 실행한 환경 파일의 내용을 출력하고, 각 TABLES 그룹의 테이블에 대한 일치(SYNC)작업의 요약 정보를 출력한다.
환경 파일의 내용은 다음과 같이 출력된다.
INFO[ MNG ] Tread # 0 init is OK!
INFO[ MNG ] Tread # 0 start is OK!
[TAB_2->TAB_2]
Fetch Rec In Master: 3
Fetch Rec In Slave : 2
MOSX = -, SI
MXSO = -, -
MOSO = -, SU
MXSX = -, -
-----------------------------------------
Operation Type MASTER SLAVE
-----------------------------------------
INSERT Try 0 1
Fail 0 0
UPDATE Try X 1
Fail X 0
DELETE Try X 0
Fail X 0
-----------------------------------------
UPDATE Try 0 2
Fail 0 0
OOP TPS: 13698.63
SCAN TPS: 20547.95
Time: 0.00 sec
만일 실패한 레코드가 있다면, 해당 레코드는 에러로그 파일에 원인과 레코드 내용이 출력된다.
일치(SYNC) 예제#
불일치 레코드를 해소하기 위한 일치 정책에 관련된 OPERATION와 TABLE을 지정하는 예제를 제시한다.
SYNC 예제 1#
MOSX 불일치레코드(Master Server에는 있지만, Slave Server에는 없는 레코드)를 Slave Server에 삽입하고, MXSO 불일치 레코드 (Slave Server에는 있지만, Master Server에는 없는 레코드)는 무시한다고 가정하자.
Master Server = "altibase://sys:manager@DSN=host1;PORT_NO=10111;NLS_USE=US7ASCII"
Sla��������r = "alt������������������������������������������������USE=US7ASCII"
OPERATION = SYNC
MAX_THREAD = -1
DELETE_IN_SLAVE = OFF
INSERT_TO_SLAVE = ON
INSERT_TO_MASTER = OFF
UPDATE_TO_SLAVE = ON
LOG_DIR = "./"
LOG_FILE = "sample.log"
[EMP]
TABLE = EMPLOYEES
SCHEMA = SYS
[DEPARTMENTS]
TABLE = DEPARTMENTS
SCHEMA = SYS
MOSX 불일치 레코드를 해소하기 위해 필요한 일치 정책은 SI 정책이므로, INSERT_TO_SLAVE 프로퍼티 값을 "ON"으로 지정하였다. 또한 MXSO 불일치 레코드는����������므로������������일치 정책인 MI, SD 정책에 관련된 INSERT_TO_MASTER와 DELETE_IN_SLAVE 프로퍼티는 "OFF"로 지정한다.
SYNC 예제 2#
MOSX 불일치레코드(Master Server에는 있지만, Slave Server에는 없는 레코드)를 Slave Server에 삽입하고, MXSO 불일치 레코드(Slave Server에는 있지만, Master Server에는 없는 레코드)는 Master Server에 삽입한다고 가정하자.
Master Server = "altibase://sys:manager@DSN=host1;PORT_NO=10111;NLS_USE=US7ASCII"
Slave Server = "altibase://sys:manager@DSN=host2;PORT_NO=20111;NLS_USE=US7ASCII"
OPERATION = SYNC
MAX_THREAD = -1
DELETE_IN_SLAVE = OFF
INSERT_TO_SLAVE = ON
INSERT_TO_MASTER = ON
UPDATE_TO_SLAVE = ON
LOG_DIR = "./"
LOG_FILE = "sample.log"
[EMP]
TABLE = EMPLOYEES
SCHEMA = SYS
[DEPARTMENTS]
TABLE = DEPARTMENTS
SCHEMA = SYS
MOSX 불일치 레코드를 해소하기 위해 필요한 일치 정책은 SI 정책이므로, INSERT_TO_SLAVE 프로퍼티 값을 "ON"으로 지정한다. 또한 MXSO 불일치레코드는 Master Server����삽입해야��������������에, 필요한 일치 정책은 MI 정책이다. 따라서 이에 관련된 INSERT_TO_MASTER 프로퍼티를 "ON" 으로 지정하고, DELETE_IN_SLAVE 프로퍼티를 "OFF"로 지정한다.
SYNC 예제 3#
Master Server와 동일하게 Slave Server를 일치시킨다고 가정하자.
Master Server = "altibase://sys:manager@DSN=host1;PORT_NO=10111;NLS_USE=US7ASCII"
Slave Server = "altibase://sys:manager@DSN=host2;PORT_NO=20111;NLS_USE=US7ASCII"
OPERATION = SYNC
MAX_THREAD = -1
DELETE_IN_SLAVE = ON
INSERT_TO_SLAVE = ON
INSERT_TO_MASTER = OFF
UPDATE_TO_SLAVE = ON
LOG_DIR = "./"
LOG_FILE = "sample.log"
[EMP]
TABLE = EMPLOYEES
SCHEMA = SYS
[DEPARTMENTS]
TABLE = DEPARTMENTS
SCHEMA = SYS
Master Server와 동일하게 Slave Server를 일치시키기 위해서 필요한 일치 정책은 SI정책, SD 정책이다. 따라서, INSERT_TO_SLAVE와 DELETE_IN_SLAVE 프로퍼티 값을 "ON"으로 지정하였다.
SYNC 예제 4#
$ALTIBASE_HOME/sample/APRE/schema
디렉터리의 schema.sql을 참조하여 지역서버 host1의 EMPLOYEES 테이블과 원격 서버 host2의 EMPLOYEES 테이블(ENO에서 16번부터 20번까지 삭제), 그리고 host1 서버의 DEPARTMENTS 테이블과 host2 서버의 DEPARTMENTS 테이블에 대해 일치(SYNC) 기능을 수행하는 간단한 예제이다.
먼저 지역서버와 원격서버에 이중화 연결을 생성한다.
지역서버의 경우(IP: 192.168.1.11)
iSQL> CREATE REPLICATION rep1 WITH '127.0.0.1', 56342 FROM sys.employees TO sys.employees, FROM sys.departments TO sys.departments;
Create Success.
원격서버의 경우(IP: 127.0.0.1)
iSQL> CREATE REPLICATION rep1 WITH '192.168.1.11', 65432 FROM sys.employees TO sys.employees, FROM sys.departments TO sys.departments;
Create Success.
현재 디렉터리가 /user/charlie/altibase_home/altiComp 이라면
$ vi sample.cfg
Master Server = "altibase://sys:manager@DSN=127.0.0.1;PORT_NO=20582;NLS_USE=US7ASCII"
Slave Server = "altibase://sys:manager@DSN=192.168.1.11;PORT_NO=20582;NLS_USE=US7ASCII"
OPERATION = SYNC
MAX_THREAD = -1
DELETE_IN_SLAVE = ON
INSERT_TO_SLAVE = ON
INSERT_TO_MASTER = OFF
UPDATE_TO_SLAVE = ON
LOG_DIR = "./"
LOG_FILE = "sample.log"
[ EMPLOYEE S]
WHERE = {ENO >= 1 and ENO <= 20}
TABLE = EMPLOYEES
SCHEMA = SYS
[ DEPARTMENTS ]
TABLE = DEPARTMENTS
SCHEMA = SYS
$ altiComp -f sample.cfg
$ cat sample.log
INFO[ MNG ] Tread # 0 init is OK!
INFO[ MNG ] Tread # 1 init is OK!
INFO[ MNG ] Tread # 0 start is OK!
INFO[ MNG ] Tread # 1 start is OK!
[DEPARTMENTS->DEPARTMENTS]
Fetch Rec In Master: 5
Fetch Rec In Slave : 5
MOSX = NO
MXSO = NO
MOSO = SU
--------------------------------------------
Operation Type MASTER SLAVE
--------------------------------------------
INSERT Try 0 0
Fail 0 0
UPDATE Try X 0
Fail X 0
DELETE Try X 0
Fail X 0
--------------------------------------------
UPDATE Try 0 0
Fail 0 0
OOP TPS: 0.00
SCAN TPS: 60240.96
Time: 0.00 sec
[EMPLOYEES->EMPLOYEES]
Fetch Rec In Master: 20
Fetch Rec In Slave : 15
MOSX = NO
MXSO = NO
MOSO = SU
-------------------------------------------
Operation Type MASTER SLAVE
-------------------------------------------
INSERT Try 0 5
Fail 0 0
UPDATE Try X 0
Fail X 0
DELETE Try X 0
Fail X 0
-------------------------------------------
UPDATE Try 0 5
Fail 0 0
OOP TPS: 576.04
SCAN TPS: 2304.15
Time: 0.01 sec