Oracle Database 10g와 11g 사이에 밀접한 데이터 복제를 쉽게 달성하도록 Oracle GoldenGate를 설치, 설정 및 구성하는 방법을 배워보자.

 

Oracle GoldenGate

Oracle GoldenGate는 다양한 엔터프라이즈 시스템 사이에 트랜잭션 데이터를 고속으로 복제하고 통합하기 위해 사용되는 배포가 용이한 최신 제품이다. 또한 서로 다른 Oracle Database 버전이나 서로 다른 하드웨어 플랫폼을 포함한 동종 시스템과 이기종 시스템 사이 및 Oracle Database와 오라클 이외의 데이터베이스(Microsoft SQL Server, 오픈 시스템과 z/OS용 IBM DB2, Sybase 등) 사이에 데이터를 이동하는 유연성을 제공한다.

이 기사는 Oracle Database 10g와 11g 사이에 밀접한 데이터 복제를 쉽게 달성하도록 본 제품을 설치, 설정 및 구성할 수 있는 방법을 선보이며 본 제품의 뛰어난 성능에 대해서도 소개한다.

2009년에 오라클이 인수한 Oracle GoldenGate는 광범위한 산업에 걸쳐 전 세계에 4,000여 건 이상의 솔루션 구현 실적을 나타냈다. 소프트웨어로 실시간 로그 기반 변경 데이터 캡처(CDC)를 수행하고 이기종 데이터베이스 사이에 방대한 분량의 트랜잭션 데이터를 복제할 수 있으며 복제 시간(Latency)가 극히 짧고 설치가 매우 간단한 것이 특징이다.

일반적으로 GoldenGate 캡처(Capture, Extract), 데이터 펌프(Data Pump) 및 전송(Delivery, Replicat) 프로세스를 설치하게 되고, 다양한 운영 체제와 데이터베이스에서 사용할 수 있다. 대상 데이터베이스의 요구 사항에 따라 모든 데이터 또는 일부 데이터를 복제할 수 있다. Oracle Database용 Oracle GoldenGate의 경우 DML(데이터 조작 언어) 및 DDL(데이터 정의 언어) 연산을 복제할 수 있다. (현재 DDL 연산은 유사한 오라클 버전 사이에서만 복제가 가능하며 서로 다른 오라클 버전 사이의 복제는 불가능하다.)

Oracle GoldenGate는 공식적으로 Oracle 9i 릴리스 2에서 Oracle Database 11g 릴리스 2까지 지원하며 이 버전들에 대해서는 모두 DML/DDL 지원이 제공된다. 본 제품은 Oracle Database의 Enterprise Edition과 Standard Edition에서 모두 작동한다.

앞서 언급했듯이 지원되는 Oracle Database의 유사 버전 또는 서로 다른 버전 사이 및 Oracle Database와 오라클 이외의 데이터베이스 사이에 데이터 이동이 가능하다. 대부분의 경우 데이터의 필터링, 매핑 및 변환이 가능하다. 참고로 DDL 지원을 사용 중인 경우에는 데이터 필터링, 매핑 및 변환이 지원되지 않는다(다시 말해서 GoldenGate를 유사한 Oracle Database 버전 사이의 DDL 복제에 사용 중인 경우).

Oracle GoldenGate는 데이터베이스와 관련성이 높은 제품이므로 데이터베이스 관리자들은 사용 방법을 아주 쉽게 습득 가능하다. 구현 시간도 매우 적다.(일부 업체의 경우에는 1개월 이내에 100% 가동에 이르렀다.)

 

제품 구성

Oracle GoldenGate 제품군에는 다음 항목이 포함되어 있다.

? Oracle GoldenGate
? Oracle GoldenGate용 관리 팩(일명 Oracle GoldenGate Director)
? Oracle GoldenGate Veridata
? Oracle GoldenGate 애플리케이션 어댑터
? 메인프레임용 Oracle GoldenGate

고객들에게 높은 부가가치를 제공하기 위해 Oracle GoldenGate 코어 라이선스에는 Oracle Active Data Guard에 대한 전체 사용 라이선스와 Oracle Database의 XStream에 대한 전체 사용 라이선스가 포함되어 있다. XStream은 Oracle Streams에 대한 API이다. Oracle Active Data Guard를 사용하면 트랜잭션 로그(Redo Log)가 운영 데이터베이스에 쓰이고 있는 중간에도 대기(Standby) 데이터베이스를 조회용으로 바로 사용할 수 있다. 이것은 운영 데이터베이스에서 발생하는 리포팅과 조회 작업을 대기(Standby) 데이터베이스에서 별도로 실행시킬 수 있는 탁월한 기능이다.

전통적으로 Oracle Streams는 Oracle Database 사이에만 데이터를 복제하는데 사용되어 왔다. Oracle GoldenGate는 오라클 이외의 데이터베이스 사이의 데이터 복제를 제공하며 설정하기가 쉽다.

이미 발행된 <Oracle - GoldenGate 제품 전략 보고서>에서 우리가 천명했던 말을 상기하고자 한다. “Oracle GoldenGate의 전략적 성격을 감안할 때 Oracle Streams는 계속 지원하되 적극적으로 향상시키지는 않을 것이다. 그 대신에 Oracle Streams의 가장 좋은 요소를 Oracle GoldenGate에 포함하는 방법을 평가할 계획이다.”

 

이 데모의 목적

이 데모를 위해서 Microsoft Windows 서버 한 대에 데이터베이스 3개 HRPRD1, HRPRD2 및 HRPRD3를 설치해야 한다. 데이터베이스 버전은 각각 Oracle Database 11g Oracle Database10g 및 Oracle Database 10g이다.

이들 세 데이터베이스의 SYS 및 SYSTEM 암호는 시험 목적을 위해 hrpassword1 로 설정되었으며, 이 암호는 나중에 변경할 수 있다.

이 데모의 목적은 두 Oracle 10g 데이터베이스 HRPRD2 및 HRPRD3의 HR.EMPLOYEES 테이블 사이에 단방향 복제를 설정하는 것이다. 첫 번째 데이터베이스의 테이블에서 발생한 모든 DML 변경사항을 두 번째 데이터베이스로 옮겨야 한다. 이것은 나중에 Oracle 11g 데이터베이스 HRPRD1에도 동시에 복제를 하는 것으로 기능이 추가된다. 따라서 HRPRD2의 테이블에서 업데이트, 삽입 또는 삭제되는 모든 내용은 HRPRD1뿐만 아니라 HRPRD3에서도 업데이트된다.

Oracle Database 10g에서 Oracle Database 10g로 복제한 다음 Oracle Database 11g로 복제하는 이 전략은 업그레이드 시에 자주 사용되며, 이 경우 업데이트된 데이터베이스 버전으로 전환하기 전에 데이터를 복제해야 한다. 바로 이러한 경우에 Oracle GoldenGate가 손쉬운 해결 방법을 제공한다.

참고로 Oracle Database의 경우 Microsoft ODBC 데이터 소스 관리자를 사용하는 데이터베이스를 위해 데이터 소스 이름(DSN)을 만들 필요가 없다. Oracle GoldenGate 복제는 리스너를 사용하여 Oracle Database에 직접 연결한다.

 

다운로드할 내용

먼저 Windows 시스템의 경우에는 Microsoft 다운로드 센터에서 Microsoft Visual C ++ 2005 SP1 재배포 가능 패키지를 다운로드하여 설치해야 한다. 이 패키지는 컴퓨터에 아직 Visual C++가 설치되지 않은 경우 애플리케이션을 실행하는 데 필요한 Visual C++ 라이브러리의 런타임 구성요소를 설치하기 위해 사용된다.

