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

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


모의훈련을 위해 Standby DB를 Primary DB로 전환하는 과정은 크게 Switchover(정상 전환)와 Failover(장애 전환) 두 가지로 나뉩니다.

  • Switchover/Switchback(정상적인 역할 전환): 두 DB가 모두 살아있는 상태에서 역할을 맞바꾸는 과정입니다. 데이터 유실이 전혀 없습니다.
  • Failover(장애 발생 시 강제 전환): Primary 서버가 완전히 죽어서 통신이 불가능할 때, Standby를 단독으로 운영 서버로 승격시키는 과정입니다.

  1. Switchover 시나리오
    1. Primary DB 준비(@primary-db에서 실행): Primary DB를 Standby DB로 역할 전환
      -- 현재 Primary가 Switchover가 가능한 상태인지 확인
      ---- TO PRIMARY 또는 SESSIONS ACTIVE가 나와야 함
      SELECT SWITCHOVER_STATUS FROM V$DATABASE;
      SWITCHOVER_STATUS
      --------------------
      SESSIONS ACTIVE
      
      -- Standby DB가 새로운 Primary DB로 전환되기 전의 데이터 확인
      select max(seq_id) from dguser.tb_sysdate;
      
      -- 최신 데이터를 아카이브화하여 Standby DB로 전송
      ALTER SYSTEM ARCHIVE LOG CURRENT;
      
      -- Archive Log Status 확인
      SELECT DEST_ID, TYPE, DATABASE_MODE, RECOVERY_MODE, ARCHIVED_SEQ#, APPLIED_SEQ#, GAP_STATUS
      FROM   V$ARCHIVE_DEST_STATUS
      WHERE  STATUS != 'INACTIVE';
      
      -- Standby로 전환 명령 실행
      ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
      
      -- DB 재기동 (이제 이 서버는 Standby 역할을 하게 됨)
      ---- SQL프롬프트를 다시 실행한 후 DB를 MOUNT 상태로 재기동합니다.
      STARTUP MOUNT;
      SELECT SWITCHOVER_STATUS FROM V$DATABASE;
      SWITCHOVER_STATUS
      --------------------
      RECOVERY NEEDED
      
    2. Standby DB 전환 (@standby-db에서 실행): Primary가 내려간 것을 확인한 후, 기존 Standby를 새로운 Primary로 승격
      -- NOT ALLOWED에서 TO PRIMARY 또는 SESSIONS ACTIVE 될 때까지 대기
      SELECT SWITCHOVER_STATUS FROM V$DATABASE;
      
      -- 새로운 Primary로 전환
      ---- MRP를 자동으로 중단하므로 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 명령을 실행할 필요가 없습니다.
      ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
      
      -- DB 오픈
      ALTER DATABASE OPEN;
      
      -- Archive Log Status 확인
      SELECT DEST_ID, TYPE, DATABASE_MODE, RECOVERY_MODE, ARCHIVED_SEQ#, APPLIED_SEQ#, GAP_STATUS
      FROM   V$ARCHIVE_DEST_STATUS
      WHERE  STATUS != 'INACTIVE';
      
      -- 데이터를 전송 테스트(새로운 Primary DB -> 새로운 Standby DB)
      ---- 새로운 Standby DB의 MRP 프로세스를 실행한 후 프로시저 실행
      exec dguser.proc_test_insert('NORMAL', 1000, 0.1);
      
      -- Archive Log Status 확인
      SELECT DEST_ID, TYPE, DATABASE_MODE, RECOVERY_MODE, ARCHIVED_SEQ#, APPLIED_SEQ#, GAP_STATUS
      FROM   V$ARCHIVE_DEST_STATUS
      WHERE  STATUS != 'INACTIVE';
      
    3. 새로운 Standby DB의 MRP 프로세스 실행(@primary-db에서 실행): 기존 Standby를 새로운 Primary로 승격한 후 실행
      -- 새로운 Primary로부터 넘어오는 리두 데이터를 실시간으로 받아적는(Apply) 과정인 MRP 프로세스를 반드시 시작
      ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
      
      -- MPR 프로세스 상태 확인
      ---- STATUS가 'APPLYING_LOG'인지 확인합니다.
      SELECT PROCESS, STATUS, SEQUENCE# FROM V$MANAGED_STANDBY WHERE PROCESS LIKE 'MRP%';
      
      -- Archive Log Status 확인
      ---- 새로운 Primary DB에서 exec dguser.proc_test_insert('NORMAL', 1000, 0.1); 실행한 이후 확인
      SELECT DEST_ID, TYPE, DATABASE_MODE, RECOVERY_MODE, ARCHIVED_SEQ#, APPLIED_SEQ#, GAP_STATUS
      FROM   V$ARCHIVE_DEST_STATUS
      WHERE  STATUS != 'INACTIVE';
      
    4. 애플리케이션 접속 및 백업정책 등 점검
      • 사용자와 WAS가 새로운 Primary IP(@standby-db)로 정상 접속되는지 확인합니다.
      • RMAN 백업 스크립트를 새로운 Standby DB(@primary-db)에 등록합니다.
      • 전환 직후 수 분 동안 alert.log를 실시간(tail -f)으로 관찰하여 전송 에러나 권한 에러가 발생하는지 모니터링합니다.
  2. Switchback 시나리오
    1. 최초 Primary DB(@primary-db)를 다시 Primary DB로 역할 승격
      -- @standby-db가 Primary DB 역할 시 전송한 데이터 확인 
      select max(seq_id) from dguser.tb_sysdate;
      
  3. Failover 시나리오
    1. 아카이브 갭 확인 및 적용 (Standby에서 실행): 최대한 데이터를 살리기 위해 마지막까지 넘어온 로그들을 적용합니다.
      -- 마지막 리두 데이터 적용 완료 확인
      ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
      
    2. Primary로 승격 (Standby에서 실행)
      -- Standby 역할을 종료하고 Primary로 전환
      ALTER DATABASE ACTIVATE PHYSICAL STANDBY;
      
      -- DB 오픈
      ALTER DATABASE OPEN;
      
      -- 죽은 서버(@primary-db)로 로그를 보내지 않도록 즉시 차단
      ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER SCOPE=BOTH;
      

답글 남기기

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