강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

using backup controfile 복구 시나리오

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

using backup controfile 복구 시나리오

t.gif
t.gif
using backup controfile 복구 시나리오

흠.. 계획했던 에러시나리오와 좀 다르게 갔지만, 이왕 한 거 한번 올려본다.
여기서는 using backup controlfile을 사용하는 복구 시나리오이다.
위의 구문을 사용하면 DB는 항상 resetlogs옵션으로 open시켜야 한다.
아래의 예에서 에러를 발생시키위해 한 짓거리에는 그리 신경쓰지 말긴바란다.
그냥, 복구를 어떻게 했느냐에 신경쓰면 되겠다.

암튼, 에러를 유발시키기 위해 다음과 같이 했다.

[에러를 발생하게 만들자]
SQL> conn internal
암호 입력:
연결되었습니다.

컨트롤파일 백업해두자.
SQL> alter database backup controlfile to 'c:oracleackupdbcontrol01.ctl';

데이타베이스가 변경되었습니다.

심심한데 데이터나 하나 넣자.
SQL> conn kang/kang
연결되었습니다.
SQL> insert into test values('merong', '메롱');

1 개의 행이 만들어졌습니다.

SQL> COMMIT;

커밋이 완료되었습니다.

SQL> connect internal
암호 입력:
연결되었습니다.
SQL> shutdown
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.

자, current control file을 백업했던 놈으로 엎어 써버리자.
SQL> host copy c:oracleackupdbcontrol01.ctl c:oracleoradatadbcontrol01.ctl
        1개 파일이 복사되었습니다.

SQL> host copy c:oracleackupdbcontrol01.ctl c:oracleoradatadbcontrol02.ctl
        1개 파일이 복사되었습니다.

SQL> host copy c:oracleackupdbcontrol01.ctl c:oracleoradatadbcontrol03.ctl
        1개 파일이 복사되었습니다.

이제 startup을 하면 에러가 발생한다.
SQL> startup
ORACLE instance started.

Total System Global Area  189102108 bytes
Fixed Size                    75804 bytes
Variable Size              89006080 bytes
Database Buffers           99942400 bytes
Redo Buffers                  77824 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open


[복구하기]
위에서 보듯이, DB가 뭔가 이상하다며 오라클이 open을 거부했다.
resetlogs옵션으로 open하라고 하는데 그대로 하면 DB가 안 열린다.

SQL> shutdown abort
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area  189102108 bytes
Fixed Size                    75804 bytes
Variable Size              89006080 bytes
Database Buffers           99942400 bytes
Redo Buffers                  77824 bytes
Database mounted.

아래 구문 신경써서 보아두면 좋다. until cancel은 사실 안해줘도 되지만..
불완전복구(incomplete recovery)를 할 수도 있을까 싶은 생각이 들어서 해줬다.
SQL> recover database until cancel using backup controlfile;
ORA-00279: change 329875 generated at 05/06/2003 14:49:55 needed for thread 1
ORA-00289: suggestion : C:ORACLEORADATADBARCHIVEDBT001S00019.ARC
ORA-00280: change 329875 for thread 1 is in sequence #19


Specify log: {=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: 'C:ORACLEORADATADBSYSTEM01.DBF'


ORA-01112: media recovery not started

위에서 보면 그냥 cancel을 쳐서 복구를 중단시켰는데, 메시지에 보듯이 복구가 시작되지 않았다고 한다.
왜? 위에서 빨간색으로 마크한 부분의 아카이브로그는 존재하지 않기 때문이었다.
미리 보여주고 해야 되는데.... 아래의 예를 보듯이, 로그 아카이빙은 sequence #18까지만 진행되었음을 알 수 있다.


SQL> select sequence# from v$archived_log;

SEQUENCE#
----------
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
        11
        12
        13
        14
        15
        16
        17
        18

18 rows selected.


sequence #19는 아직 아카이빙이 되지 않았고, 이 놈은 online redo log file로 존재하고 있다.
아래에 보면, log group 3이 sequence# 19를 가짐을 알 수 있다.

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TIM
------------- ---------
         1          1         17    1048576          1 YES INACTIVE
       309670 30-APR-03

         2          1         18    1048576          1 YES INACTIVE
       309764 30-APR-03

         3          1         19    1048576          1 NO  CURRENT
       329873 06-MAY-03


group 3의 파일명을 파악한다.
SQL> select * from v$logfile;

    GROUP# STATUS
---------- -------
MEMBER
--------------------------------------------------------------------------------
         3
C:ORACLEORADATADBREDO03.LOG

         2 STALE
C:ORACLEORADATADBREDO02.LOG

         1
C:ORACLEORADATADBREDO01.LOG


SQL> recover database until cancel using backup controlfile;
ORA-00279: change 329875 generated at 05/06/2003 14:49:55 needed for thread 1
ORA-00289: suggestion : C:ORACLEORADATADBARCHIVEDBT001S00019.ARC
ORA-00280: change 329875 for thread 1 is in sequence #19


Specify log: {=suggested | filename | AUTO | CANCEL}
C:ORACLEORADATADBREDO03.LOG online redo log file을 지정해 준다.
Log applied.
Media recovery complete.
SQL> alter database open resetlogs;

Database altered.

SQL>


설명이 좀 부족한 감이 있지만..
나머지 자세한 내용은 스스로!

This article comes from dbakorea.pe.kr (Leave this line as is)

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,035 명
  • 현재 강좌수 :  35,798 개
  • 현재 접속자 :  130 명