Computer >> 컴퓨터 >  >> 프로그래밍 >> 데이터베이스

Oracle 19c의 DBCA 명령어를 활용한 데이터베이스 복제 완벽 가이드

이 글에서는 Oracle 19c의 새로운 기능인 Database Configuration Assistant(DBCA)를 사용하여 원격 플러그형 데이터베이스(PDB)를 컨테이너 데이터베이스(CDB)로 복제하는 방법을 소개합니다. 이 방식의 가장 큰 장점은 소스 데이터베이스의 백업을 생성하지 않고도 복제가 가능하다는 점입니다.

기존 백업 기반 복제 방식과 달리, DBCA를 활용하면 소스에서 타겟으로 복제하는 데 걸리는 시간을 최소화할 수 있습니다.

소스 DB 환경 정보

복제에 사용되는 소스 데이터베이스 구성은 다음과 같습니다.

  • CDB: LCONCDB
  • PDB: LCON

아래는 소스 측 각 컨테이너(CDB 및 PDB)에 포함된 전체 DBF 파일 수입니다. 복제 작업이 완료된 후 타겟에서 이 파일 수를 검증하여 일치 여부를 확인해야 합니다.

위 소스 DB를 기반으로 타겟 호스트에 새로운 CDB와 PDB를 생성하게 됩니다.

타겟 DB 환경 정보

  • CDB: KCONCDB
  • PDB: KCON

사전 준비 단계

복제 작업을 시작하기 전에 아래 사전 작업들을 완료해야 합니다.

1. 타겟 호스트에 Oracle Database 19c 설치

타겟 호스트에 Oracle Database 19c를 직접 설치하거나, 소스에서 RDBMS 19c tar 파일을 생성하여 타겟 노드에서 압축 해제할 수 있습니다. 또는 rsync 명령어를 사용해 소스에서 타겟으로 RDBMS를 동기화하여 동일한 환경을 만들 수도 있습니다.

2. 컨텍스트 파일 생성

19c RDBMS 설치/생성 후에는 perl adclonectx.pl 스크립트를 실행하기 위한 XML 컨텍스트 파일을 생성하고 필요한 정보를 입력해야 합니다. 다음은 타겟 DB 노드에서 컨텍스트 파일을 생성하는 명령어 예시입니다.

[oraki@nglusnj bin]$ perl adclonectx.pl contextfile=/u02/oracle/KCON/product/19.3/appsutil/NYAPP_nglusnj.xml
Copyright (c) 2011, 2015 Oracle Corporation
Redwood Shores, California, USA

Oracle E-Business Suite Rapid Clone
Version 12.2
adclonectx Version 120.30.12020000.22
Running: /u02/oracle/KCON/product/19.3/appsutil/clone/bin/../jre/bin/java -Xmx600M -Doracle.jdbc.autoCommitSpecCompliant=false -classpath /u02/oracle/KCON/product/19.3/appsutil/clone/bin/../jlib/ojdbc8.jar:/u02/oracle/KCON/product/19.3/appsutil/clone/bin/../jlib/xmlparserv2.jar:/u02/oracle/KCON/product/19.3/appsutil/clone/bin/../jlib/java: oracle.apps.ad.context.CloneContext -e /u02/oracle/KCON/product/19.3/appsutil/NYAPP_nglusnj.xml -tmpl /u02/oracle/KCON/product/19.3/appsutil/clone/bin/../context/db/adxdbctx.tmp

명령 실행 후 APPS 비밀번호를 입력하면 로그 파일 위치가 표시됩니다.

Log file located at /u02/oracle/KCON/product/19.3/appsutil/clone/bin/CloneContext_0227034250.log

이후 새로운 데이터베이스 컨텍스트 파일 생성에 필요한 값들을 순차적으로 입력합니다.

Target System Hostname (virtual or normal) [nglusnj] : nglusnj

입력값 검증 권장 안내가 표시되며, 다음과 같은 경우에는 검증을 생략할 수 있습니다.

  • 원격 시스템용 컨텍스트를 소스 시스템에서 복제하는 경우
  • 포트가 이미 사용 중이고 현재 서비스를 중단하고 싶지 않은 경우
  • 컨텍스트 복제 시 연결해야 할 데이터베이스가 사용 불가능한 경우
Do you want the inputs to be validated (y/n) [n] ? : n
Target System Base Directory : /u02/oracle/KCON
Target Instance is RAC (y/n) [n] :
Target System CDB Name : KCONCDB
Target System PDB Name : KCON
Oracle OS User [oraki] :
Oracle OS Group [dba] :
Role separation is supported y/n [n] ? : n
Number of DATA_TOP's on the Target System [2] :
Target System DATA_TOP Directory 1 [/u02/oracle/KCON/NYAPPCDB] : /u02/oracle/KCON/KCONCDB
Target System DATA_TOP Directory 2 [/u02/oracle/KCON/data] :
Specify value for OSBACKUPDBA group [dba] :
Specify value for OSDGDBA group [dba] :
Specify value for OSKMDBA group [dba] :
Specify value for OSRACDBA group [dba] :
Target System RDBMS ORACLE_HOME Directory [/u02/oracle/KCON/19.0.0] : /u02/oracle/KCON/product/19.3
Do you want to preserve the Display [nglusnj:0.0] (y/n) : y
Target System Port Pool [0-99] : 20

포트 풀 입력이 완료되면 리포트 파일 위치가 안내됩니다.

