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

Data Guard 기반의 백업 오프로딩(Backup Offloading) 구조
아래 순서대로 “Data Guard 기반의 백업 오프로딩(Backup Offloading)” 환경구성 및 모의훈련을 실시할 예정입니다.


Part2에서는 Catalog DB 및 Standby DB를 활용한 백업환경 구성하고 실제 백업까지하는 절차를 알아보았습니다. DB 서버 3대(Primary, Standby, Catalog)를 운영하는 환경에서 중지 및 재기동 순서가 중요한 이유는 각 서버 간의 ‘의존성(Dependency)’ 때문입니다. 순서가 뒤섞이면 아카이브 전송 오류나 카탈로그 동기화 실패로 인해 운영에 차질이 생길 수 있기 때문에 Part3에서는 서버 중지 및 재기동 절차에 대해 알아보겠습니다.


  1. 중지 순서: Primary → Standby → Catalog
    1. 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;
      
    2. 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;
      
    3. Catalog 최후 중지: 모든 백업 정보와 동기화 정보를 기록하는 카탈로그는 다른 DB들이 모두 종료된 후 닫는 것이 정석입니다.
      -- 기존 세션을 강제 종료하고 트랙잭션을 즉시 롤백시킵니다.
      SQL> shutdown immediate;
      
  2. 재기동 순서: Catalog → Standby → Primary
    1. 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
      
    2. 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
      
    3. 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
      
    4. 최종 점검 수행: 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;
      

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다