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

Oracle 물리적 스탠바이 데이터베이스에서 RMAN으로 데이터베이스 복제하기

이 글에서는 물리적 스탠바이 데이터베이스(Physical Standby Database)를 활용해 새로운 데이터베이스를 복제하는 방법을 단계별로 소개합니다.

데이터베이스 복제(Database Duplication)는 네트워크를 통해 원본 데이터베이스를 보조 목적지(auxiliary destination)로 복사한 뒤 복제 데이터베이스를 생성하는 기능입니다. 이 방식의 가장 큰 장점은 사전에 준비된 RMAN 백업이나 백업본이 전혀 필요 없다는 점입니다.

물리적 스탠바이 데이터베이스로부터의 복제는 Oracle 11g Release 2 이상 버전부터 공식적으로 지원됩니다.

RMAN 활성 복제(Active Duplication)를 물리적 스탠바이에서 수행하려면 다음과 같은 환경이 필요합니다:

  • 데이터베이스 버전: Oracle 11g ~ 최신 버전
  • 운영체제: Linux 7
  • 스탠바이 DB 이름: PROD_DR
  • 대상 DB 이름: TEST

1. 스탠바이 데이터베이스를 읽기 전용 모드로 전환

복제 작업을 진행하려면 먼저 물리적 스탠바이 데이터베이스의 복구(recovery) 프로세스를 중단하고, 데이터베이스를 읽기 전용(read-only) 모드로 열어야 합니다.

다음 명령어로 스탠바이 데이터베이스의 현재 상태를 확인합니다:

PROD_DR> select name, open_mode, log_mode from v$database;

실행 결과는 다음과 유사하게 출력됩니다:

NAME      	OPEN_MODE             LOG_MODE
--------- 	--------------------  ------------
PROD_DR   	 MOUNTED              ARCHIVELOG

다음 명령어로 스탠바이 데이터베이스의 복구를 중지합니다:

SQL> alter database recover managed standby database cancel;
Database altered.

그다음 데이터베이스를 읽기 전용 모드로 엽니다:

SQL> alter database open read only;
Database altered.

다시 상태를 조회하여 MOUNTED가 아닌 READ ONLY로 변경되었는지 확인합니다:

PROD_DR> select name, open_mode,log_mode from v$database;

NAME   	     OPEN_MODE           	 LOG_MODE
--------- 	  -------------------- 	 ------------
PROD_DR  	  READ ONLY         	   ARCHIVELOG

2. 대상 서버 준비

이 단계에서는 스탠바이 데이터베이스의 Oracle Home 바이너리 전체를 대상 인스턴스 서버로 복사하고, 원본 데이터베이스로부터 pfile(파라미터 파일)을 준비한 뒤 새 데이터베이스 이름에 맞게 수정합니다.

참고: 동일한 서버에 데이터베이스를 복제하는 경우에는 DB_NAME, DB_UNIQUE_NAME, DB_FILE_NAME_CONVERT, LOG_FILE_NAME_CONVERT 파라미터에 적절한 값을 반드시 지정해야 합니다.

먼저 다음 명령어로 pfile을 준비합니다:

cd $ORACLE_HOME/dbs
initTEST.ora

*.control_files='+DATA/cntrl01.dbf', '+DATA/cntrl02.dbf'
*.db_create_file_dest='+DATA'
*.db_file_name_convert='+PROD_DR_DATA','+DATA'
*.db_name='TEST'
*.db_unique_name='TEST'
*.diagnostic_dest='/u01/app/diag'
*.log_file_name_convert='+PROD_DR_DATA','+DATA'

기존 스탠바이 패스워드 파일을 복사하여 TEST 데이터베이스의 SID에 맞게 이름을 변경하거나, 대상 서버에서 동일한 원본 비밀번호로 새 패스워드 파일을 생성할 수 있습니다.

cd $ORACLE_HOME/dbs
cp orapwPROD_DR orapwTEST

3. 정적 리스너 구성

다음 절차에 따라 테스트 데이터베이스의 정적 리스너(static listener)를 구성합니다:

cd $ORACLE_HOME/network/admin
cat listener.ora

