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

아래 순서대로 “Data Guard 기반의 백업 오프로딩(Backup Offloading)” 환경구성 및 모의훈련을 실시할 예정입니다.
- Basic: Oracle DataGuard 아키텍처와 프로세스의 이해
- Part1: Catalog DB → Primary DB → Standby DB 운영환경 구성
- Part2: Catalog DB 및 Standby DB를 활용한 백업환경 구성
- Part3: Primay/Standby/Catalog 서버 중지 및 재기동 절차
- Part4: Primary DB → Standby DB로의 데이터 전송 테스트
- Part5: Primary DB의 복구 모의훈련
- Part6: Standby DB로 Switchover/Switchback/Failover 모의훈련
모의훈련을 위해 Standby DB를 Primary DB로 전환하는 과정은 크게 Switchover(정상 전환)와 Failover(장애 전환) 두 가지로 나뉩니다.
- Switchover/Switchback(정상적인 역할 전환): 두 DB가 모두 살아있는 상태에서 역할을 맞바꾸는 과정입니다. 데이터 유실이 전혀 없습니다.
- Failover(장애 발생 시 강제 전환): Primary 서버가 완전히 죽어서 통신이 불가능할 때, Standby를 단독으로 운영 서버로 승격시키는 과정입니다.
- Switchover 시나리오
- 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
- 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'; - 새로운 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'; - 애플리케이션 접속 및 백업정책 등 점검
- 사용자와 WAS가 새로운 Primary IP(@standby-db)로 정상 접속되는지 확인합니다.
- RMAN 백업 스크립트를 새로운 Standby DB(@primary-db)에 등록합니다.
- 전환 직후 수 분 동안 alert.log를 실시간(tail -f)으로 관찰하여 전송 에러나 권한 에러가 발생하는지 모니터링합니다.
- Primary DB 준비(@primary-db에서 실행): Primary DB를 Standby DB로 역할 전환
- Switchback 시나리오
- 최초 Primary DB(@primary-db)를 다시 Primary DB로 역할 승격
-- @standby-db가 Primary DB 역할 시 전송한 데이터 확인 select max(seq_id) from dguser.tb_sysdate;
- 최초 Primary DB(@primary-db)를 다시 Primary DB로 역할 승격
- Failover 시나리오
- 아카이브 갭 확인 및 적용 (Standby에서 실행): 최대한 데이터를 살리기 위해 마지막까지 넘어온 로그들을 적용합니다.
-- 마지막 리두 데이터 적용 완료 확인 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
- 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;
- 아카이브 갭 확인 및 적용 (Standby에서 실행): 최대한 데이터를 살리기 위해 마지막까지 넘어온 로그들을 적용합니다.
