3. 사용법#
이 장에서는 oraAdapter를 구동하고 종료하는 방법과 Adapter for Oracle을 사용하는 방법에 대해 자세히 설명한다.
oraAdapter 제약조건#
oraAdapter를 사용하기 위해서 여러가지 제약 조건이 있다. 이 조건을 만족하지 않을 경우 oraAdapter를 사용할 수 없다.
선행조건#
-
목표 데이터베이스(Oracle)에 입력/수정/삭제 연산시 충돌(Conflict)이 발생하면 연산은 취소되고 설정에 따라 에러 로그 파일에 메시지를 남기거나 무시한다.
-
복제 도중에 발생한 에러에 대하여 부분 철회할 수 있다. 즉 여러 개의 데이터를 입력 중에 한 개의 중복 데이터가 있으면 중복 데이터만 취소하고 나머지는 완료된다.
-
복제 속도는 서비스 속도보다 매우 느릴 수 있다.
데이터 제약조건#
-
복제할 테이블에는 반드시 프라이머리 키가 존재해야 한다.
-
복제할 테이블의 프라이머리 키에 대한 수정이 없어야 한다.
-
양쪽 서버의 복제할 테이블은 순서, 프라이머리 키 제약이 동일해야 한다.
연결 제약조건#
- 하나의 Altibase 데이터베이스에 가능한 XLog Sender 및 이중화 연결의 최대 개수는 REPLICATION_MAX_COUNT 프로퍼티에 설정한 값에 의해 결정된다.
허용된 DDL 문#
일반적으로 이중화 대상인 테이블은 데이터 정의어(DDL)를 수행할 수 없다. 그러나 다음의 몇 가지 DDL은 XLog Sender와 상관없이 DDL 수행이 가능하다. 그 외 수행할 수 있는 DDL은 Replication Manual의 '이중화 대상 테이블에 DDL 실행'을 참조하기 바란다.
-
ALTER INDEX REBUILD PARTITION
-
GRANT OBJECT
-
REVOKE OBJECT
-
CREATE TRIGGER
-
DROP TRIGGER
복제 대상 테이블에 허용된 DDL 문#
일반적으로 복제 대상 테이블에 데이터 정의어(DDL)를 수행하면 oraAdapter는 현재 DDL 이전에 발생한 모든 변경 사항을 대상 데이터베이스에 반영한 후 종료된다. oraAdapter가 종료되면, 대상 데이터베이스에 동일한 DDL을 수행하여 테이블 스키마를 동일하게 만든 후 oraAdapter를 재시작하여 복제를 다시 할 수 있다.
그 외 수행할 수 있는 DDL은 Replication Manual의 '이중화 대상 테이블에 DDL 실행'을 참조하기 바란다.
LOB 데이터 타입 제약 사항#
- LOB 데이터 타입은 Adapter for Oracle 버전 7.1.0.7.0 부터 지원 한다.
- LOB 데이터 타입은 Oracle 11g이상에서 OCI 호환 여부에 따라 지원 가능하다.
- LOB 데이터 타입을 지원하기 위해서는 ADAPTER_LOB_TYPE_SUPPORT 프로퍼티를 1로 설정한다.
- LOB 데이터 타입이 포함된 테이블은 아래 3가지 프로퍼티에 대해 제약사항을 가진다. 자세한 내용은 프로퍼티 항목을 참조하기 바란다.
- Altibase 서버에서 SELECT FOR UPDATE를 이용한 LOB 데이터 변경은 커밋 이후 수행할 것을 권장한다.
- 커밋을 수행하지 않으면 아래 상황에서 SELECT FOR UPDATE로 변경한 LOB 데이터가 복제되지 않을 수 있다.
- SELECT FOR UPDATE 수행 전에 변경된 데이터 복제 중 에러가 발생한 경우
- SELECT FOR UPDATE 수행 전에 변경된 데이터 복제 중 ORACLE_SKIP_ERROR, ORACLE_SKIP_INSERT, ORACLE_SKIP_UPDATE 프로퍼티에 의해 SKIP이 발생한 경우
구동과 종료#
이 절은 oraAdapter를 구동하고 종료하는 방법을 설명한다.
구동#
oraAdapter를 구동하는 방법을 단계별로 설명한다.
oraAdapter를 사용하려면 Altibase와 오라클 DB가 먼저 실행중이어야 한다. 또한 Adapter for Oracle 프로퍼티와 환경 변수가 oraAdapter실행이 가능한 환경으로 적절히 설정되어 있어야 한다.
oraAdapter가 구동된 후에 어떤 환경 변수 또는 프로퍼티가 변경된다면, 이 변경을 적용하기 위해서는 oraAdapter를 재구동해야 한다. 환경 변수 설정에 대한 자세한 설명은 2장의 "설치 후 작업"을 참고한다.
-
Altibase의 REPLICATION_PORT_NO1 프로퍼티가 실제로 이중화 가능한 포트 번호로 설정되었는지 확인한다. 이 프로퍼티 설정을 바꿀 필요가 있다면, Altibase를 재구동해야 한다.
-
oraAdapter를 시작하기 전에, Altibase Log Analyzer (ALA)가 사용될 수 있도록 XLog 송신자를 구성해야 한다. XLog 송신자는 Altibase로부터 XLog와 메타 정보를 송신하는데 사용된다.
PROPAGABLE LOGGING을 사용하여 복제한 트랜잭션의 로그를 다른 서버로 전송하기 위해 FOR ANALYSIS PROPAGATION을 사용해야 한다. 다음의 구문은 Altibase내의 sys 사용자가 소유한 테이블 t1의 데이터를 오라클 DB의 scott 사용자가 소유한 테이블 t2로 복제하기 위한 XLog 송신자를 생성한다.CREATE REPLICATION ala FOR ANALYSIS WITH '127.0.0.1', 25090 FROM sys.t1 TO scott.t2;
-
이제 oraAdapter를 시작한다. oraAdapter를 직접 실행할 수도 있고, Adapter for Oracle 유틸리티를 사용해서 실행할 수도 있다. Adapter for Oracle 유틸리티를 사용해서 구동하는 방법은 이 장의 "Adapter for Oracle 유틸리티" 절을 참고한다. LINUX 운영체제에서 아래와 같이 oraAdapter를 시작할 수 있다:
$ cd $ORA_ADAPTER_HOME/bin $ ./oraAdapter
-
oraAdapter가 정상적으로 시작하면 oraAdapter.trc 파일에서 시작 시간 및 메시지를 확인할 수 있다.
$ cat $ORA_ADAPTER_HOME/trc/oraAdapter.trc [2016-07-26 15:53:12] Altibase Adapter started.
-
Altibase Log Analyzer를 위한 XLog 송신자를 시작한다. 만약 oraAdapter를 구동하기 전에 XLog 송신자를 시작하려고 하면 실패할 것이다. XLog 송신자가 수행되면 oraAdapter와 handshake하여 인증 절차를 확인한다. handshake가 정상적으로 실행되고 oraAdapter가 복제할 준비가 되면 oraAdapter.trc파일에서 준비 완료 메시지를 확인할 수 있다.
$ cat $ORA_ADAPTER_HOME/trc/oraAdapter.trc [2016-07-26 20:52:51] Adapter is ready to process logs. iSQL> ALTER REPLICATION ala START;
종료#
oraAdapter를 종료하는 과정에는 XLog 송신자를 중지하는 과정이 포함된다. oraAdapter를 Adapter for Oracle 유틸리티를 사용해서 강제로 종료한다면, 성공적으로 종료는 되겠지만 Altibase의 XLog 송신자는 oraAdapter와의 접속을 계속 시도할 것이다.
iSQL> ALTER REPLICATION ala STOP;
Alter success.
데이터 타입#
Altibase의 데이터가 오라클 DB에 적용될 때, 데이터의 타입은 아래의 표에 보이는 것처럼 변환된다.
[표 3-1] 데이터 타입 변환
Altibase | 오라클 DB | 오라클 DB를 위한 추가 정보 |
---|---|---|
FLOAT | NUMBER | |
NUMERIC | NUMBER | |
DOUBLE | NUMBER | BINARY_DOUBLE이 사용될 수 있다. |
REAL | NUMBER | BINARY_FLOAT이 사용될 수 있다. |
BIGINT | NUMBER | |
INTEGER | NUMBER | |
SMALLINT | NUMBER | |
DATE | DATE | |
CHAR | CHAR | |
VARCHAR | VARCHAR2 | |
NCHAR NVARCHAR |
NCHAR NVARCHAR2 |
|
CLOB | CLOB | |
BLOB | BLOB |
예제#
다음 예제는 Altibase의 데이터가 오라클 DB로 적용될 때 어떻게 데이터 타입이 변환되는지를 보여준다. 이때 국가 문자 집합은 UTF-16으로 설정되어 있다고 가정한다.
Altibase의 데이터 타입이 아래처럼 명시되어 있다고 가정하면:
CREATE TABLE T1(
A1 INTEGER PRIMARY KEY,
A2 CHAR(20),
A3 VARCHAR(20),
A4 NCHAR(20),
A5 NVARCHAR(20)
);
오라클 DB의 데이터 타입은 아래처럼 명시한다.
CREATE TABLE T1(
A1 NUMBER PRIMARY KEY,
A2 CHAR(20),
A3 VARCHAR2(20),
A4 NCHAR(20),
A5 NVARCHAR2(20)
);
Adapter for Oracle 유틸리티#
Adapter for Oracle 유틸리티(oaUtility)는 oraAdapter를 데몬으로 실행하고 이의 상태를 체크하는 스크립트이다. 이 스크립트는 GNU sed가 설치된 배시 쉘(bash shell)에서 실행된다.
Adapter for Oracle 유틸리티가 지원하는 옵션은 다음과 같다.
-
oaUtility start
-
oaUtility stop
-
oaUtility status
-
oaUtility check
oaUtility 선행 조건#
oaUtility를 정상적으로 동작하게 하려면 아래의 사항들을 확인해야 한다.
-
oraAdapter는 배시 쉘(Bash Shell) 기반으로 sed, grep, ps, wc, iSQL(Altibase), SQLPlus(Oracle) 명령어들을 사용하여 제어된다. 해당 유틸리티들이 모두 설치되어 실행할 수 있는 상태에서 oaUtility가 정상 동작한다.
-
oaUtility는 개인의 환경설정에 영향을 받는다. 따라서 환경 변수 또는 개인 환경(login.sql, glogin.sql)이 설정되었다면, 초기화하거나 경로 변경 등을 하여 oaUtility가 영향을 받지 않도록 해야 한다.
oaUtility start#
구문#
oaUtility {start [ force ]}
설명#
oraAdapter를 데몬으로 실행한다. force 옵션은 복제 대상 테이블에 프라이머리 키 제약 조건이 있는지 검사하지 않고 oraAdapter를 시작한다.
oaUtility stop#
구문#
oaUtility {stop}
설명#
실행중인 oraAdapter프로세스를 강제로 종료한다.
oaUtility status#
구문#
oaUtility {status}
설명#
oraAdapter가 동작 중인지 확인한다.
oaUtility check#
구문#
oaUtility { check [ alive | constraints] }
설명#
oraAdapter가 동작중인지를 계속 확인하다가, oaUtility가 종료되면 (정상 종료 또는 강제 종료 여부에 상관없이) 재시작한다.
alive 옵션을 지정하면 oraAdapter가 동작중인지를 한 번만 확인하고 oaUtility는 종료된다.
constraints 옵션을 지정하면, Altibase로부터 들어오는 테이블들의 프라이머리 키가 중간에 변경되었는지 여부를 (칼럼 이름에 기반하여) 확인한다.
커맨드 라인 옵션#
oraAdapter는 아래의 커맨드 라인 옵션을 제공한다.
구문#
oraAdapter [ -v | -version ]
설명#
이 옵션은 oraAdapter이 Altibase의 어떤 버전과 함께 컴파일 되었는지를 알려준다.
예제#
$./oraAdapter -v
Altibase Adapter for Oracle version 5.5.1.1.2
...
오프라인 옵션(Offline Option)#
구문#
CREATE REPLICATION ala_replication_name FOR ANALYSIS OPTIONS META_LOGGING
WITH 'remote_host_ip', remote_host_port_no
FROM user_name.table_name TO user_name.table_name;
ALTER REPLICATION ala_replication_name SET OFFLINE ENABLE WITH 'log_dir';
ALTER REPLICATION ala_replication_name SET OFFLINE DISABLE;
ALTER REPLICATION ala_replication_name BUILD OFFLINE META [AT SN(sn)];
ALTER REPLICATION ala_replication_name RESET OFFLINE META;
ALTER REPLICATION ala_replication_name START WITH OFFLINE;
설명#
OraAdapter를 이용하여 Altibase에서 변경된 데이터를 오라클 데이터베이스에 적용하는 환경에서, 서비스를 제공하는 Altibase 서버에서 장애가 발생하면 오라클 서버에 적용하지 못한 로그를 전송할 수 없게 된다. 이때 Altibase 서버에 META_LOGGING Option을 수행 중이고, Altibase 서버와 동일한 데이터베이스 구성을 가진 Standby 서버가 있다면 Standby 서버에서 오프라인 옵션으로 장애가 발생한 Altibase 서버의 로그 파일에 직접 접근하여 미전송 로그를 가져와서 오라클 데이터베이스에 반영할 수 있다.
- META_LOGGING
송신자 메타 정보와 재시작 SN 정보를 파일로 남겨서 장애 발생시 Standby 서버에서 미전송 로그를 읽어 올때 필요한 메타 정보를 구성할 수 있게 한다. 파일은 로그 파일 경로의 ala_meta_files 폴더 안에 생성 된다. - SET OFFLINE ENABLE WITH 'log_dir'
오프라인 이중화 옵션을 사용할 수 있도록 설정한다. 이중화가 중지되어 있는 상태에서만 이 구문을 수행할 수 있다. 장애가 발생한 Altibase 서버의 로그 파일 경로를 설정하여 Standby 서버가 직접 로그 파일에 접근하도록 한다. - SET OFFLINE DISABLE
오프라인 이중화 옵션을 사용하지 못하도록 설정한다. 이중화가 중지되어 있는 상태에서만 이 구문을 수행할 수 있다. - BUILD OFFLINE META
설정된 로그 파일 경로의 ala_meta_files 폴더에서 송신자 메타 파일과 재시작 SN 파일을 읽어 오프라인 이중화에 필요한 메타 정보를 구성한다. -
RESET OFFLINE META
이 명령어는BUILD OFFLINE META
실행 후 오프라인 이중화의 메타 정보를 초기화할 때 사용한다. 다음과 같은 상황에서 수행할 수 있다.- 오프라인 이중화 수행 중 에러가 발생해서 메타 정보를 새로 구성해야 하는 경우
- 오프라인 이중화를 수행할 필요가 없어 메타 정보가 더 이상 필요하지 않은 경우
단, 오프라인 이중화를 수행하는 중에 DDL 로그로 인해 에러가 발생할 때는
RESET OFFLINE META
를 수행하지 않아도 된다. 이 경우RESET OFFLINE META
를 실행하면 DDL 로그를 계속 다시 읽어 에러가 반복 발생할 수 있다. -
START WITH OFFLINE
설정된 오프라인 경로를 이용하여 이중화를 수행한다. 오프라인 이중화는 일회성 작업으로써, 미전송된 로그를 모두 반영한 후 바로 종료된다. 오프라인 이중화가 종료된 후에는 다시 이중화를 시작할 수 있다.오프라인 이중화를 수행 할 때 이중화 갭에 DDL 로그가 포함되어 있으면 작업이 중단된다. 이때, 사용자는 Active 서버에서 수행한 DDL 문을 오프라인 이중화를 수행하는 서버에서도 수행했는지 확인하고 다시 오프라인 이중화를 수행해야 한다.
제약사항#
- 송신자 메타 정보 파일과 재시작 SN 파일의 읽기, 쓰기 기능은 ALA만 사용 할수 있다.
- Offline OraAdapter을 수행할 서버의 ALA 객체 이름은 Active 서버의 ALA 객체 이름과 동일해야 한다.
- 압축 테이블을 이중화 대상으로 가지는 ALA 객체에 대해서는 Offline OraAdapter를 지원하지 않는다.
- Offline OraAdapter가 디스크 이상으로 Active 서버의 로그 파일과 송신자 메타 파일 경로에 접근하지 못할 경우에는 실패한다.
- Active 서버와 Standby 서버의 로그 파일 크기는 동일해야 한다. 로그 파일 크기는 데이터베이스 생성 시에 정해지므로 오프라인 옵션을 사용하기 전에 이를 꼭 확인하여야 한다.
- 로그 파일과 송신자 메타 파일을 사용자 임의로 변경(이름 변경, 다른 시스템에 로그 파일을 복제, 삭제)할 경우 비정상 종료와 같은 문제를 발생시킬 수 있다.
- Standby 서버에 BUILD OFFLINE META 수행 후 재 구동할 경우 로그를 분석하는데 사용할 Remote Meta 정보가 사라지기 때문에 BUILD OFFLINE META를 다시 수행 해야 한다.
- META_LOGGING Option을 사용할 경우 ALA도 이중화와 동일하게 갭을 Archive 로그로 처리 하지 않는다.
- 두 데이터베이스 서버의 SM버전, OS, OS비트수 (32또는 64) 또는 로그 파일의 크기가 서로 다르면, Offline OraAdapter를 시작하거나 오프라인 옵션으로 ALA 객체를 생성할 때 실패한다.
예제#
No | Active Server | Standby Server | Oracle |
---|---|---|---|
1. 스키마 생성 | CREATE TABLE T1 (I1 INTEGER PRIMARY KEY, I2 CHAR(20)); | CREATE TABLE T1 (I1 INTEGER PRIMARY KEY, I2 CHAR(20)); | CREATE TABLE T1 (I1 INTEGER PRIMARY KEY, I2 CHAR(20)); |
2. 이중화 생성 | CREATE REPLICATION ALA FOR ANALYSIS OPTIONS META_LOGGING WITH 'adapter_ip', adapter_port FROM SYS.T1 to SYS.T1; |
CREATE REPLICATION ALA FOR ANALYSIS WITH 'adapter_ip', adapter_port FROM SYS.T1 to SYS.T1; |
|
3. Active 서버oraAdapter 시작 | $oaUtility start | ||
4. Active 서버 이중화 시작 | ALTER REPLICATION ALA START; | ||
5. Active 서버 장애 발생 | 장애 발생 | ||
6. Standby 서버 oraAdapter 시작 | $oaUtility start | ||
7. Standby 서버 이중화에 오프라인 옵션 설정 | ALTER REPLICATION ALA SET OFFLINE ENABLE WITH 'active_home/logs' |
||
8. 오프라인 메타 정보 구성 | ALTER REPLICATION ALA BUILD OFFLINE META; | ||
9. 오프라인 이중화 시작 | ALTER REPLICATION ALA START WITH OFFLINE; |
이중화 GAP에 DDL이 포함되어 있을 경우 처리 예제#
No | Active Server | Standby Server | Oracle |
---|---|---|---|
1. 스키마 생성 | CREATE TABLE T1 (I1 INTEGER PRIMARY KEY, I2 CHAR(20)); | CREATE TABLE T1 (I1 INTEGER PRIMARY KEY, I2 CHAR(20)); | CREATE TABLE T1 (I1 INTEGER PRIMARY KEY, I2 CHAR(20)); |
2. 이중화 생성 | CREATE REPLICATION ALA FOR ANALYSIS OPTIONS META_LOGGING WITH 'adapter_ip', adapter_port FROM SYS.T1 to SYS.T1; |
CREATE REPLICATION ALA FOR ANALYSIS WITH 'adapter_ip', adapter_port FROM SYS.T1 to SYS.T1; |
|
3. Active 서버oraAdapter 시작 | $oaUtility start | ||
4. Active 서버 이중화 시작 | ALTER REPLICATION ALA START; | ||
5. Active 서버 DDL | DDL | ||
6. Active 서버 장애 발생 | 장애 발생 | ||
7. Standby 서버 oraAdapter 시작 | $oaUtility start | ||
8. 이중화에 오프라인 옵션 설정 | ALTER REPLICATION ALA SET OFFLINE ENABLE WITH 'active_home/logs' |
||
9. 오프라인 메타 정보 구성 | ALTER REPLICATION ALA BUILD OFFLINE META; | ||
10. 오프라인 이중화 시작 | ALTER REPLICATION ALA START WITH OFFLINE; | ||
11. DDL 로그로 인해 오프라인 이중화 에러 발생 |
[ERR-611B6 : Offline ALA Sender read DDL log.] | ||
12. Oracle에 DDL | DDL | ||
13. Standby 서버 oraAdapter 재 시작 | $oaUtility start | ||
14. 오프라인 이중화 재 시작 | ALTER REPLICATION ALA START WITH OFFLINE; |
-
REPLICATION_PORT_NO: 이중화 연결을 위해서 지역 서버에서 사용하는 이중화 포트 번호를 명시한다. 이 프로퍼티에 대한 설명은 General Reference를 참고하기 바란다. ↩