[Oracle] Data File 장애 복구하기 - No Archive Mode(실습)

HYEOB KIM·2023년 1월 1일
0

Oracle

목록 보기
28/58

Data File 장애 복구 - No Archive Mode

No Archive Mode에서 Data File이 삭제되는 논리적 장애가 발생했을 때 복구하는 방법은 무엇인지 알아보겠습니다. 결론적으로 말씀드리면 Online Redo Log File에 해당 SCN 정보가 없을 경우 완벽하게 복구하는 방법은 없습니다. 아래를 살펴보겠습니다.

현재 DB를 No Archive Mode로 변경합니다.

SQL> shutdown immediate;

SQL> startup mount;

SQL> archive log list;

SQL> alter database noarchivelog;

SQL> archive log list;

SQL> alter database open;

신규 테이블 스페이스 test를 생성하고 백업을 받습니다.

SQL> create tablespace test
  2  datafile '/ORA19/app/oracle/oradata/ORACLE19/test01.dbf' size 5M;
  
SQL> select tablespace_name, bytes/1024/1024 MB, file_name
  2  from dba_data_files;
  
SQL> shutdown immediate;

SQL> !mkdir -p /data/backup/close

SQL> !cp -av /ORA19/app/oracle/oradata/ORACLE19/test01.dbf /data/backup/close/

SQL> startup;

장애를 발생시킵니다.

SQL> !rm -rf /ORA19/app/oracle/oradata/ORACLE19/test01.dbf

SQL> shutdown abort;

SQL> startup;

백업해둔 Data File을 기존 경로에 다시 복사해서 recover합니다.

SQL> !cp /data/backup/close/test01.dbf /ORA19/app/oracle/oradata/ORACLE19/test01.dbf

SQL> recover database;

SQL> alter database open;

이 과정에서 recover가 되는 이유는 online redo log file에 해당 내용이 남아있기 때문입니다. 그렇다면 log switch가 여러 번 발생해 해당 내용이 덮어씌워져 있는 상태라면 어떻게 될까요...?

SQL> !rm -rf /ORA19/app/oracle/oradata/ORACLE19/test01.dbf

SQL> alter system swtich logfile;

SQL> /

SQL> /

여기까지 실행하면 DB가 강제로 abort되면서 꺼집니다. 마찬가지로 Data File을 원래 경로에 복사한 후 다시 되살리려고 하면 아래와 같은 에러가 발생합니다.

SQL> !cp /data/backup/close/test01.dbf /ORA19/app/oracle/oradata/ORACLE19/test01.dbf

SQL> startup;

SQL> !cp /data/backup/close/test01.dbf /ORA19/app/oracle/oradata/ORACLE19/test01.dbf

SQL> recover database;
ORA-00279: change 580595 generated at 01/01/2023 16:55:01 needed for thread 1
ORA-00289: suggestion :
/ORA19/app/oracle/fast_recovery_area/ORACLE19/archivelog/2023_01_01/o1_mf_1_7_%u
_.arc
ORA-00280: change 580595 for thread 1 is in sequence #7


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: cannot open archived log
'/ORA19/app/oracle/fast_recovery_area/ORACLE19/archivelog/2023_01_01/o1_mf_1_7_%
u_.arc'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7

SQL> select status from v$instance;

STATUS
------------
MOUNTED

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6: '/ORA19/app/oracle/oradata/ORACLE19/test01.dbf'

이렇게 된 이유는 DB가 Open되기 위해선 모든 Data File, Control File, Redo Log File의 Checkpoint SCN 정보가 같아야 하는데, test01.dbf 파일의 SCN이 다르기 때문입니다. 하지만 현재 No Archive Mode이므로 부족한 SCN 만큼 SCN을 따라잡을 정보가 없는 상태입니다.

이럴 경우 완벽히 복구하진 못하고, 2가지 방법이 있습니다.

첫 번째 방법은 모든 파일을 이전의 SCN으로 되돌리는 방법입니다. 예를 들어 SCN 100 -> 108로 하려 했는데 실패했다면 모든 파일의 SCN을 108 -> 100으로 되돌리는 것입니다. 문제는 8개의 SCN 정보는 모두 소실된다는 것입니다.

두 번째 방법test01.dbf 파일만 포기하는 방법이 있습니다. test01.dbf 안의 데이터는 모두 소실되겠지만 나머지 데이터들은 살릴 수 있습니다.

SQL> alter database datafile '/ORA19/app/oracle/oradata/ORACLE19/test01.dbf' offline drop;

SQL> alter database open;

SQL> select status from v$instance;

참고

  • <실전 오라클 백업과 복구> - 서진수
profile
Devops Engineer

0개의 댓글