이 글에서는 물리적 스탠바이 데이터베이스(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을 클릭하여 지금 바로 상담을 시작할 수 있습니다.