ADR_BASE_LISTENER_LOCAL = /u01/app/oracle

LISTENER_LOCAL =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = TEST.ras.com)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
SID_LIST_LISTENER_LOCAL = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = DGNEER) (ORACLE_HOME = /u01/app/oracle/product/12.1.0.2/dbhome_1) (SID_NAME = TEST)))

다음 명령어로 리스너 상태를 확인하고 시작합니다:

lsnrctl status listener_local

출력 결과는 다음 예시와 유사합니다:

LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 09-JUN-2020 02:57:35

Copyright (c) 1991, 2014, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST= TEST.ras.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     listener_local
Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date                04-JAN-2020 04:53:15
Uptime                    156 days 21 hr. 4 min. 19 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/12.1.0.2/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/product/12.1.0.2/dbhome_1/admin/diag/tnslsnr/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST= TEST.ras.com)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "TEST" has 2 instance(s).
  Instance "TEST", status UNKNOWN, has 1 handler(s) for this service...
  Instance "TEST", status READY, has 1 handler(s) for this service...
The command completed successfully

4. Oracle Net 별칭(Alias) 생성

다음으로 스탠바이 데이터베이스에 접속할 수 있도록 Oracle Net 별칭을 생성합니다:

PROD_DR=
        (DESCRIPTION=
                (ADDRESS=(PROTOCOL=tcp)(HOST= standbydb.ras.com)(PORT=1523))
            (CONNECT_DATA=
                (SID=PROD_DR)
            )
        )

5. 대상 데이터베이스 시작

이제 다음 명령어로 대상 데이터베이스를 nomount 상태로 시작합니다:

sqlplus "/ as sysdba"

startup nomount

SQL> show parameter db_name
NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------
db_name                              string      TEST

SQL> show parameter uniq
NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------
db_unique_name                       string      TEST

6. RMAN으로 연결 테스트

대상 데이터베이스가 nomount 상태로 실행되면 RMAN을 사용해 연결을 테스트합니다:

[oracle@TEST.ras.com dbs]$ rman target sys@PROD_DR  auxiliary sys@TEST

Recovery Manager: Release 12.1.0.2.0 - Production on Thu Jun 09 03:25:22 2020

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

target database Password:
connected to target database: PROD_DR (DBID=4252464621)
auxiliary database Password:
connected to auxiliary database: TEST (not mounted)

7. 데이터베이스 복원 및 복제

다음 명령어로 스탠바이 데이터베이스를 대상 데이터베이스로 복원 및 복제합니다:

RMAN> target sys@PROD_DR  auxiliary sys@TEST
RMAN> duplicate target database to TEST from active database nofilenamecheck;

duplicate 명령이 완료되면 다음 명령어로 스탠바이 데이터베이스를 재시작하고 복구를 다시 활성화해야 합니다:

PROD_DR> shut immediate
PROD_DR> startup mount;
PROD_DR> alter database recover managed standby database disconnect from session;

8. 대상 데이터베이스 상태 확인

다음 명령어로 대상 데이터베이스의 상태를 확인합니다:

[oracle@TEST.ras.com dbs]$ sqlplus "/ as sysdba"

SQL*Plus: Release 12.1.0.2.0 Production on Tue Jun 9 05:15:53 2020

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options

SQL>  select name, open_mode, log_mode , database_role from v$database;

NAME      OPEN_MODE            LOG_MODE     DATABASE_ROLE
--------- -------------------- ------------ ----------------
TEST      READ WRITE           ARCHIVELOG   PRIMARY

결론

이번 글에서는 별도의 물리적 백업 없이 물리적 스탠바이 데이터베이스로부터 데이터베이스를 성공적으로 복제했습니다. 스탠바이 데이터베이스에 적용된 최신 아카이브 로그까지 반영하여 대상 데이터베이스를 복원할 수 있었습니다.

참고 자료

  • Performing RMAN duplicate from standby to create a new clone (Doc ID 1665784.1)

데이터베이스에 대해 더 자세히 알아보세요.

피드백 탭을 통해 의견을 남기거나 질문할 수 있습니다. 또한 Sales Chat을 클릭하여 지금 바로 상담을 시작할 수 있습니다.