백업과 복구/불완전복구

20. cancel base 불완전 복구

오운학 2024. 4. 14. 19:40

복구의 종류 2가지

  1. 완전복구  --- 장애가 나기 직전에 최종적으로 commit 시점으로 복구하는
  2. 불완전 복구  ---과거의 특정 시점으로 복구

 

 

current redo log file 깨져서 db shutdown되었다면 복구하는 방법이 과거에 백업받은 모든 data file들을 복원하고 아카이브 로그 파일을 적용해서 복구를 하는데 current redo log file 까지 적용해야 완전 복구가 되는데 current redo log file 없으므로 cancel base 불완전 복구를 해야한다

 

current redo log file 적용안하고 cancel하겠다는 의미

 

 

실습

#1. cold backup 수행

#2. 로그 스위치를 3 일으키고 체크포인트를 일으킨다

#3. 깨트릴 current redo log file 확인

#4. current redo log group 멤버를 확인

#5. shutdown abort

#6. os에서 current redo log group 멤버를 모두 삭제

#7. startup  <------mount단계에서 멈추는것을 확인

#8. 문제가 되는 redo log file 현재 상태가 무엇인지 확인

#9.shutdown abort

#10. 모든 data file들을 복원(기존 원본 data file들은 rm으로 지우고 복원, 안지우고 복원하면 안되는 파일들이 있음)

#11. startup mount

#12. set autorecovery off  <------- 복구할 적용해야할 로그 파일을 하나씩 물어보게 설정

#13 . recover database until cancle;

엔터를 치다가 current redo log file 적용하려할때 cancel 입력

#14. resetlogs 옵션을 써서 open 시킨다

 

 

 

구현 ----> Ouh 계정에서 진행

#1. cold backup 수행

@datafile
@controlfile
@logfile

--모든 파일이 같은곳에 위치해야한다

<sys>
shutdown immediate

<os>
cd
mkdir coldbackup5
cd coldbackup5
cp /u01/app/oracle/oradata/Ouh/* .

<sys>
startup

 

 

#2. 로그 스위치를 3 일으키고 체크포인트를 일으킨다

@logsw
@logsw
@logsw
alter system checkpoint

 

 

#3. 깨트릴 current redo log file 확인

@log_status

 

#4. current redo log group 멤버를 확인

@logfile

 

 

#5. DB를 내린다

shutdown abort

 

#6. os에서 current redo log group 멤버를 모두 삭제

 

 

#7. startup  <------mount단계에서 멈추는것을 확인

 

 

#8. 문제가 되는 redo log file 현재 상태가 무엇인지 확인

ORA-00312: online log 1 thread 1:

 

#9. DB를 내린다

shutdown abort

 

#10. 모든 data file들을 복원(기존 원본 data file들은 rm으로 지우고 복원, 안지우고 복원하면 안되는 파일들이 있음)

oradata
ls
rm *.dbf
cp /home/oracle/coldbackup5/*.dbf .

 

 

 

#11. startup mount

 

#12. set autorecovery off  <------- 복구할 적용해야할 로그 파일을 하나씩 물어보게 설정

set autorecovery on   <--------복구할 아카이브 로그파일을 적용하는거 안물어보고 자동으로 적용되도록하는 명령어

set autorecovery off

 

#13 . recover database until cancel;

엔터를 치다가 current redo log file 적용하려할때 cancel 입력

 

<시퀀스번호 확인하고 진행 >

---> 시퀀스번호 7

 

 

 

#14. resetlogs 옵션을 써서 open 시킨다

alter database open resetlogs;

불완전 복구가 끝나면 반드시 coldbackup 해야한다

 


 

문제1. 불완전 복구가 했으면 로그 스위치 3번일으키고 체크포인트를 일으킨 후에 coldbackup 하세요

 

<sys>
shutdown immediate

<os>
cd
mkdir coldbackup5
cd coldbackup5
cp /u01/app/oracle/oradata/Ouh/* .

<sys>
startup

 

#2. 로그 스위치를 n 일으키고 체크포인트를 일으킨다(UNUSED 없도록)

@logsw
@logsw
@logsw
alter system checkpoint

※ 반드시 셧다운immediate하고나서 진행해야한다

 

 

문제2. inactive 상태의 redo log file 손상되었을 복구를 진행하세요

#1. 현재 리두로그 그룹의 상태를 확인

#2. shutdown abort

#3. os에서 inactive 상태의 redo log group 멤버를 모두 삭제

#4. startup <--------mount에서 안올라온다

#5. 리두로그 그룹의 상태를 확인

#6. 문제가 되고 있는 리두 로그 그룹을 drop

#7. db올린다

 

------

#1. 현재 리두로그 그룹의 상태를 확인

@log_status

#2. shutdown abort

#3. os에서 inactive 상태의 redo log group 멤버를 모두 삭제

 

#4. startup <--------mount에서 안올라온다

 

#5. startup mount

 

#6. 문제가 되고 있는 리두 로그 그룹을 drop

 

--방법1

alter database drop logfile group 3;

--방법2 (이게 좋은방법)

alter database clear unarchived logfile group 3;

 

#7. db올린다

alter database open;

 

 

#8. 새로운 리두로그 그룹을 추가

alter database add logfile group 3 '/u01/app/oracle/oradata/Ouh/redo03.log' size 10m;

alter database add logfile member '/u01/app/oracle/oradata/Ouh/redo03b.log' to group 3;