다음에는 Oracle Technology Network에서 Oracle GoldenGate 소프트웨어를 다운로드해야 한다. Windows 플랫폼의 경우, OTN에서는 이4비트 버전, 즉 Oracle 10g 64비트 용 Oracle GoldenGate v10.4.0.x만을 제공한다. 32비트 Windows 버전을 다운로드하려면 Oracle E-Delivery사이트를 사용해야 한다. (참고로 E-Delivery 다운로드는 OTN 개발자 라이선스가 아닌 30일 시험판 라이선스를 제공한다.) 이 사이트에서 로그인한 다음 Microsoft Windows(32비트) 플랫폼의 경우 검색창에 “Oracle Fusion Middleware Product Pack”(Oracle GoldenGate는 Oracle Database 제품이 아닌 Oracle Fusion Middleware 제품으로 간주되기 때문)을 입력하고 Go를 클릭한다.

미디어 팩의 목록이 나타난다. 이 목록에서 먼저 Oracle GoldenGate on Oracle Media Pack for Microsoft Windows (32-bit)를 선택한다.

이 미디어 팩에는 아래와 같은 구성요소들이 있다.

<표 1>

Oracle GoldenGate for Oracle 11g뿐만 아니라 Oracle GoldenGate for Oracle 10g도 필요하므로 zip 파일 3개를 모두 다운로드한다. 이후 Oracle Fusion Middleware용 미디어 팩 목록으로 돌아가서 Management Pack for Oracle GoldenGate (v2.0.0.2) Media Pack for Microsoft Windows를 선택한다.

ManagementPack의 미디어 팩에는 아래와 같은 구성요소들이 있다.

<표 2>

Management Pack을 설치하려는 경우 이 구성요소들도 모두 다운로드한다. Management Pack은 Windows 서버에 설치되는 독립형 제품이다. 제품의 원래 이름은 Oracle GoldenGate Director이며 이 제품은 Oracle GoldenGate 환경을 쉽게 모니터링 및 관리할 수 있게 해주는 Multi-tier 클라이언트-서버 애플리 케이션으로 구성되어 있다.

Oracle GoldenGate Director의 GUI 인터페이스를 사용하면 중앙에서 Oracle GoldenGate를 설계 및 구성할 수 있으며 서버 간 데이터를 복제하도록 설정된 여러 Oracle GoldenGate 프로세스들을 관리 및 모니터링 하는 것도 가능하다.

미디어 팩의 주 목록에는 Microsoft Windows용 Oracle GoldenGate Veridata 미디어 팩 등과 같은 다른 미디어 팩도 포함되어 있다. Oracle GoldenGate Veridata는 서로 다른 플랫폼에 Agent를 설치하여 실시간 데이터 비교를 통해 두 데이터베이스의 동기화(일치) 여부를 다운타임 없이 판단할 수 있다. 이 비교 작업은 24*7 언제나 수행할 수 있으며 대량 데이터 복제와 동시에 실행할 수도 있다.

또한 서로 다른 플랫폼 간의 데이터 비교도 가능하다.

전술한 주 미디어 팩 외에 다른 Oracle GoldenGate 팩도 목록에 표시된다. 이러한 팩은 Sybase, SQL Server, IBM DB2, Teradata 및 JMS와 플랫 파일 등 오라클 이외의 데이터베이스를 위한 것으로서 이 기종을 지원하는 Oracle GoldenGate의 특징을 잘 보여준다.

설치 단계

다운로드한 Oracle GoldenGate 문서 zip 파일(V18423-01.zip)에는 Linux, UNIX 및 Windows용 Oracle GoldenGate for Oracle Database의 설치 단계를 설명하는 Oracle GoldenGate Oracle Installation and Setup Guide Version 10.4(Oracle GoldenGate 설치 및 설정 가이드) 버전 10.4(gg_ora_inst_v104.pdf)가 들어있다. 참고로 Sybase, SQL Server, DB2, MySQL, Teradata용 Oracle GoldenGate의 설치 문서도 있다.

먼저 Oracle GoldenGate for Oracle 10g 압축 파일 V18162-01.zip을 새로운 Oracle GoldenGate 소프트웨어 설치 디렉터리(디렉터리 이름에 공백 없이)에 푼다. 예를 들어 Oracle GoldenGate 디렉터리로 C:\OGG10G를 사용할 수 있다. 이 디렉터리의 소프트웨어 코드는 첫 번째와 두 번째 Oracle 10g 데이터베이스 사이의 복제를 설정하기 위해 사용된다.

세 번째 데이터베이스는 Oracle Database 11g 버전이므로 Oracle GoldenGate for Oracle 11g의 압축 파일 V18164-01.zip을 풀어야 한다. 이 Oracle GoldenGate 버전의 설치 위치는 C:\OGG11G 디렉터리를 사용해야 한다. 이 디렉 터리의 소프트웨어 코드는 세 번째 Oracle Database 11g 데이터베이스에 대한복제를 제어하는 데 사용된다.

만약 원본 또는 대상 데이터베이스로 Oracle9i가 있다면 다른 버전의 Oracle GoldenGate 코드가 필요하다. Oracle GoldenGate의 Oracle9i 버전은 이 오라클 웹 사이트에서 다운로드할 수 없다. 이 버전이 필요하면 My Oracle Support 에서 서비스 요청(SR)을 올려야 한다.

명령 프롬프트에서 아래 단계를 따른다.

mkdir C:\OGG10G
cd C:\OGG10G
unzip c:\V18162-01.zip
mkdir C:\OGG11G
cd C:\OGG11G
unzip C:\V18164-01.zip
# start the 10gdatabasesifnotalreadystarted
net start OracleServiceHRPRD2
net start OracleServiceHRPRD3
# start the 11gdatabaseifnotalreadystarted
net start OracleServiceHRPRD1

 

환경 변수 설정

이제 명령창 두 개를 열고(시작 -> 실행 ->Cmd) ORACLE_HOME,ORACLE_SID,LD_LIBRARY_PATH등의 해당 환경 변수를 Oracle Database 10g 및 Oracle Database 11g에 맞는 값으로 설정할 수 있다.

Oracle 10g 데이터베이스 사이의 복제를 설정하려면 환경 변수를 아래와 같이 설정한다.

set ORACLE_HOME=C:\Oracle\product\10.2.0\db_1
set ORACLE_SID=HRPRD2
set PATH=%ORACLE_HOME%\bin;%PATH%
set LD_LIBRARY_PATH=C:\OGG10G; %ORACLE_HOME%\LIB;
%ORACLE_HOME%\jdbc\lib
set CLASSPATH=;C:\Program
Files\Java\jre6\lib\ext\QTJava.zip;%ORACLE_HOME%\jdbc\lib

ORACLE_SID는 HRPRD2 또는 HRPRD3(둘 다 Oracle 10g 데이터베이스 임)으로 설정할 수 있다. PATH, LD_LIBRARY_PATH 및 CLASSPATH에 추가된 사항에 주목한다. 다른 대안은 이러한 변경사항을 시스템 변수 컴퓨터 속성 고급 환경변수 시스템 변수를 사용하여 이 작업을 할 수 있다. 이 시스템 변수를 추가하고 경로를 위에 지적한 대로 변경한다.

이 경우 서버 한 대에 두 가지 데이터베이스 버전을 설치하는 방법의 결점은 Oracle GoldenGate for Oracle 10g 또는 Oracle GoldenGate for Oracle 11g용 Manager 서비스가 시작될 때마다 시스템 변수를 변경해야 한다는 것이다. 즉, Oracle Database 11g에 속한 시스템 변수를 추가한 다음 Oracle GoldenGate for Oracle 11g Manager서비스를 시작해야 한다. 그 후 시스템 변수를 Oracle Database 10g에 필요한 것으로 변경한 다음 Oracle GoldenGate for Oracle 10g Manager 서비스를 시작해야 한다.

이 시스템은 테스트 시스템이므로 이 방법으로 수행해도 괜찮을 수 있다. 그러나 실무 환경에서는 스크립트 방식 등과 같은 더 자동화된 방법을 선택하여 변수를 설정하고 이 스크립트 자체에서 Manager 서비스를 시작해야 한다.

 

GGSCI 명령 인터프리터

