[ Oracle - Recovery - Point in Time ]

 

'(DB) Oracle > Object & Utility' 카테고리의 다른 글

 
Oracle 8i Point-in-Time Recovery는 Archive log mode인 경우 아래의 상황에서 적용할 수 있다.
 
1. 실수로 Table을 delete 혹은 drop 했을 때
2. Datafile Resize 실패로 인한 DB 장애 발생시
 
Delete, Drop, Datafile Resize 장애 시점: Wed Nov 19 15:19:39 2004
 
*Datafile Resize 장애의 예 
Wed Nov 19 15:19:39 2004
/* OracleOEM */ ALTER DATABASE DATAFILE 'D:\ORADATA\ORCL\KANG01.DBF' RESIZE  4096M 
Wed Nov 19 15:20:46 2004
Completed: /* OracleOEM */ ALTER DATABASE DATAFILE 'D:\ORADAT
Wed Nov 19 15:23:50 2004
KCF: write/open error block=0xabc36 omline=1
     file=7 D:\ORADATA\ORCL\KANG01.DBF
     error=27069 txt: 'OSD-04026: 부적당한 매개변수가 보내졌습니다 (OS 703542)'
Automatic datafile offline due to write error on
file 7: D:\ORADATA\ORCL\KANG01.DBF
 

다음의 시나리오는 Full backup(DB를 shutdown 상태에서 받은 Datafiles, Redo log files, controlfiles)이 존재하지 않고
Hot backup(datafile)만 존재하는 상황에서 복구하는 방법이다.

 
**********************  현재 DB에서 작업 **********************
0. DB에 접속한다.
C:\> svrmgrl
SVRMGR> connect internal
or
C:\> sqlplus internal
 
1. 현재 DB 모드가 Archive log mode인지 확인한다.
SVRMGR> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            D:\ORADATA\ARCHIVE
Oldest online log sequence     440
Next log sequence to archive   442
Current log sequence           442
 
2. 현재 controlfile을 trace로 생성한다.
SVRMGR> alter database backup controlfile to trace;
 
3. trace가 어느 경로에 생성 되는지 확인한다.
SVRMGR> show parameter user_dump_dest
 
4. 위에서 확인한 경로에서 가장 최근에 생성된 trc 파일을 열고 수정한다.
NORESETLOGS -> RESETLOGS로 변경(Hotbackup 받은 Datafile로 복구할때)

CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS ARCHIVELOG
    MAXLOGFILES 32
    MAXLOGMEMBERS 2
    MAXDATAFILES 254
    MAXINSTANCES 1
    MAXLOGHISTORY 678
LOGFILE
  GROUP 1 'D:\ORADATA\ORCL\REDO01.LOG' SIZE 10M reuse,     * --> reuse 추가
  GROUP 2 'D:\ORADATA\ORCL\REDO02.LOG' SIZE 10M reuse,     * --> reuse 추가
  GROUP 3 'D:\ORADATA\ORCL\REDO03.LOG' SIZE 10M reuse      * --> reuse 추가
DATAFILE
  'D:\ORADATA\ORCL\SYSTEM01.DBF',
  'D:\ORADATA\ORCL\RBS01.DBF',
  'D:\ORADATA\ORCL\KANG01.DBF',
  'D:\ORADATA\ORCL\USERS01.DBF',
  'D:\ORADATA\ORCL\TEMP01.DBF',
  'D:\ORADATA\ORCL\TOOLS01.DBF',
  'D:\ORADATA\ORCL\INDX01.DBF'
;
 
5. 현재 DB shutdown
SVRMGR> shutdown immediate
 
6. 현재 DB Cold Backup
장애가 발생한 현재 DB를 모두 백업
(D드라이브의 여유가 충분 하다면 D:\ORADATA 폴더 이름을 D:\ORADATA_20041119 로 변경함)
 
 
**********************  과거 DB에서 작업 **********************
7. 이전에 받은 Hot backup을 복원한다. (cold backup을 restore할 경우 controlfile 재생성은 skip한다.)
백업장치, 혹은 Disk에서 D:\ORADATA로 copy
 