Report file located at /u02/oracle/KCON/product/19.3/appsutil/temp/portpool.lst

컨텍스트 파일 경로 확인 후 덮어쓰기를 진행하면 새로운 데이터베이스 컨텍스트 파일이 생성됩니다.

New context path and file name [/u02/oracle/KCON/product/19.3/appsutil/KCON_nglusnj.xml] : /u02/oracle/KCON/product/19.3/appsutil/KCON_nglusnj.xml file already exists.
Do you want to overwrite it (y/n) [n] ? : y
Replacing /u02/oracle/KCON/product/19.3/appsutil/KCON_nglusnj.xml file.
The new database context file has been created : /u02/oracle/KCON/product/19.3/appsutil/KCON_nglusnj.xml

3. adcfgclone을 통한 RDBMS 구성

타겟 DB 노드에 컨텍스트 파일 생성이 완료되면, 해당 컨텍스트 파일을 인자로 전달하여 adcfgclone을 실행함으로써 19c RDBMS를 구성해야 합니다. 명령어 실행 예시는 다음과 같습니다.

[oraki@nglusnj bin]$ perl adcfgclone.pl dbTechStack /u02/oracle/KCON/product/19.3/appsutil/KCON_nglusnj.xml
Copyright (c) 2002, 2015 Oracle Corporation
Redwood Shores, California, USA

Oracle E-Business Suite Rapid Clone
Version 12.2
adcfgclone Version 120.63.12020000.65

APPS 비밀번호 입력 후 Rapid Clone이 자동으로 실행되며, rdbms home 적용이 시작됩니다.

Beginning rdbms home Apply - Sat Feb 27 04:25:16 2021

진행률이 표시되며, 로그 파일 위치는 다음과 같습니다.

Log file located at /u02/oracle/KCON/product/19.3/appsutil/log/KCON_nglusnj/ApplyDBTechStack_02270425.log

적용이 완료되면 'Completed Apply...' 메시지가 출력됩니다.

4. 소스 DB 아카이브 로그 모드 설정 확인

소스 CDB와 PDB는 반드시 아카이브 로그 모드(archive log mode)로 운영되고 있어야 합니다. 복제 작업 전에 소스 데이터베이스가 아카이브 로그 모드인지 반드시 확인하세요.

5. DBCA 명령어로 CDB 및 PDB 복제

타겟 노드에서 VNC 환경으로 접속한 뒤 DBCA 명령어를 실행하여 CDB와 PDB를 복제합니다.

명령어 문법:

./dbca -silent -createDuplicateDB -gdbName {CLONE_DB_NAME} -primaryDBConnectionString <hostname:port/service> -sid {CLONE_DB_SID} -databaseConfigType SINGLE -initParams db_unique_name={CLONE_DB_NAME} -sysPassword {PRIMARY_DB_SYS_PWD} -datafileDestination {CLONE_DATAFILE_LOC}

실제 실행 예시:

[oraki@nglusnj ~]$ dbca -silent -createDuplicateDB -gdbName KCONCDB -sid KCONCDB -primaryDBConnectionString nglusnj:1551/LCONCDB -databaseConfigType SI -initParams db_unique_name=KCONCDB -sysPassword LCON5yspwd! -datafileDestination /u02/oracle/KCON/product/oradata/KCONCDB

주요 파라미터 설명:

  • -gdbName: 타겟 글로벌 데이터베이스 이름
  • -sid: 타겟 SID 이름
  • -primaryDBConnectionString: 소스 연결 문자열
  • -databaseConfigType: SI(Single Instance, 단일 인스턴스) 의미
  • -initParams db_unique_name: 타겟 DB 고유 이름
  • -sysPassword: sys 사용자 비밀번호
  • -datafileDestination: 타겟 측 DBF 파일 저장 위치

명령어 실행이 완료되면 CDB와 PDB가 모두 정상적으로 생성됩니다.

PDB 이름 변경

복제된 PDB는 소스 DB와 동일한 이름(LCON)을 가지므로, 타겟 환경에 맞게 이름을 변경해야 합니다. 다음 단계를 따라 PDB 이름을 변경할 수 있습니다.

SQL> alter session set container=LCON;
Session altered.

SQL> shutdown immediate;
Pluggable Database closed.

SQL> startup open restrict;
Pluggable Database opened.

SQL> alter pluggable database LCON rename global_name to KCON;
Pluggable database altered.

SQL> shutdown immediate;
Pluggable Database closed.

SQL> alter database open;
Database altered.

PDB를 restricted 모드로 오픈한 상태에서 global_name을 변경한 뒤, 다시 정상 모드로 오픈하면 이름 변경이 완료됩니다.

여기까지 완료되면 복제 작업이 끝난 것입니다. 마지막으로 소스 DB의 DBF 파일 목록과 타겟 DB의 DBF 파일 목록을 비교하여 검증해야 하며, 양쪽의 DBF 파일 수가 동일해야 합니다.

결론

Oracle 19c의 신규 기능인 DBCA를 사일런트(silent) 모드로 활용한 PDB 복제는 최소한의 시간 안에 데이터베이스를 복제할 수 있는 가장 간단하고 효율적인 방법입니다. 특히 소스 데이터베이스의 백업을 수행하지 않아도 되고, 백업 조각을 타겟 호스트로 전송하는 과정도 생략 가능하므로 전체 복제 소요 시간을 크게 단축할 수 있다는 점에서 실무적인 활용 가치가 높습니다.