명령창 또는 내 컴퓨터 수준에서 환경 변수를 설정한 후 Oracle GoldenGate 폴더로 이동하고 명령 Oracle GoldenGate Command Interpreter for Oracle(GGSCI) 프로그램을 명령줄(< 그림 1 > 참조) 또는 Windows 탐색기에서 실행한다.

< 그림 1 > Oracle GoldenGate 명령 인터프리터

이제 GGSCI에서 CREATE SUBDIRS 명령을 내려 Oracle GoldenGate 작업 하위 디렉터리를 만든다. <그림 2>에는 생성된 주요 디렉터리들이 열거돼 있다.

< 그림 2 > 작업 하위 디렉터리 만들기

 

Oracle GoldenGate Manager를 로컬 프로그램으로 실행

Oracle GoldenGate Manager 서비스는 명령창에서 로컬 프로그램으로 실행하거나 Windows가 시작될 때 자동으로 시작되는 Windows 서비스로 설치할 수 있는데, 후자를 권장한다.

로컬 명령으로 실행하려면 디렉터리에서 매개변수(Parameter) 파일을 사용하여 Manager 실행 파일을 호출하면 된다. 구문은 다음과 같다.

C:\OGG10G>mgr
Usage: MGR PARAMFILE <param file> [REPORTFILE <report file>]
[PID <process id>] [PORT <port number>]
[USESUBDIRS] [NOUSESUBDIRS]
[PAUSEATEND] [NOPAUSEATEND]
[CD <directory>]

필수 매개변수는 PARAMFILE이다. 이를 위해 다음과 같이 GGSCI에 매개변수 파일을 만들어야 한다.

GGSCI (HaviPori) 1> edit params mgr

위 명령을 실행하면 C:\OGG10G\dirprm 디렉터리에 새 mgr.prm 파일이 생성된다. 관리자 프로세스를 실행하는 데 사용되는 포트 번호를 입력하고 파일을 저장한다.

PORT 7809

기본 포트는 7809이다. 포트 번호를 선택하면 다른 프로그램과 충돌이 발생해서는 안되며 방화벽에 제한도 없어야 한다. PORT는 Manager의 유일한 필수 매개 변수이므로 이 값은 반드시 지정해야 한다. 이 포트는 GGSCI가 Manager에게 프로세스를 시작하라는 요청을 보낼 때 사용하며 Extract 프로세스도 여러 동작을 위해 이 포트를 사용한다. 매개변수 파일을 만든 후 Windows 명령 프롬프트에서 다음과 같이 Manager를 시작할 수 있다.

C:\OGG10G>mgr paramfile c:\OGG10G\dirprm\mgr.prm

위 명령을 실행하면 Manager가 시작되고 < 그림 3 >과 같은 메시지가 표시된다.

< 그림 3 > Windows 명령 프롬프트에서 관리자 시작하기

Manager의 실행을 유지하려면 이 창을 계속 열어 두어야 한다. 로그아웃하면 창이 닫히고 Manager가 정지한다.

Manager를 Windows 서비스로 설치

앞에서 설명한 것처럼 Manager를 시작하는 또 다른 방법은 Manager를 Windows 서비스로 등록하는 것이다. Windows 클러스터의 경우에는 Windows 서비스만이 자동으로 Passive 서버로 Failover 될 수 있기 때문에 반드시 이 방법을 사용해야 한다. 클러스터가 아닌 시스템에서는 Manager를 반드시 서비스로 실행할 필요는 없지만 적극 권장한다. Windows에서 Manager 프로세스가 서비스로 생성될 때 기본 이름은 GGSMGR이다. 이 이름은 변경 가능하다. 동일한 서버에 Oracle GoldenGate Manager 서비스가 두 개 이상(예: Oracle GoldenGate for Oracle 10g에 대한 서비스와 Oracle GoldenGate for Oracle 11g에 대한 서비스) 필요한 경우에는 사용자 정의 이름을 지정하는 것이 필요하다.

또한 Oracle GoldenGate Veridata를 실행하려는 경우에도 별도의 Manager 서비스가 필요하다. Manager 서비스에 다른 이름을 지정하는 방법은 다음과 같다.

GGSCI 명령 프롬프트에서 다음 명령을 내린다.

EDIT PARAMS ./GLOBALS

이때 나타나는 메모장 편집기에서 새 파일 만들기를 선택하고(이 과정을 처음 수행하는 경우) 다음 줄을 입력한 다음 GLOBALS 파일을 저장한다.

MGRSERVNAME OracleGGSMGR1

OracleDBConsole<instancename>, OracleJobScheduler<instancename> 등의 서비스와 같이 보통 Oracle이라는 접두어가 붙는 Windows용 Oracle 서비스의 일반 규칙에 따라 이름 OracleGGSMGR1을 사용한다. Manager 서비스는 C:\OGG10G 디렉터리에서 Install 명령을 통해 쉽게 생성할 수 있다.

<그림 4>와 같이 Addservice 명령을 사용한다.

< 그림 4 > 관리자 서비스 만들기

새 서비스가 Windows 서비스 목록에 자동 서비스로 나타난다(< 그림 5 > 참조).

< 그림 5 > 관리자 서비스 속성

Manager 서비스는 로컬 시스템 계정으로 실행하거나 Addservice 명령에서 지정한 사용자 이름과 암호를 사용하여 특정 계정으로 실행할 수 있다. 이제 다음 명령으로 Manager 서비스를 시작할 수 있다.

GGSCI (HaviPori) 1> start manager
Starting Manager as service ('OracleGGSMGR1')...
Service started.

 

Windows 이벤트 메시지 설치

이벤트 메시지를 Windows 이벤트 관리자가 표시할 수 있도록 install 명령을 사용하여 Windows 레지스트리에 설치할 수도 있다. 다음 명령을 사용하면 된다.

C:\OGG10G>install addevents
Oracle GoldenGate messages installed successfully.
Install program terminated normally.

일반적 메시지가 아닌 구체적인 것이 생성되도록 하려면 category.dll과 ggsmsg.dll 파일을 C:\OGG10G 디렉터리에서 C:\WINDOWS\system32 디렉터리로 복사하면 된다.

복제 설정 - HRPRD2상의 Extract 프로세스

Oracle GoldenGate Manager프로세스가 작동하여 실행된다. 다음 단계는 데이터베이스 사이에 복제를 설정하는 것이다. 이를 위해 최소한 한 개의 Extract 및 Replicat 그룹을 만들고 구성해야 한다. 이들 그룹에서 캡처해서 복제할 데이터를 지정한다. Extract 프로세스는 원본 데이터베이스에서 발생한 데이터 변경사항을 캡처하고 이것을 대상 서버에 있는 trail로 생성한다. Replicat 프로세스는 대상서버에서 작동하고 있으며 trail에서 데이터 변경사항을 가져와 대상 데이터베이스에 적용함으로써 실제 복제를 실행한다. 또한 데이터베이스의 Supplemental Logging 기능을 켜서 Oracle GoldenGate 복제를 실행할 수 있도록 해야 한다.

이 작업은 데이터베이스에 SYSDBA로 로그온한 상태에서 다음 명령을 수행해야 한다.

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
Database altered.
SQL> alter system switch logfile;
System altered

이제 Extract 그룹을 추가할 준비가 되었다.

GGSCI (HaviPori) 1> ADD EXTRACT emp_ext, TRANLOG, BEGIN NOW
EXTRACT added.

TRANLOG를 지정했는데, 이것은 트랜잭션(Redo) 로그가 데이터 원본임을 의미한다. BEGIN 다음에는 처리를 시작할 로그의 타임 스탬프나, NOW 옵션을 주어 즉시 시작한다는 것을 나타낼 수 있다. 또는 TRANLOG를 EXTSEQNO(시작할 Oracle Redo 로그의 시퀀스 번호)나 EXTRBA(해당 로그의 상대 바이트 주소) 옵션과 함께 사용할 수 있다.

참고로 Extract 그룹의 이름에는 8문자만이 허용되는데, 다음을 지정하면 전체 도움말을 볼 수 있다.

