불완전 복구 = 특정 시점으로 복구하는 방법
상황 1. 1시에 전체파일 백업, 그후 3시에 tt820 테이블에 1 , AAA / 2, BBB / 3, CCC 라는 데이터 삽입,
5시에 잘못된 update 를 수행해 모든 데이터가 DDD로 변경 , commit 까지 한 상태라 rollback 불가
다시 원래 3시의 데이터로 백업
복구 순서 : 1. DB종료후 백업 실행 -> 2. OPEN 후 테스트용 테이블 tt820, 데이터 생성 -> 3. 잘못된 업데이트 수행후 comit 하여 장애상황 만듬 -> 4. DB종료 -> 5. 임시 디렉토리 생성해서 백업한 datafile , 운영중이던 redo log file, control file 을 복사 -> 6. control file 경로 변경후 startup mount -> 7. rename 으로 data file 과 redo log file 경로 변경 -> 8.update가 일어나기 전 시간으로 복구 -> 9. DB OPEN
1. SYS> shutdown immediate ;
SYS> !cp /app/oracle/oradata/testdb/* /data/backup/close/
2. SYS> startup
SYS> create table scott.tt820 ( no number, name varchar2(10) ) tablespace users ;
SYS> insert into values (1, 'aaa')
SYS> insert into values (2, 'bbb')
SYS> insert into values (3, 'ccc')
SYS> commit ;
SYS> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual ;
TO_CHAR(SYSDATE,'
------------------
2014-11-04:03:00:00 < -- 테이블 생성했을때 시간이 3시임을 확인 이시간까지 데이터 존재
SYS> select * from scott.tt820
NUMBER NAME
----------------
1 AAA
2 BBB
3 CCC
SYS> select * from scott.tt820
NUMBER NAME
----------------
1 DDD
2 DDD
3 DDD
SYS> commit ; <-- commit 을 해서 이제 rollback 안됨
4. SYS> shutdown immediate <-- 복구를 위해 DB 종료
5. SYS> !mkdir /data/tmp <-- 복구 경로로 /data/temp 사용하기위해 디렉토리 미리 생성
SYS> cp /data/backup/close/*.dbf /data/temp <-- 백업파일 복사
SYS> cp /app/oracle/oradata/testdb/*.ctl /data/temp <-- 운영중이던 파일 복사
SYS> cp /app/oracle/oradata/testdb/*.log /data/temp <-- 운영중이던 파일 복사
6. SYS>! vi $ORACLE_HOME/dbs/inittestdb.ora
...
control_files = '/data/temp/control01.ctl' <-- 컨트롤 파일 경로 변경
...
SYS> startup mount
7. SYS> alter database rename file '/app/oracle/oradata/testdb/system01.dbf'
2 to '/data/temp/system01.dbf' ; <-- 이런식으로 data file 의 경로 변경
SYS> alter database rename file '/app/oracle/oradata/testdb/redo01.log'
2 to '/data/temp/redo01.log' ; <-- 이런식으로 redo log file 의 경로 변경
8. SYS> recover database until time '2014-11-04:03:00:00' ; <-- until time 옵션을 줘서 해당 시간으로 복구
9. SYS> alter database open resetlogs <-- 파일들의 scn이 맞지않아 정상적으로는 open 되지 않아 resetlogs 옵션사용
SYS> select * from scott.tt820 ;
SYS> select * from scott.tt820
NUMBER NAME
----------------
1 AAA
2 BBB
3 CCC <-- 3시에 수행됬던 데이터로 복구 됨
상황 2. 잘못된 drop tablespace 복구하기 -backup 파일 있을 경우
순서 : 1. 새로운 tablespace 생성 -> 2. DB 종료후 백업실행 -> 3. DB 오픈후 Test용 tablespace 삭제 -> 4. DB 종료후 임시 복구 경로로 필요 파일 복사 -> 5. 파일들의 경로 변경 -> 6. 복구
1. SYS> create tablespace test
2 datafile '/app/oracle/oradata/testdb/test01.dbf' size 10M ;
2. SYS> shut immediate;
SYS>! cp /app/oracle/oradata/testdb/* /data/backup/close/
3. SYS> startup
SYS> create table scott.tt850 (no number) tablespace test;
SYS> insert into scott.tt850 values (1) ;
SYS> commit;
SYS> drop tablespace test including contents and datafiles; <--drop 해서 장애 발생
4. SYS> shut immediate ;
SYS>! mkdir /data/temp2 <-- 복구 하기 위한 임시경로
SYS>! cp /data/backup/close/*.ctl /data/temp2/ <-- 백업 파일 사용
SYS>! cp /data/backup/close/*.dbf /data/temp2/ <-- 백업 파일 사용
SYS>! cp /app/oracle/oradata/testdb/*.log /data/temp2/ <-- 운영중이던 파일 사용
5. SYS>! vi $ORACLE_HOME/dbs/inittestdb.ora <-- 컨트롤 파일 경로 변경
SYS> startup mount
SYS> alter database rename file '/app/oracle/oradata/testdb/system01.dbf'
2 to '/data/temp2/system01.dbf' ; <-- 데이터 파일 경로 변경
SYS> alter database rename file '/app/oracle/oradata/testdb/redo01.log'
2 to '/data/temp2/redo01.log' ; <-- 리두 로그 파일 경로 변경
6. drop tablespace 된 시점을 확인하기위해 alert log file 에서 찾기 (drop 된 시간을 2014-11-04:06:00:00 라고 가정)
SYS> recover database until time '2014-11-04:06:00:00' using backup controlfile ;
ORA-00279: change 1373367 generated at 11/04/2014 05:53:12 needed for thread 1
ORA-00289: suggestion : /data/arc2/1_1_861154526.arc
ORA-00280: change 1373367 for thread 1 is in sequence #1
그 후 sequence #1 번인 archive log file 을 찾는데 파일이 없어서 위와 같은 에러가 나옴
redo log 상태 조회해서 seq #1 번인 리두로그 파일을 지정 해주면 됨
SYS> recover database until time '2014-11-04:06:00:00' using backup controlfile ;
ORA-00279: change 1373367 generated at 10/17/2014 02:43:12 needed for thread 1
ORA-00289: suggestion : /data/arc2/1_1_861154526.arc
ORA-00280: change 1373367 for thread 1 is in sequence #1
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/data/temp6/redo01.log
상황 3. 상황 2. 잘못된 drop tablespace 복구하기 -backup 파일 없을 경우
순서 : 1. DB 종료후 백업실행 -> 2. DB 오픈 후 새로운 tablespace 생성 3. Test용 tablespace 삭제 -> 4. DB 종료후 임시 복구 경로로 필요 파일 복사 -> 5. 파일들의 경로 변경 -> 6. 복구
1. SYS> shut immediate;
SYS>! cp /app/oracle/oradata/testdb/* /data/backup/close/
2. SYS> startup
SYS> create tablespace test2
2 datafile '/app/oracle/oradata/testdb/test02.dbf' size 10M ;
SYS> create table scott.tt860 (no number) tablespace test2;
SYS> insert into scott.tt860 values (1) ;
SYS> commit;
3. SYS> drop tablespace test including contents and datafiles; <--drop 해서 장애 발생
4. SYS> shut immediate ;
SYS>! mkdir /data/temp3 <-- 복구 하기 위한 임시경로
SYS>! cp /data/backup/close/*.ctl /data/temp3/ <-- 백업 파일 사용
SYS>! cp /data/backup/close/*.dbf /data/temp3/ <-- 백업 파일 사용
SYS>! cp /app/oracle/oradata/testdb/*.log /data/temp3/ <-- 운영중이던 파일 사용
5. SYS>! vi $ORACLE_HOME/dbs/inittestdb.ora <-- 컨트롤 파일 경로 변경
SYS> startup mount
SYS> alter database rename file '/app/oracle/oradata/testdb/system01.dbf'
2 to '/data/temp3/system01.dbf' ; <-- 데이터 파일 경로 변경
- 경로를 변경하는데 복구 필요한 test2 tablespace는 없음
SYS> alter database rename file '/app/oracle/oradata/testdb/redo01.log'
2 to '/data/temp3/redo01.log' ; <-- 리두 로그 파일 경로 변경
6. drop tablespace 된 시점을 확인하기위해 alert log file 에서 찾기 (drop 된 시간을 2014-11-04:08:00:00 라고 가정)
SYS> recover database until time '2014-11-04:08:00:00' using backup controlfile ;
ORA-00279: change 1373367 generated at 11/04/2014 05:53:12 needed for thread 1
ORA-00289: suggestion : /data/arc2/1_1_861154526.arc
ORA-00280: change 1373367 for thread 1 is in sequence #1
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/data/temp6/redo01.log
ORA-00279: change 1373367 generated at 11/04/2014 05:53:12 needed for thread 1
ORA-00289: suggestion : /data/arc2/1_1_861154526.arc
ORA-00280: change 1373367 for thread 1 is in sequence #1
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/data/temp6/redo01.log
SYS> alter database open resetlogs ;
복구 완료!
'오라클 > 백업/복구' 카테고리의 다른 글
Redo log flle 장애 처리방법 (0) | 2014.11.05 |
---|---|
Log Miner 활용하기 (0) | 2014.11.05 |
control file, data file 연습문제 (0) | 2014.11.04 |
Control file 복구 (0) | 2014.11.04 |
Data File Recovery (0) | 2014.10.30 |
Backup (cold, hot) (0) | 2014.10.30 |
사용자 암호설정/ Archive log mode, No Archive log mode (0) | 2014.10.29 |