8. DB에 접속한다.
C:\> svrmgrl
SVRMGR> connect internal
or
C:\> sqlplus internal
 
9. DB를 nomount 시킴
SVRMGR> startup nomount
 
10. Controlfile 재생성
SVRMGR>
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS ARCHIVELOG
    MAXLOGFILES 32
    MAXLOGMEMBERS 2
    MAXDATAFILES 254
    MAXINSTANCES 1
    MAXLOGHISTORY 678
LOGFILE
  GROUP 1 'D:\ORADATA\ORCL\REDO01.LOG' SIZE 10M reuse,
  GROUP 2 'D:\ORADATA\ORCL\REDO02.LOG' SIZE 10M reuse,
  GROUP 3 'D:\ORADATA\ORCL\REDO03.LOG' SIZE 10M reuse
DATAFILE
  'D:\ORADATA\ORCL\SYSTEM01.DBF',
  'D:\ORADATA\ORCL\RBS01.DBF',
  'D:\ORADATA\ORCL\KANG01.DBF',
  'D:\ORADATA\ORCL\USERS01.DBF',
  'D:\ORADATA\ORCL\TEMP01.DBF',
  'D:\ORADATA\ORCL\TOOLS01.DBF',
  'D:\ORADATA\ORCL\INDX01.DBF'
;
 
11. Point-in-Time Recovery 수행
SVRMGR> set autorecovery on
SVRMGR> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL TIME '2004-11-19:15:19:36';   --> 장애발생 이전 시점으로 복구한다.
...
SVRMGR> alter database open resetlogs;   --> recovery에서 until 옵션을 사용할 경우. 즉 Incomplete recovery시 resetlogs 옵션 사용한다.
 
12. 장애가 발생한 Tablespace에 포함된 table 혹은 drop,delete 작업을 수행한 table을 export함.
D:\> exp kang/kang file=kang.dmp log=kang_exp.log tables=emp,dept,bonus,dummy
 
13. export가 완료된 뒤 과거 DB shutdown하고 삭제
SVRMGR> shutdown abort
 
탐색기로 D:\ORADATA 하위 디렉토리 모두 삭제
 
14. 현재 DB 복원
D:\ORADATA_20041117 --> D:\ORADATA 로 폴더이름 변경
 
 
**********************  현재 DB에서 작업 **********************
15. 현재 DB mont
SVRMGR> startup mount
ORACLE instance started.
Total System Global Area                        653465628 bytes
Fixed Size                                          75804 bytes
Variable Size                                   337760256 bytes
Database Buffers                                314572800 bytes
Redo Buffers                                      1056768 bytes
Database mounted.
 
16. 장애가 발생한 Datafile 삭제 (Tablespace에 장애가 발생한 경우만 진행한다.)
SVRMGR> alter database datafile 'D:\ORADATA\ORCL\KANG01.DBF' offline drop;
Statement processed.
SVRMGR> alter database open;
Statement processed.
 
17. 장애가 발생한 Tablespace 삭제 (Tablespace에 장애가 발생한 경우만 진행한다.)
SVRMGR> drop tablespace KANG including contents;
Statement processed.
 
18. 같은 이름의 Tablespace 생성 (Tablespace에 장애가 발생한 경우만 진행한다.)
SVRMGR> create tablespace KANG datafile 'D:\ORADATA\ORCL\KANG01.DBF' size 3000m;
Statement processed.
 
19. 12번에서 생성된 OLD DB의 export파일을 이용하여 import 작업 수행
D:\>imp kang/kang file=kang.dmp fromuser=kang commit=y log=kang_imp.log
 
20. DATA 복원 완료.

Oracle - Listener_EM Console  (0) 2017.01.21
Oracle - Pro*C  (0) 2017.01.21
Oracle - Data를 Insert 문장으로 만들기  (0) 2017.01.21
Oracle - Export Script  (0) 2017.01.21
Oracle - Export  (0) 2017.01.21
Posted by 농부지기
,