GGSCI (HaviPori) 1> help add extract

다음 단계는 RMTTRAIL 또는 EXTTRAIL을 추가하는 것이다. 전자는 원격 시스템에 사용되며 후자는 동일한 로컬 시스템에서의 복제를 설정하는 경우에 권장된다. 다음 명령에 의해 생성되는 EXTTRAIL을 사용한다.

GGSCI (HaviPori) 1> ADD EXTTRAIL C:\OGG10G\dirdat\et, EXTRACT emp_ext
EXTTRAIL added.

EXTTRAIL은 서버의 물리적 디렉터리, 주로 Oracle GoldenGate 서브 디렉터리 중 하나인 dirdat에 지정된다. 실제 파일이 생성될 때 지정한 두 문자에 숫자 접미어가 추가되어 파일 이름을 만들기 때문에, 지정된 파일 이름은 두 문자로만 지정할 수 있다. 예를 들어 C:\OGG10G\dirdat\et000001 파일은 EXTRACT 프로세스가 시작되어 데이터 변경이 일어날 때 압축이 풀린 파일로 생성된다.

RMTTRAIL의 구문도 마찬가지이며, 단지 이 명령을 사용할 때에는 단어 EXTTRAIL을 RMTTRAIL로 바꾸기만 하면 된다. 주요 차이점은 Extract의 매개변수 파일에 있는데, 이 매개변수 파일은 다음 단계에서 생성된다. RMTTRAIL의 경우 매개변수 파일에는 원격 호스트와 원격 관리자 포트 번호를 설명하는 추가 매개변수가 포함되어 있다.

이제 다음과 같이 Extract 그룹 emp_ext에 대한 매개변수 파일을 만든다.

GGSCI (HaviPori) 1> EDIT PARAM emp_ext

이 파일에 다음 줄을 입력한다.

EXTRACT emp_ext
USERID system@localhost:1521/HRPRD2, PASSWORD hrpassword1
EXTTRAIL C:\OGG10G\dirdat\et
TABLE hr.employees;

위 명령은 첫 번째 Oracle 10g 데이터베이스(HRPRD2)에서 Extract 그룹이 HR.EMPLOYEES 테이블의 변경 사항을 추출하도록 지정한 것이다. RMTTRAIL을 사용할 경우에는 위 명령을 다음과 같이 변경하면 된다.

RMTHOST <remote host>, MGRPORT <remote manager port number>
RMTTRAIL C:\<remote GoldenGate Directory>\dirdat\rt

이제 다음 명령을 사용하여 Extract 프로세스를 시작할 수 있다.

GGSCI (HaviPori) 1> START EXTRACT EMP_EXT
Sending START request to MANAGER ('OracleGGSMGR1') ...
EXTRACT EMP_EXT starting

프로세스에 관한 상태와 정보는 다음과 같이 확인할 수 있다.

GGSCI (HaviPori) 2> STATUS EXTRACT EMP_EXT
EXTRACT EMP_EXT: RUNNING
GGSCI (HaviPori) 3> INFO EXTRACT EMP_EXT
EXTRACT EMP_EXT Last Started 2009-12-08 13:04 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:00 ago)
Log Read Checkpoint Oracle Redo Logs
2009-12-08 13:05:58 Seqno 11, RBA 578560

또한 프로세스에 관한 자세한 정보를 표시할 수도 있다.

GGSCI (HaviPori) 4> INFO EXTRACT EMP_EXT detail
EXTRACT EMP_EXT Last Started 2009-12-08 13:04 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:00 ago)
Log Read Checkpoint Oracle Redo Logs
2009-12-08 13:07:19 Seqno 11, RBA 596992
Target Extract Trails:
Remote Trail Name Seqno RBA Max MB
C:\OGG10G\dirprm\et 0 923 10
Extract Source Begin End
D:\ORADATA\HRPRD2\REDO01.LOG 2009-12-08 12:59 2009-12-08 13:07
Not Available * Initialized * 2009-12-08 12:59
Current directory C:\OGG10G
Report file C:\OGG10G\dirrpt\EMP_EXT.rpt
Parameter file C:\OGG10G\dirprm\EMP_EXT.prm
Checkpoint file C:\OGG10G\dirchk\EMP_EXT.cpe
Process file C:\OGG10G\dirpcs\EMP_

 

Extract 문제 해결

오류가 있으면 Extract 프로세스가 STOPPED(정지됨)로 나타날 수 있다. 이 경우 오류를 조사해야 한다. 먼저 위의 자세한 정보에서 언급한 보고서 파일 C:\OGG10G\dirrpt\EMP_EXT.rpt를 확인한다. 그런 다음 주 C:\OGG10G 디렉터리에 있는 로그 파일 ggserr.log 및 sqlnet.log에서 관련 메시지가 있는지 확인한다.

ggserr.log 파일에는 다음과 같은 이벤트 정보가 들어 있다.

2009-12-02 14:53:26 GGS INFO 301 Oracle GoldenGate
Manager for Oracle, mgr.prm: Command received from GGSCI on host
10.10.10.10 (START EXTRACT EMP_EXT )
2009-12-02 14:53:26 GGS INFO 302 Oracle GoldenGate Manager for
Oracle, mgr.prm:
EXTRACT EMP_EXT starting.

이 이벤트는 다음과 같은 방법으로 확인할 수도 있다.

GGSCI (HaviPori) 1> VIEW GGSEVT
...
....
2009-12-02 15:09:34 GGS INFO 302 Oracle GoldenGate Manager for
Oracle,
mgr.prm: EXTRACT EMP_EXT starting.
2009-12-02 15:13:26 GGS INFO 399 Oracle GoldenGate Command
Interpreter
for Oracle: GGSCI command (HaviPoriH): EDIT PARAM emp_ext.

sqlnet.log 파일에 다음과 같은 오류가 나타날 수 있다.

TNS-12557: TNS:protocol adapter not loadable

이 오류는 데이터베이스 연결 문제를 표시해 주므로 리스너를 점검해야 한다. 시작할 때 Path(경로)에 오라클 홈 bin 하위 디렉터리가 포함되어 있는지 확인한다. 다른 TNS 오류가 있을 수 있으며, 이 경우 다른 해결 방법이 표시될 수 있다.

EMP_EXT.rpt에 다음과 같은 오류가 표시될 수 있다.

2009-12-08 13:01:27 GGS ERROR 182 OCI Error beginning
session (status = 28009-ORA-28009: connection as SYS should be as
SYSDBA or SYSOPER).
2009-12-08 13:01:27 GGS ERROR 190 PROCESS ABENDING.

이것은 Extract 프로세스가 SYSDBA 없이 sys로 로그온하려 하고 있음을 나타낸다. Extract에 대한 매개변수 파일의 Login을 'system'으로 변경하면 된다. 여기서 Extract 매개변수 파일의 Login 줄 끝에 SYSDBA를 지정하는 방법은 통하지 않는다는 데 유의해야 한다(단, 다음에 보게 될 GGSCI의 DBLOGIN 명령에서는이 방법이 가능함).

ggserr.log 파일에 유사한 오류가 나타날 수 있다.

2009-12-03 00:43:16 GGS INFO 399 Oracle GoldenGate
Command Interpreter for Oracle: GGSCI command (HaviPoriH): start
manager.
2009-12-03 00:43:25 GGS ERROR 182 Oracle GoldenGate
Manager for Oracle, mgr.prm: OCI Error during OCIServerAttach
(status = 12154-ORA-12154: TNS:could not resolve the connect identifier
specified).
2009-12-03 00:43:25 GGS ERROR 190 Oracle GoldenGate
Manager for Oracle, mgr.prm: PROCESS ABENDING.


위의 오류는 Manager 매개변수 파일 mgr.prm에 제공한 로그인 자격 증명 문제를 나타낸다. 따라서 Manager는 시작되지 않은 것이다. 있을 수 있는 또 다른 오류는 Extract 보고서 파일에서 확인할 수 있다. 예를 들어 EMP_EXT.rpt에는 다음 오류가 있을 수 있다.

