[Oracle 11gR2] Data Guard 기반의 백업 오프로딩(Backup Offloading) 구조 구현하기 – Part3

아래 순서대로 “Data Guard 기반의 백업 오프로딩(Backup Offloading)” 환경구성 및 모의훈련을 실시할 예정입니다.
- Part1: Catalog DB → Primary DB → Standby DB 운영환경 구성
- Part2: Catalog DB 및 Standby DB를 활용한 백업환경 구성
- Part3: 서버 중지 및 재기동 절차
- Part4: Primary DB → Standby DB로의 데이터 전송 테스트
- Part5: Primary DB의 복구 모의훈련
- Part6: Standby DB로 Failover 모의훈련
- Part7: Primary DB로 Switchback 모의훈련
- Part8: 모니터링 및 트러블슈팅 가이드
Part2에서는 Catalog DB 및 Standby DB를 활용한 백업환경 구성하고 실제 백업까지하는 절차를 알아보았습니다. DB 서버 3대(Primary, Standby, Catalog)를 운영하는 환경에서 중지 및 재기동 순서가 중요한 이유는 각 서버 간의 ‘의존성(Dependency)’ 때문입니다. 순서가 뒤섞이면 아카이브 전송 오류나 카탈로그 동기화 실패로 인해 운영에 차질이 생길 수 있기 때문에 Part3에서는 서버 중지 및 재기동 절차에 대해 알아보겠습니다.
- 중지 순서: Primary → Standby → Catalog
- Primary 우선 중지: 데이터 변경이 일어나는 원천(Source)을 먼저 닫아야 Standby로 보내줄 데이터가 더 이상 발생하지 않습니다.
-- 현재 발생한 마지막 아카이브 번호 확인 SQL> SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE DEST_ID=1; -- Standby로 전송 완료된 마지막 번호 확인 (전송 오류 유무 체크) SQL> SELECT DEST_ID, STATUS, ERROR FROM V$ARCHIVE_DEST WHERE DEST_ID=2; -- 기존 세션을 강제 종료하고 트랙잭션을 즉시 롤백시킵니다. SQL> shutdown immediate;
- Standby 중지: Primary가 완전히 닫힐 때까지 발생하는 마지막 리두(Redo) 데이터를 모두 받아낸 후 종료해야 **데이터 유실(Gap)**이 생기지 않습니다.
-- Standby가 실제로 적용(Apply)한 마지막 번호 확인 -- 위 Primary의 번호와 일치해야 데이터 유실이 없습니다. SQL> SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE APPLIED='YES'; -- 리피드(MRP) 프로세스가 정상 작동 중인지 확인 SQL> SELECT PROCESS, STATUS, SEQUENCE# FROM V$MANAGED_STANDBY; -- 기존 세션을 강제 종료하고 트랙잭션을 즉시 롤백시킵니다. SQL> shutdown immediate;
- Catalog 최후 중지: 모든 백업 정보와 동기화 정보를 기록하는 카탈로그는 다른 DB들이 모두 종료된 후 닫는 것이 정석입니다.
-- 기존 세션을 강제 종료하고 트랙잭션을 즉시 롤백시킵니다. SQL> shutdown immediate;
- Primary 우선 중지: 데이터 변경이 일어나는 원천(Source)을 먼저 닫아야 Standby로 보내줄 데이터가 더 이상 발생하지 않습니다.
- 재기동 순서: Catalog → Standby → Primary
- Catalog 우선 기동: 백업 스크립트가 돌아가거나 DB 상태를 기록해야 할 때, 저장소 역할을 하는 카탈로그가 먼저 떠 있어야 에러가 나지 않습니다.
-- 리스너 시작 및 상태 점검 oracle@catalog-db ~]# lsnrctl start oracle@catalog-db ~]# lsnrctl status -- 데이터베이스를 OPEN 상태로 기동 SQL> startup; -- DB 인스턴스를 리스너에 등록 SQL> ALTER SYSTEM REGISTER -- 오픈 상태 및 모드 확인 (Primary: READ WRITE, Standby: MOUNTED 또는 READ ONLY) SQL> SELECT NAME, OPEN_MODE, DATABASE_ROLE FROM V$DATABASE; -- 인스턴스 가동 시간 및 상태 확인 SQL> SELECT INSTANCE_NAME, STATUS, TO_CHAR(STARTUP_TIME, 'YYYY-MM-DD HH24:MI') AS START_TIME FROM V$INSTANCE; -- MRP 프로세스 시작 및 상태 확인 SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; SQL> SELECT PROCESS, STATUS, SEQUENCE# FROM V$MANAGED_STANDBY WHERE PROCESS LIKE 'MRP%'; -- 리스너 상태 및 DB연결 점검 oracle@catalog-db ~]# lsnrctl status oracle@catalog-db ~]# tnsping cat_db
- Standby 중간 기동: Primary가 켜지자마자 리두 데이터를 보낼 준비를 하는데, 이때 Standby가 죽어 있으면 Primary 로그에 전송 오류(ORA-12154 등)가 계속 찍히게 됩니다.
-- 리스너 시작 및 상태 점검 oracle@catalog-db ~]# lsnrctl start oracle@catalog-db ~]# lsnrctl status -- 데이터베이스를 MOUNT 상태로 기동합니다. SQL> startup mount; -- 오픈 상태 및 모드 확인 (Primary: READ WRITE, Standby: MOUNTED 또는 READ ONLY) SQL> SELECT NAME, OPEN_MODE, DATABASE_ROLE FROM V$DATABASE; -- 인스턴스 가동 시간 및 상태 확인 SQL> SELECT INSTANCE_NAME, STATUS, TO_CHAR(STARTUP_TIME, 'YYYY-MM-DD HH24:MI') AS START_TIME FROM V$INSTANCE; -- 상태가 'APPLYING LOG'인지 확인 SELECT PROCESS, STATUS, THREAD#, SEQUENCE# FROM V$MANAGED_STANDBY WHERE PROCESS LIKE 'MRP%'; -- 리스너 상태 및 DB연결 점검 oracle@catalog-db ~]# lsnrctl status oracle@catalog-db ~]# tnsping cat_db oracle@catalog-db ~]# tnsping stb_db -- Catalog DB와의 접속이 원활한지 확인 oracle@standby-db ~]# rman target sys/orclsys@stb_db catalog rman_admin/orclsys@CAT_DB
- Primary 최후 기동: 수신처(Standby)와 기록소(Catalog)가 모두 준비된 상태에서 서비스를 시작하는 것이 가장 안전합니다.
-- 리스너 시작 및 상태 점검 oracle@catalog-db ~]# lsnrctl start oracle@catalog-db ~]# lsnrctl status -- 데이터베이스를 OPEN 상태로 기동합니다. SQL> startup; -- 오픈 상태 및 모드 확인 (Primary: READ WRITE, Standby: MOUNTED 또는 READ ONLY) SQL> SELECT NAME, OPEN_MODE, DATABASE_ROLE FROM V$DATABASE; -- 인스턴스 가동 시간 및 상태 확인 SQL> SELECT INSTANCE_NAME, STATUS, TO_CHAR(STARTUP_TIME, 'YYYY-MM-DD HH24:MI') AS START_TIME FROM V$INSTANCE; -- 리스너 상태 및 DB연결 점검 oracle@catalog-db ~]# lsnrctl status oracle@catalog-db ~]# tnsping cat_db oracle@catalog-db ~]# tnsping stb_db oracle@catalog-db ~]# tnsping pri_db
- 최종 점검 수행: Standby DB에서 Catalog DB를 연결한 후 최종 점검을 수행합니다.
oracle@standby-db ~]# rman target sys/orclsys@STB_DB catalog rman_admin/orclsys@CAT_DB -- 최신 상태 동기화 RMAN> RESYNC CATALOG; -- 구조 확인 RMAN> REPORT SCHEMA; -- 세대 확인 RMAN> LIST INCARNATION; -- 백업 정보와 실제 물리적인 백업 파일이 일치하는지 확인 RMAN> CROSSCHECK BACKUP; RMAN> CROSSCHECK ARCHIVELOG ALL; RMAN> CROSSCHECK BACKUP OF CONTROLFILE; RMAN> CROSSCHECK BACKUP OF SPFILE; -- 백업 현황 요약 RMAN> LIST BACKUP SUMMARY; -- 폐기 대상 식별 RMAN> REPORT OBSOLETE;
- Catalog 우선 기동: 백업 스크립트가 돌아가거나 DB 상태를 기록해야 할 때, 저장소 역할을 하는 카탈로그가 먼저 떠 있어야 에러가 나지 않습니다.
