Oracle 온라인 백업중 HA Failover가 실패하는 이유 와 그에 대한 조치 방법에 대해서 기술합니다[DB 복구]
1. 발생 상황
- 시스템 Active Oracle DB 서버 Down
시스템은 Active-Standby 구조이기 때문에, 장애가 발생해도 5분내 자동 복구됩니다
그러나, 5분, 10분, 20분이 지나도 장애가 복구되지 않습니다.
Failover가 실패한 것 같습니다. 장애 시간이 계속 길어지고 있습니다.
뭐가 문제일까요? 1개월 전 Failover 모의훈련 때는 잘 됬는데 ....
장애에 대비해 HA(서버 이중화)를 구성했지만, 종종 Failover 실패가 발생합니다.
Failover 실패의 가장 큰 원인은 두 서버(Active-Standby) 구성이 일치하지 않기 때문입니다.
처음 구축할 때는 일치했지만, 운영 중 구성 변경으로 불일치가 발생하면 Failover가 실패합니다.
하지만, 위의 경우는 두 서버 구성이 완벽히 일치했는데 발생했습니다.
특이점은 Oracle DB가 설치되어 있고, 장애 시점에 Oracle DB 온라인 백업이 실행 중이었습니다.
"Oracle 온라인 백업"과 "Failover 실패"의 연관관계를 설명하고, 해결 방법을 가이드 합니다
* 평상시 Failover 상황
Active DB 와 Standby DB 는 HA로 구성되어 있고, Failover 성공
-> Datafile 헤더 Fuzzy bit = Disable
* 백업시 Failover 상황
Active DB(온라인 백업중) 와 Standby DB 는 HA로 구성되어 있고, Failover 실패
-> Datafile 헤더 Fuzzy bit = Enable
-> Fuzzy bit가 Enable 되어 있으면, DB startup 중 ORA-10873 에러 발생함
-> Disable 로 변경 후 DB startup 해야함
(ORA-10873 : file 1 needs to be either taken out of backup mode or media
2. Oracle DB 온라인 백업
- Oracle은 데이터베이스 가동 중에 백업을 할 수 있습니다. 이를 온라인 백업이라 합니다.
온라인 백업의 핵심기술은 백업 중 실행되는 Transaction을 보장하는 것입니다.
Oracle은 이를 위해 Datafile 헤더에 Hot Backup-in-Progress Fuzzy Bit 이라는 것을 Setting 합니다.
평소에는 Fuzzy bit이 Disable이지만 온라인 백업 중에는 Fuzzy Bit이 Enable로 변경됩니다.
- "alter database/tablespace ... begin backup;" 명령이 Fuzzy Bit를 Enable로 변경한 것 입니다.
Fuzzy bit이 Enable이면 Checkpoint 이후에도 Datafile 변경이 있을 수 있다는 뜻으로, 백업이 끝나면
"alter database/tablespace ... end backup;" 명령으로 Fuzzy bit을 Disable 해야 합니다.
3. 온라인 백업 중 Failover 가 실패하는 이유
DB를 기동할때 Datafile Fuzzy Bit이 Enable 상태라면, Oracle은 다음 두 경우로 판단하고
ORA-10873 Error를 발생시킵니다. 관리자가 아래 둘 중 하나를 선택하여 조치하라는 것 입니다.
1. Online Backup 본을 이용하여 Restore 하고 DB를 기동하는 경우
2. Online Backup 중에 DB가 갑자기 Down된 후에 다시 기동하는 경우
두 경우 모두 DB를 즉시 기동할 수 없습니다.
첫째 경우는, 일반적인 DB 복구과정(recover database)을 수행하여 DB를 기동해야 합니다.
둘째 경우는, 복구 과정이 불필요하므로 "alter database end backup;"으로 Fuzzy Bit을
Disable 한 후 DB를 기동해야 합니다.
위 장애사례를 살펴보면,
장애시점에 온라인 백업이 진행되고 있었습니다. 즉, Fuzzy bit 이 Enable 상태입니다.
그 상태에서 장애가 발생했고 Standby 서버로 Failover 가 진행되었습니다.
Standby Oracle DB에서 "startup;"이 실행됬지만 Fuzzy bit Enable 상태이므로
ORA-10873 에러가 발생되어 DB 가동이 중단됐고 Failover가 실패로 이어진 것 입니다.
==== 장애DB alert.log 내용 ====
ORACLE instance started.
Database mounted.
ORA-10873 : file 1 needs to be either taken out of backup mode or media recovered
ORA-01110 : data file 1 : '/home/oracle/app/oracle/oradata/OPDB/system01.dbf
4. 조치(복구)
DB 가동 Script에 "alter database end backup;" 명령만 추가하면 됩니다.
- 개선 전(예)
export ORACLE_SID=ORA1
export ORACLE_HOME=/data1/oracle
lsnrctl start
sqlplus "/as sysdba" <<EOF
startup;
EOF
- 개선 후(예)
export ORACLE_SID=ORA1
export ORACLE_HOME=/data1/oracle
lsnrctl start
sqlplus "/as sysdba" <<EOF
startup mount;
alter database end backup;
alter database open;
EOF
위 같이 Script를 수정하면 온라인 백업 중 장애가 발생해도 문제없이 Failover 가 가능합니다.
단, 만약 RMAN을 사용 중이라면 기존 Script를 그대로 사용해도 무방합니다 |