2009-12-07 16:40:08 GGS ERROR 190 No minimum supplemental
logging is enabled. This may cause extract process to handle key
update incorrectly if key column is not in first row piece.
2009-12-07 16:40:08 GGS ERROR 190 PROCESS ABENDING.

이 오류에 대한 해결 방법은 데이터베이스의 Supplemental Logging을 활성화 하는 것이다. 여기서는 이미 이 작업을 수행했으므로 오류가 나타나지 않는다.

 

HRPRD3에서 Replicat 프로세스 설정

이제 대상 데이터베이스 HRPRD3(이 경우 동일한 서버에 있음)로 이동한다. 역시 Oracle 10g 데이터베이스이므로 하위 디렉터리 C:\OGG10G의 동일한 Oracle GoldenGate for Oracle 10g 및 동일한 Manager 서비스를 사용할 수 있다. 데이터베이스가 다른 서버에 있는 경우 데이터베이스 버전에 맞는 Oracle GoldenGate 소프트웨어를 설치한 다음 해당 서버에서 새 Manager 서비스를 구성해야 한다. 첫 단계는 데이터베이스 명령을 내릴 수 있도록 GGSCI 에서 DBLOGIN을 사용하여 데이터베이스에 연결하는 것이다.

DBLOGIN이 다음과 같이 제대로 작동하는지 확인한다.

GGSCI (HaviPori) 1>
DBLOGIN USERID system@localhost:1521/HRPRD3 PASSWORD
hrpassword1
Successfully logged into database.

DBLOGIN에는 다른 두 개의 매개변수 SOURCEDB와 TARGETDB가 있다. 이 매
개변수들은 Oracle 이외의 데이터베이스만를 위한 것이다.

이제 복제 중인 Employees 테이블에 대한 Checkpoint 테이블을 추가해야 한다.

GGSCI (HaviPori) 2> ADD CHECKPOINTTABLE HR.EMPLOYEES_CHKPT
Successfully created checkpoint table HR.EMPLOYEES_CHKPT.

이 테이블에 저장된 Checkpoint는 Replicat 프로세스의 현재 읽기, 쓰기 위치를 가리킨다. 이 과정은 프로세스를 다시 시작해야 하는 경우 또는 서버에 오류가 있거나 네트워크에 다른 방법으로 데이터 손실을 야기할 수 있는 일시적 장애가 있는 경우 데이터 손실을 방지하기 위해 사용된다. 다른 장점은 Checkpoint를 사용하여 동일한 trail을 복수의 Extract 또는 Replicat 프로세스에서 읽을 수 있다는 것이다.

Extract 및 Replicat 프로세스가 배치 모드로 실행될 때는 일반적으로 재시작을하기 때문에 Checkpoint가 필요하지 않으며, 따라서 Checkpoint는 선택사항이다. 그러나 Extract 및 Replicat 프로세스를 지속적으로 실행해야 하는 경우에는 Checkpoint가 필요하다. heckpoint는 보통 dirchk 하위 디렉터리에 파일로 유지되고 있지만, Replicat의 경우에는 데이터베이스의 Checkpoint 테이블에 저장할 수 있다. 만약 GLOBALS 매개변수 파일에 Checkpoint 테이블을 지정하면 ADD CHECKPOINT 명령에 별도로 지정할 필요는 없다. 다음과 같은 모습이 될 수 있다.

GGSCI (HaviPori) 3> ADD CHECKPOINTTABLE
No checkpoint table specified, using GLOBALS specification (hr.
employees_chkpt).
Successfully created checkpoint table HR.EMPLOYEES_CHKPT.

이제 다음과 같이 첫 번째 데이터베이스에서 Extract 그룹 설정에 사용했던 것과 같은 EXTTRAIL을 지정하여 Replicat 그룹을 추가할 수 있다. 그러면 Replicat 그룹이 Extract 그룹에서 만든 trail에 정보를 기록하거나 해당 trail을 사용하게 된다.

GGSCI (HaviPori) 4> ADD REPLICAT emp_rep, EXTTRAIL C:\OGG10G\
dirdat\et, CHECKPOINTTABLE hr.employees_chkpt,
REPLICAT added.

다음과 같이 매개변수 파일을 이 Replicat 그룹에 맞게 편집한다.

GGSCI (HaviPori) 5> EDIT PARAM emp_rep

새 파일에 다음 내용을 입력한다.

REPLICAT emp_rep
USERID system@localhost:1521/HRPRD3, PASSWORD hrpassword1
ASSUMETARGETDEFS
MAP hr.employees, TARGET hr.employees;

이 테이블은 똑같은 DDL 구조를 가지고 있기 때문에 ASSUMETARGETDEFS 매개변수를 사용한다.

이제 Replicat 그룹을 시작할 수 있다.

GGSCI (HaviPori) 6> start REPLICAT emp_rep
Sending START request to MANAGER ('GGSMGR') ...
REPLICAT EMP_REP starting

상태가 표시되려면 잠시 기다려야 하는데, 즉시 확인하려고 하면 상태가 'stopped(정지됨)'으로 나타날 수 있다. 상태가 'running(실행 중)'으로 표시되면 자세한 정보를 확인하고 info all 명령을 내려서 실행 중인 모든 프로세스를 표시할 수 있다.

GGSCI (HaviPori) 7> status REPLICAT emp_rep
REPLICAT EMP_REP: STOPPED
GGSCI (HaviPori) 8> status REPLICAT emp_rep
REPLICAT EMP_REP: RUNNING
GGSCI (HaviPori) 11> info REPLICAT emp_rep detail
REPLICAT EMP_REP Last Started 2009-12-08 13:35 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:01 ago)
Log Read Checkpoint File C:\OGG10G\dirdat\et000001
2009-12-08 13:33:24.000000 RBA 985
Extract Source Begin End
C:\OGG10G\dirdat\et000001 2009-12-08 13:33 2009-12-08 13:33
C:\OGG10G\dirdat\et000000 * Initialized * 2009-12-08 13:33
Current directory C:\OGG10G
Report file C:\OGG10G\dirrpt\EMP_REP.rpt
Parameter file C:\OGG10G\dirprm\EMP_REP.prm
Checkpoint file C:\OGG10G\dirchk\EMP_REP.cpr
Checkpoint table HR.EMPLOYEES_CHKPT
Process file C:\OGG10G\dirpcs\EMP_REP.pcr
Error log C:\OGG10G\ggserr.log
GGSCI (HaviPori) 12> info all
Program Status Group Lag Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EMP_EXT 00:00:00 00:00:03
REPLICAT RUNNING EMP_REP 00:00:00 00:00:06

이제 두 개의 Oracle Database 10g 데이터베이스 HRPRD2와 HRPRD3 사이에서 데이터 복제를 테스트할 수 있다. 그러나 테스트는 다음 단계에서 Oracle 11g 데이터베이스 HRPRD1에 대한 복제까지 설정하고 나서 해보기로 한다.

 

HRPRD1에서 Replicat 프로세스 설정

Oracle 11g 데이터베이스 HRPRD1도 같은 서버에 있다. 이 데이터베이스는 11g 버전이기 때문에 이 글의 시작 부분에서 압축을 풀어 C:\OGG11G 디렉터리에 저장했던 Oracle GoldenGate for Oracle 11g를 사용해야 한다.

Oracle 11g 데이터베이스 홈에 대해 환경 변수를 다음과 같이 설정한다.

set ORACLE_HOME=C:\app\havipori\product\11.1.0\db_1
set ORACLE_SID=HRPRD1
set PATH=%ORACLE_HOME%\bin;%PATH%
set LD_LIBRARY_PATH=C:\OGG11G; %ORACLE_HOME%\LIB;
%ORACLE_HOME%\jdbc\lib
set CLASSPATH=;C:\Program Files\Java\jre6\lib\ext\QTJava.
zip;%ORACLE_HOME%\jdbc\lib

