Oracle/Backup & Recovery2009. 12. 18. 15:44

● User Managed Recovery
  
-------------------------------------------------------
                            noarchivelog   archivelog
-------------------------------------------------------
complete     closed(mount)       X             O       ex) system ts, undo ts, control file
recovery     open                X             O       ex) 일반 TS 손상, inactive group 삭제

incomplete   closed(mount)       X             O       ex) current Redo log group 삭제
recovery                                                   table 삭제 : flashback 사용불가
             open                X(예외)        X         datafile 손상 + archive log file손상
-------------------------------------------------------

※ 신뢰할 만한 백업과 백업 이후의 redo log file이 있으면 복구가 가능



  ◎ complete recovery
     : 훼손된 또는 사라진 파일만 backup에서 restore

SQL> recover database
SQL> recover tablespace 이름|번호
SQL> recover datafile 이름|번호

    ○ temporary tablespace 손상
      : redo가 남지 않으므로, 다시 생성

SQL> select * 
     from t1
     where 1,2,3,4,5,6,7,8,9,10,11;

     temporary tablespace를 삭제
       -> PGA만으로는 정렬공간이 모자라므로 temptablespace를 쓰도록 함.
          -> 문제발생??
             -> startup force;


cf)

SQL> create temporary tablespce ts1
     tempfile '.....';           -- 이 테이블스페이스가 temp로 쓰인다는 것을 표현, 리두가 안남음.


    ○ redo log file 손상
      1. member 하나 손상
        : redo log는 대체로 2벌로 한다.
          하나의 그룹의 하나의 멤버가 손상되었을 경우 그 redo logfile이 어떤 파일인지 빨리 발견하고
          (alertSID.log) 대처할 것. 


      2. group 없어졌을 경우
        : 상태를 inactive로 변경하고 삭제(alter database drop -> OS명령으로 삭제)

cf)

SQL> alter database drop logfile group 3;

위의 명령이 실행 안되는 상황
- current, active 그룹일 경우
- archiving이 끝나지 않았을 경우
- group이 2개인 경우

SQL> alter database drop logfile member '....'

위의 명령이 실행 안되는 상황
- current, active 그룹일 경우
- archiving이 끝나지 않았을 경우
- member가 1개인 경우 -> 그룹 삭제


    ○ index만 있는 file이 손상
      : 파일 생성 후, index를 다시 생성한다.

    ○ password file 손상
      : 삭제하고 다시 생성


  ◎ incomplete recovery
     : 저장된 모든 데이터 파일 적당한 시점까지 복원.

incomplete recovery의 case

1. current, active group인 redo log files 삭제 => DUL
2. datafile삭제 + archived log file 없는 경우
3. user실수 : drop table, 부적절한 commit  -> flashback으로 해결 or 불완전 복구
4. control file 전체삭제 -> trace 파일을 참조해서 할 것.(참조:mannual)


recovery의 종류

- time-based recovery
- change-based recovery(scn)
- log sequence recovery


3. user 실수 : drop table, 부적절한 commit

    ○ 그냥 불완전 복구
      1. shutdown 및 whole 백업
      2. 일반 : 불완전 복구
         - 모든 datafile 복원
         - startup mount
         - recover database until ...;
         - alter database open resetlogs;

      종류
       table drop : 모든 datafile 복원
       tablespace drop : 모든 datafile 및 control file 복원
       table drop + archived inactive redo log group 삭제
       current or active group 삭제

        ※ 불완전 복구에서는 시간을 정확히 알아내는 것이 중요

실습
1. shutdown 및 whole 백업(archive log mode일 것)

OS] sqlplus / as sysdba
SQL> startup force
SQL> archive log list
SQL> shutdown immediate
SQL> exit
OS] cd $ORACLE_BASE/oradata
OS] rm -rf devdb_backup
OS] rm -rf /u01/app/oracle/oradata/devdb/DEVDB
OS] mkdir devdb_backup
OS] cp $ORACLE_BASE/oradata/devdb/* $ORACLE_BASE/oradata/devdb_backup
OS] sqlplus / as sysdba
SQL> startup
SQL> create table phil.t21 (col1 varchar2(30));
SQL> insert into phil.t21 values (sysdate);
SQL> insert into phil.t21 values (sysdate+1);
SQL> commit;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> !date

   2009. 12. 21. (월) 18:21:31 KST

SQL> alter system switch logfile;
SQL> drop table phil.t21 purge;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> select * from phil.t21;
  select * from phil.t21
                   *
  ERROR at line 1:
  ORA-00942: table or view does not exist


2. time based recovery

SQL> conn / as sysdba
SQL> shutdown abort
SQL> !cp $ORACLE_BASE/oradata/devdb_backup/*.dbf $ORACLE_BASE/oradata/devdb
SQL> startup mount;
SQL> recover database until time '2009-12-21 18:21:31';

ORA-00279: change 1145878 generated at 12/21/2009 18:19:23 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/oradata/devdb_fra/DEVDB/archivelog/2009_12_21/o1_mf_1_6_%u_.arc
ORA-00280: change 1145878 for thread 1 is in sequence #6

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
--> auto 입력

SQL> alter database open resetlogs;
SQL> select * from phil.t21;
COL1
------------------------------
21-DEC-09
22-DEC-09



    ○ 불완전 복구 + export/import

      1. shutdown 및 whole 백업
      2. 일반 : 불완전 복구
         - 모든 datafile 복원
         - startup mount
         - recover database until cancel;
         - alter database open resetlogs;
      3. emp를 export
      4. 0을 whole restore + inactive group 삭제/생성
      5. 2를 import


    ○ clone DB를 이용 복구(clone DB를 이용한 복구 실습. TSP)

      1. control file의 trace를 만듬
      2. clone db용 디렉토리 생성
      3. datafile과 online redo logfile, archive log file을 clone db용 디렉토리로 복사
      4. 파라미터 파일 생성
      5. startup nomount
      6. trace 수정 후 실행
      7. alter database mount
      8. recover database until time '2008-08-23:22:38:04' using backup controlfile;
      9. alter database open resetlogs;



기타 참고사항

- export 명령 찾아볼 것.

- 어느 것이 복구시에 더 많은 시간이 걸릴까?
  tablespace drop -> 명령이 alert에 남는다.
  table drop      -> 명령이 남지 않는다. (logminer로 분석을 해서는 볼 수 있음)

- EM에 접속과 원격지에서 sysdba로 접속하려면쓰려면 password file이 있어야.함

'Oracle > Backup & Recovery' 카테고리의 다른 글

MTTR (Mean Time To Recover)  (0) 2009.12.21
MTBF(Mean Time Between Failures)  (0) 2009.12.21
User Managed Backup  (0) 2009.12.18
flashback database를 가능하게 하는 설정  (0) 2009.12.17
RMAN의 구성요소 및 구성실습  (1) 2009.12.16
Posted by 자수성가한 부자