아카이브 모드에서는 복구방법을 크게 두가지로 나눌 수 있는데 하나는 완전복구(Complete Recovery)이고 다른 하나는 불완전복구(Incomplete Recovery)이다.
복구원리는 노아카이브 모드에서와 동일하지만 복구에 사용될 아카이브 로그가 있다는 것이 차이점이다.


◆ 완전복구
  - 장애가 발생하기 직전 시점까지 모든 데이터를 다 복구해 내는 것.
  - 물리적 장애 발생시 사용


◆ 불완전복구
  - 장애가 발생했을 경우 현재 시점까지 전부 복구하는 것이 아니라 과거의 특정 시점까지만 복구하는 것.
  - 논리적 장애 발생시 사용
  - 나중에 배울 플래시백 기능은 불완전복구방법의 까다로움을 해결하기 위해 오라클에서 내놓은 기능임.


완전복구의 방법은 3가지가 있다.
특정 데이터파일에 장애가 났을 때 복구를 시도하려면 먼저 그 해당 데이터파일에 I/O가 발생하지 않게 해야 하는데, 오프라인을 시켜놓고 복구하는 방법, DB를 셧다운 시켜놓고 복구하는 방법이 있다. 그리고 또한 데이터파일을 백업받지 못했을 경우 복구하는 방법이 있다.


◆ 장애상황
1일에 풀백업을 받아놓고, 운영중 4일에 a.dbf가 삭제되는 장애가 발생함.
DB는 아카이브모드이며, 온라인 리두로그, 아카이브로그, 컨트롤파일, 다른 데이터파일은 장애 없음을 확인함.


◆ 복구방법에 대한 고찰
노아카이브 모드에서와는 달리 온라인 리두로그에서 덮어씌여진 101~105까지의 로그기록이 아카이브 리두로그 파일로 저장되어 순차적으로 그들을 적용시켜 복구 가능함.



◆ 오프라인이 되는 일반 테이블스페이스 장애 복구하기
DB는 오픈상태이며 DB의 종료 없이 일반 테이블스페이스를 복구하는 방법으로써, 해당 테이블스페이스를 오프라인 시킨 후 장애난 데이터파일 백업본만을 복원한 후 recover명령어로 복구 후 테이블스페이스를 온라인 시키면 복구는 끝난다.



◆ 오프라인 안되는 테이블스페이스 장애 복구하기
오프라인이 되지 않는 테이블스페이스는 System, Undo 테이블스페이스를 말하는 것으로써 이들이 장애가 나면 DB오픈상태에서는 복구하지 못하고, DB를 내린 후 백업본을 복원하여 recover명령어로 복구 후 DB를 오픈시켜야 한다.



◆ 백업본이 없는 경우 복구하기
백업본이 없는 경우는 데이터파일을 생성하여 리두로그에 있는 로그기록을 가지고 복구하면 된다. 한가지 주의사항은 이 방법이 모든 테이블스페이스에 다 적용되는 것이 아니다.
오라클을 처음 딱 설치하면 디폴트로 생성되는 다섯가지 테이블스페이스(System, Undotbs, Example, Users, Sysaux)는 해당 방법으로 복구가 안되므로 주의한다.

◇ 장애상황
위 그림에서처럼 풀백업을 받은 1일 시점에는 Haksa테이블스페이스가 존재하지 않은 상태이다. 2일에 Haksa테이블스페이스가 생성되고 이후 Haksa테이블스페이스가 포함된 백업을 받지 않은 상태에서 3일에 삭제가 되었다. 4일 드디어 Haksa테이블스페이스가 삭제됨을 인지하였다.

◇ 복구방법에 대한 고찰
백업본이 없는 경우에는 위에서 본 alter명령어로 새로운 빈 데이터파일을 만들어주고 haksa가 생성되었다는 로그기록을 통해 순차적으로 복구를 하면 된다.
위처럼 빈 데이터파일을 생성하면 그 파일은 초기 SCN이 0인데, 복구를 마치게 되면 복구를 마친 시점의 SCN으로 된다.
Posted by 겨울섬
,