Oracle GoldenGate for Oracle 10g 설치와 유사한 단계에 따라 Oracle GGSMGR2라는 Manager 서비스를 만들고 해당 서비스를 시작한다. 작업 하위 디렉터리와 mgr.prm 파일을 만든다. 이 단계는 아래와 같다.

C:\OGG11G>ggsci
GGSCI (HaviPori) 1> EDIT PARAMS ./GLOBALS

이 파일에 MGRSERVNAME OracleGGSMGR2를 입력하고 파일을 저장한다.

C:\OGG11G>install addservice
Service 'OracleGGSMGR2' created.
Install program terminated normally.
GGSCI (HaviPori) 1>create subdirs
Creating subdirectories under current directory C:\OGG11G
Parameter files C:\OGG11G\dirprm: created
Report files C:\OGG11G\dirrpt: created
Checkpoint files C:\OGG11G\dirchk: created
Process status files C:\OGG11G\dirpcs: created
SQL script files C:\OGG11G\dirsql: created
Database definitions files C:\OGG11G\dirdef: created
Extract data files C:\OGG11G\dirdat: created
Temporary files C:\OGG11G\dirtmp: created
Veridata files C:\OGG11G\dirver: created
Veridata Lock files C:\OGG11G\dirver\lock: created
Veridata Out-Of-Sync files C:\OGG11G\dirver\oos: created
Veridata Out-Of-Sync XML files C:\OGG11G\dirver\oosxml: created
Veridata Parameter files C:\OGG11G\dirver\params: created
Veridata Report files C:\OGG11G\dirver\report: created
Veridata Status files C:\OGG11G\dirver\status: created
Veridata Trace files C:\OGG11G\dirver\trace: created
Stdout files C:\OGG11G\dirout: created
GGSCI (HaviPori) 2> EDIT PARAMS mgr

이 파일에 다음 줄을 입력하고 파일을 저장한다. 참고로 다른 포트 번호를 사용했고 Manager는 이제 HRPRD1에 로그온한다는 것을 알 수 있다.

PORT 7810
USERID system@localhost:1521/HRPRD1 PASSWORD hrpassword1

이제 Manager를 시작할 수 있다. 다음 단계는 DBLOGIN을 사용하여 Oracle 11g 데이터베이스에 로그인한 다음 이 데이터베이스에 Checkpoint 테이블을 만드는것이다.

GGSCI (HaviPori) 3> start manager
Starting Manager as service ('OracleGGSMGR2')...
Service started.
GGSCI (HaviPori) 4> DBLOGIN USERID system@localhost:1521/HRPRD1
PASSWORD hrpassword1
Successfully logged into database.
GGSCI (HaviPori) 5> ADD CHECKPOINTTABLE HR.EMPLOYEES_CHKPT
Successfully created checkpoint table HR.EMPLOYEES_CHKPT.

이제 이 데이터베이스 HRPRD1에 두 번째 Replicat 그룹을 만들 준비가 되었다. 참고로 앞서 HRPRD3 데이터베이스에서 사용한 것과 똑같은 trail을 사용한다. 이렇게 해서 HRPRD2에서 오는 동일한 trail을 두 Replicat 그룹의 두 데이터베이스 HRPRD3과 HRPRD1에서 사용하고 있는데, 이 상황이 매우 인상적이다.

ADD REPLICAT 명령에 BEGIN NOW를 사용하지 않으면 Replicat 프로세스는 추적 기록의 시작 부분에서 바로 시작하는데, 그렇게 하면 된다.

GGSCI (HaviPori) 6> ADD REPLICAT emp_rep, EXTTRAIL C:\OGG10G\
dirdat\et, CHECKPOINTTABLE hr.employees_chkpt,
REPLICAT added.
GGSCI (HaviPori) 7> EDIT PARAM emp_rep

이 파일에 다음 줄을 입력한다.

REPLICAT emp_rep
USERID system@localhost:1521/HRPRD1, PASSWORD hrpassword1
ASSUMETARGETDEFS
HANDLECOLLISIONS
DISCARDFILE c:\OGG11G\dirrpt\emp_ext.dsc, purge
MAP hr.employees, TARGET hr.employees;

여기에는 HANDLECOLLISIONS 및 DISCARDFILE 등과 같은 매개변수가 지정되어 있는데, 이것들은 테이블 내의 중복 같은 오류를 처리하기 위한 것이다. 이 매개변수들을 여기서는 옵션으로 지정했지만 첫 번째 Replicat 그룹 매개변수 파일에 저장할 수도 있다. HANDLECOLLISIONS는 원본 데이터베이스가 활성화되어 있는 동안 초기 데이터 로드에 대한 자동 오류 처리를 수행한다. 초기 로드가 완료된 후에는 반드시 이 매개변수를 제거해야 한다. DISCARDFILE 매개변수는 오류가 발생한 레코드에 대한 기록이 저장될 파일을 지정한다.

이제 Replicat 그룹을 시작하고 상태를 확인한다.

GGSCI (HaviPori) 8> start REPLICAT emp_rep
Sending START request to MANAGER ('GGSMGR2') ...
REPLICAT EMP_REP starting
GGSCI (HaviPori) 9> status REPLICAT emp_rep
REPLICAT EMP_REP: STOPPED

상태는 정지된 것(Stopped)으로 나타나지만 C:\OGG11G 디렉터리의 로그 파일에는 오류가 나타나 있지 않다.

이때 오류를 표시하는 유일한 방법은 명령 프롬프트에서 Replicat를 실행하는 것 뿐이다. 이 방법은 디버깅 목적을 위한 것이다. 이 때 오류는 보고서 파일이 아닌 화면상에 나타난다. 이러한 오류는 우리가 사용하는 테스트 서버의 환경적인 문제일 가능성이 크며 Oracle GoldenGate for Oracle 11g에서는 이 방법을 통해 문제를 찾아낼 수 있다. 사용할 명령은 다 paramfile c:\OGG11G\dirprm\emp_rep.prm
***********************************************************************
Oracle GoldenGate Delivery for Oracle
Version 10.4.0.19 Build 002
Windows (optimized), Oracle 11 on Sep 18 2009 16:44:02
Copyright (C) 1995, 2009, Oracle and/or its affiliates. All rights reserved.
Starting at 2009-12-09 11:46:28
***********************************************************************
Operating System Version:
Microsoft Windows XP Professional, on x86
Version 5.1 (Build 2600: Service Pack 2)
Process id: 1504
Description:
***********************************************************************
** Running with the following parameters **
***********************************************************************
REPLICAT emp_rep
USERID system@localhost:1521/HRPRD1, PASSWORD ***********
ASSUMETARGETDEFS
HANdlecollisions
Discardfile c:\OGG11G\dirrpt\emp_ext.dsc, purge
MAP hr.employees, TARGET hr.employees;
CACHEMGR virtual memory values (may have been adjusted)
CACHEBUFFERSIZE: 64K
CACHESIZE: 512M
CACHEBUFFERSIZE (soft max): 4M
CACHEPAGEOUTSIZE (normal): 4M
PROCESS VM AVAIL FROM OS (min): 1G
CACHESIZEMAX (strict force to disk): 881M
Database Version:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for 32-bit Windows: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production
Database Language and Character Set:
NLS_LANG environment variable not set, using default value
AMERICAN_AMERICA.WE8M
SWIN1252.
NLS_LANGUAGE = "AMERICAN"
NLS_TERRITORY = "AMERICA"
NLS_CHARACTERSET = "WE8MSWIN1252"
Warning: NLS_LANG is not set. Please refer to user manual for more
information.
*****************************************************************
******
** Run Time Messages **
*****************************************************************
******
Opened trail file C:\OGG10G\dirdat\et000001 at 2009-12-09 11:46:35
MAP resolved (entry HR.EMPLOYEES):
MAP HR.EMPLOYEES, TARGET hr.employees;
Using following columns in default map by name:
EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER,
HIRE_DATE,
JOB_ID, SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID
Using the following key columns for target table HR.EMPLOYEES:
EMPLOYEE_ID.

이 때 Replicat 프로세스는 화면 출력 상태로 대기 중이다. 새로운 명령창을 열고 GGSCI를 시작한 다음 상태를 확인하면 Replicat 프로세스가 RUNNING(실행 중) 으로 표시된다. Oracle Database 11g에 대한 복제는 이제 작동하기 시작한다.

HANDLECOLLISIONS 및 DISCARDFILE 등과 같은 매개변수는 명령줄에서 Replicat 프로세스를 실행할 때 발생할 수 있는 중복 레코드 오류 때문에 넣은 것이다. 이 오류는 아래의 출력에 나타나 있는데, 이들은 중복 레코드 때문에 문제가 있음을 나타낸다. 좀 더 살펴보면 사용자가 대상 Oracle 11g 데이터베이스에 직접 레코드를 삽입했고 이 레코드는 Oracle GoldenGate가 Oracle 10g 데이터베이스에 복제한 데이터와 같다는 것을 알 수 있다. 이로 인해 복제를 중단시키는 레코드 중복 문제가 발생했다.


***********************************************************************
** Run Time Messages **
***********************************************************************
Opened trail file C:\OGG10G\dirdat\et000000 at 2009-12-09 11:17:51
Switching to next trail file C:\OGG10G\dirdat\et000001 at 2009-12-09
11:17:51 du
e to EOF, with current RBA 923
Opened trail file C:\OGG10G\dirdat\et000001 at 2009-12-09 11:17:51
Processed extract process graceful restart record at seq 1, rba 923.
MAP resolved (entry HR.EMPLOYEES):
MAP HR.EMPLOYEES, TARGET hr.employees;
Using following columns in default map by name:
EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER,
HIRE_DATE,
JOB_ID, SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID
Using the following key columns for target table HR.EMPLOYEES:
EMPLOYEE_ID.
2009-12-09 11:17:54 GGS WARNING 218 Aborted grouped transaction
on 'HR.EMP
LOYEES', Database error 1 (ORA-00001: unique constraint (HR.
EMP_EMAIL_UK) violat
ed).
2009-12-09 11:17:54 GGS WARNING 218 Repositioning to rba 985 in
seqno 1.
2009-12-09 11:17:54 GGS WARNING 218 SQL error 1 mapping
HR.EMPLOYEES to HR
.EMPLOYEES OCI Error ORA-00001: unique constraint (HR.
EMP_EMAIL_UK) violated (status = 1), SQL <INSERT INTO
"HR"."EMPLOYEES" ("EMPLOYEE_ID","FIRST_NAME","LAST_N
AME","EMAIL","PHONE_NUMBER","HIRE_DATE","JOB_ID","SALARY","COM
MISSION_PCT","MANA
GER_ID","DEPARTMENT_ID") VALUES (:a0,:a1,:a2,:a3,:a4,:a5>.
2009-12-09 11:17:54 GGS WARNING 218 Repositioning to rba 985 in
seqno 1.
….

이 문제를 해결하려면 매개변수 HANDLECOLLISIONS와 DISCARDFILE을 넣고 Replicat 프로세스를 다시 시작해야 한다. DISCARDFILE은 오류가 발생한 레코드에 대한 추가 정보를 제공한다. 현재 명령 프롬프트에서 실행한 Replicat 프로세스가 동작 중인데, trail에 대한 모든 처리를 완료할 수 있게 둔다.

그런 다음 Ctrl-C를 눌러 명령창에서 Replicat 프로세스를 정지한다. 이때 다음 내용이 표시된다.

Enter X to exit or C to continue: X
***********************************************************************
* ** Run Time Statistics ** ************************************************************************
Last record for the last committed transaction is the following:
___________________________________________________________________
Trail name : C:\OGG10G\dirdat\et000001
Hdr-Ind : E (x45) Partition : . (x04)
UndoFlag : . (x00) BeforeAfter: A (x41)
RecLength : 196 (x00c4) IO Time : 2009-12-08 13:43:36.000000
IOType : 5 (x05) OrigNode : 255 (xff)
TransInd : . (x03) FormatType : R (x52)
SyskeyLen : 0 (x00) Incomplete : . (x00)
AuditRBA : 11 AuditPos : 1188880
Continued : N (x00) RecCount : 1 (x01)
2009-12-08 13:43:36.000000 Insert Len 196 RBA 1295
Name: HR.EMPLOYEES
___________________________________________________________________
Reading C:\OGG10G\dirdat\et000001, current RBA 1604, 2 records
Report at 2009-12-09 11:47:56 (activity since 2009-12-09 11:46:35)
From Table HR.EMPLOYEES to HR.EMPLOYEES:
# inserts: 2
# updates: 0
# deletes: 0
# discards: 0
# insert collisions: 2
Last log location read:
FILE: C:\OGG10G\dirdat\et000001
SEQNO: 1
RBA: 1604
TIMESTAMP: Not Available
EOF: YES
READERR: 400

이제 HANDLECOLLISIONS 매개변수가 동작하지 않도록 주석 접두어 '--'를 앞에 넣는다. 그런 다음 명령줄에서 Replicat 프로세스를 다시 시작한다. 중복 레코드 문제가 해결되었기 때문에 이제 프로세스가 제대로 작동하고 앞으로 원본 데이터베이스에 변경사항이 생기면 정상 복제된다.

 

복제 시험

HRPRD1, HRPRD2 및 HRPRD3의 3개 데이터베이스 모두 HR.EMPLOYEES 테이블의 레코드는 < 그림 6 >의 명령창에서 확인할 수 있다. 세 데이터베이스 모두 정확히 107개의 레코드가 있다. 내려진 SELECT 명령은 세 번째 창에 나타나 있다. 이제 원본 데이터베이스 HRPRD2의 HR.EMPLOYEES 테이블에 행을 삽입 (INSERT) 후 커밋한 다음 삽입한 행이 대상 데이터베이스 HRPRD3 및 HRPRD1 에 복제되는지 확인한다. INSERT는 < 그림 7 >에 나타나 있다.

3개 데이터베이스에서 다시 SELECT를 실행하면 모든 데이터베이스에 109개의 레코드가 있다는 것을 알 수 있다(<그림 8> 참조). 즉, Oracle GoldenGate for Oracle 10g 및 Oracle 11g를 사용한 복제에 성공했다.

Oracle Database 10g에서 10g 데이터베이스로 복제가 제대로 이루어지는 것을 확인했다. Oracle Database 10g에서 11g 데이터베이스로의 복제도 Replicat 프로세스를 명령 프롬프트에서 "replicat paramfile c:\OGG11G\dirprm\emp_rep.prm" 옵션으로 시작할 경우 가능했다. Replicat 프로세스를 GGSCI에서 시작하면 Stopped 상태로 변한다. 그 이유는 아마 테스트 서버의 환경 오류 때문일 것이다. 참고로 명령 프롬프트에서 시작하면 오류 없이 제대로 작동한다.

< 그림 6 > employee 레코드가 있는 세 데이터베이스

< 그림 7 > HRPRD2 employee 테이블에 삽입하기

< 그림 8 > 다른 데이터베이스에 즉시 복제

 

기능, 자원 요구사항 및 영향

앞에서 Oracle GoldenGate의 Extract 및 Replicat 프로세스의 작동을 보았다. GGSCI 명령 인터페이스에서는 인스턴스(즉, Manager 프로세스 한 개)당 최대 300개라는 엄청난 숫자의 Extract 및 Replicat 프로세스가 지원된다. 그러나 프로세스 수가 증가한 만큼 메모리 사용량도 증가하는데, Extract 및 Replicat 프로세스 각각에 약 25~55MB의 메모리가 필요하다. 메모리 사용량은 실제로는 더 증가할 수도 있으며 동시 트랜잭션 수와 트랜잭션 크기에 따라 달라진다. 이것은 항상 쉽게 결정하기 어려운 문제이다. 또한 생성되는 redo 로그 수에 따라 Oracle GoldenGate가 약 3~5% 정도의 CPU 부하가 원본 시스템에 발생한다.

여기서는 단방향 복제만 설정했지만, 양방향 멀티마스터(멀티사이트 업데이트) 복제를 설정할 수도 있다. Oracle GoldenGate는 동일 레코드에 대한 업데이트 시점을 파악하여 이러한 환경에서 발생할 수 있는 동시 변경으로 인한 충돌 문제를 해결한다. 충돌 해결을 위한 규칙(타임 스탬프 또는 항상 먼저 작동하는 쪽 등)을 설정하거나 충돌 해결 방법을 user exit으로 작성할 수 있다. Oracle GoldenGate 는 대상 데이터베이스의 테이블에 고유한 키가 없더라도 데이터를 복제할 수 있다. 고유 키가 필요한 삭제 또는 업데이트 작업의 경우에는, 몇 개의 컬럼들 또는 전체 레코드를 고유 키로 사용함으로써 데이터베이스 종류에 상관 없이 이 기능을 지원할 수 있다.

현재 Oracle GoldenGate는 2바이트 데이터를 복제할 수 없지만 향후 릴리스에서는 가능하게 될 것이다. 현재로서는 원본 데이터를 그대로 전달하는 방법으로 2바이트 문자를 처리한다.

Oracle Golden Gate Director

이 제품은 이제 Oracle Management Pack for GoldenGate라고 부르며, GUI 인터페이스에서 Oracle GoldenGate 시스템을 모니터링 및 관리하기 위한 Multi-tier 클라이언트-서버 애플리케이션이다. Oracle GoldenGate Director의 원격 클라이언트를 인스턴스가 실행 중인 호스트에 설치하면 다수의 Oracle GoldenGate 인스턴스(Manager 프로세스)를 관리할 수 있다.

클라이언트는 모두 Oracle GoldenGate Director 서버의 중앙 시스템에 연결되며 애플리케이션 서버로 Oracle WebLogic Server 11g(10.3.1)를 사용한다. 이전에는 JBoss Application Server 3.2.7을 제공했었다. 지금은 Oracle WebLogic Server를 대신 제공하는데, Oracle GoldenGate Director 서버를 설치하기 전에 이 서버를 시스템에 미리 설치해야 한다. Oracle GoldenGate Director 서버에는 웹 서버가 있으며 기존의 Oracle Database에 최소 200MB의 데이터베이스저장소가 필요하다. 또는 MySql이나 Microsoft SQL Server를 저장소로 사용할 수 있다. 보안을 위해 저장소에 사용되는 데이터베이스 암호는 최소 8문자여야 하며 최소 숫자 1개와 영숫자 1문자를 포함해야 한다.

GGSCI에서 프로세스를 정의하면 Oracle GoldenGate Director를 사용하여 해당 프로세스들을 구성하고 모니터링 및 제어할 수 있다. OS 명령줄에서 실행되는 다른 독립형 프로세스(예: DDLGEN 프로세스)는 Oracle GoldenGate Director로 모니터링할 수 없다. Extract 프로세스, Replicat 프로세스, Manager 프로세스, trail로컬 또는 원격), 파일(로컬 또는 원격) 및 Extract 및 Replicat 작업은 모두 Windows, UNIX 및 NonStop 플랫폼 기반의 Oracle GoldenGate Director로 구성하고 모니터링 및 제어할 수 있다.

 

결론 및 추가 정보

Manager 매개변수 파일에는 동적 포트 할당, Manager가 시작될 때 복제 프로세스(Extract 및 Replicat)를 자동 시작하게 해주는 기능, trail에 대한 중앙 관리등도 지정할 수 있다.

이러한 고급 관리자 매개변수는 The Oracle GoldenGate Administration Guide Version 10.4에 자세히 설명되어 있다. 이 가이드에서는 Extract 및 Replicat 프로세스를 여러가지 다른 방법으로 구성하는 방법 즉, Oracle GoldenGate를 Live Reporting, 실시간 데이터 분산, 실시간 데이터 웨어하우징, Live-Standby 데이터베이스 유지관리 및 Active-Active HA 등의 여러 목적에 사용하는 방법, 그리고 DDL 동기화 구성 방법에 대해 설명한다. 또한 Oracle GoldenGate는 데이터베이스를 다운타임 거의 없이 업그레이드해야 하는 데이터베이스 업그레이드 상황에서 매우 유용할 수 있다. 즉, 이전 데이터베이스 버전에서 새 데이터베이스 버전으로 Oracle GoldenGate 복제를 설정한 다음, 준비가 모두 끝나면 모든 클라이언트를 새 데이터베이스를 가리키도록 전환하기만 하면 된다. 예를 들어 기존의 모든 데이터베이스 내용을 세계에서 가장 빠른 데이터베이스 환경인 Oracle Exadata V2 데이터베이스 시스템으로 이동하는 경우 이 방법은 탁월한 선택이 될 수 있다.

또 하나의 유용한 Oracle GoldenGate 참조서로 Oracle GoldenGate Troubleshooting and Tuning Guide Version 10.4가 있다. 이 참조서와 Administration Guide 둘 다 이 글의 시작 부분에서 다운로드한 문서 zip 파일에 포함되어 있다.

지금까지 설명한 Oracle GoldenGate 복제 환경 구성을 기꺼이 지원해 준(진정한 오라클 정신으로) Oracle Fusion Middleware 및 Oracle GoldenGate 제품 관리자 여러분께 감사하며, Oracle GoldenGate Director를 Oracle Enterprise Manager Grid Control과 통합한다는 계획이 신속히 이루어지기를 기대한다.

Oracle Enterprise Manager Grid Control은 오라클의 강력한 엔터프라이즈 관리 제품이다. 현재 환경의 모든 Oracle RAC 또는 Non-Oracle RAC 데이터베이스, Oracle Automatic Storage Management(ASM) 인스턴스 및 Oracle Clusterware의 패칭을 자동화하는 방법을 배우려면 필자의 기사 “Patch a Thousand Databases, Using Oracle Enterprise Manager Grid Control” (Oracle Enterprise Manager Grid Control을 사용하여 수많은 데이터베이스를 패치하는 방법)을 읽을 것을 권한다. Oracle Enterprise Manager Grid Control 을 사용하여 Oracle Recovery Manager(Oracle RMAN) 백업을 현재 데이터 베이스에 맞도록 쉽게 설정하려면 'Oracle RMAN Backups: Pushing the Easy Button'(Oracle RMAN 백업: Easy 버튼 누르기)을 읽을 것을 권한다.

그리고 Oracle Enterprise Manager Grid Control이 Oracle Data Guard 설정 및 모니터링에 사용할 경우 많은 시간과 자원을 어떻게 절약할 수 있는지 이해 하려면 필자의 또 다른 최근 기사 'Easy Disaster Proof Production with Grid Control'(Grid Control을 이용한 손쉬운 재해 예방 실무)을 읽을 것을 권한다.

오라클의 세계를 즐기시기를!

 

 

필자소개

오라클 ACE 감독(데이터베이스)인 포러스 호미 하베왈라(Porus Homi Havewala)는 싱가포르의 오라클 플래티넘 파트너인 S & I Systems Pte Ltd.의 수석 컨설턴트이다. 1994년부터 오라클 기술을 폭 넓게 경험했으며 실무 DBA, 선임 컨설턴트, e-비즈니스 기술 DBA 겸 시스템 관리자, 개발 DBA 및 데이터베이스 설계자/모델러(Oracle Designer를 이용한)로 일해 왔다 최초의 실무 Oracle Enterprise Manager Grid Control 현장에 선임 데이터베이스 설계자 및 기술 팀 리더로 참여했다. 그는 열렬한 Oracle Enterprise Manager Grid Control 전도사이며 Grid 관리에 관한 여러 OTN 기사를 썼다.

+ Recent posts