Cf) drop table 의 경우 복구원리
[recover → control file → data file → redo / archive log file]
                                                                 의 순서로 읽어들여서 복구

 : recover가 시작되면 컨트롤파일에서 checkpoint 정보를 확인 한 후
   DATAFILE을 찾아가서그 정보가 동일한지 확인하게 되는데,
   DATAFILE의 위치는 컨트롤파일에서 읽고간다.

 
 

상황 : 3일에 drop tablespace TS_A 명령으로 테이블스페이스를 삭제하여 4일에는 존재하지 않는 상황.

○ drop tablespace의 경우
 : drop tablespace 명령의 경우, 컨트롤파일안에 있는 해당 테이블스페이스의 정보를 삭제해 버린다.
   (컨트롤파일에 등록되지 않은 테이블스페이스는 복구대상이 아님.
     - 파일은 있어도, 컨트롤파일안에 테이블스페이스 정보가 없기때문에 고치지 않는다.)
   그 결과 drop tablespace명령 이후의 컨트롤 파일에는 해당 테이블스페이스 정보가 없어서 복구할수 없다.

 
해결 : drop tablespace로 삭제된 테이블스페이스를 복구해 내려면 컨트롤파일에 해당 테이블스페이스의 정보가 있어야 한다.
       ① 백업된 컨트롤 파일을 이용해서 복구
         - 문제점 : DATAFILE, 컨트롤파일의 SCN은 백업시점으로 동일하나, Redo log의 SCN은 최신이기 때문에 recover가 안된다.
                    using backup controlfile 옵션사용해서 컨트롤파일의 SCN을 무시하고 복구한다.
  
         - drop tablespace의 삭제시간 찾기
           : alert_testdb.log에 drop tablespace 정보(시간)가 기록된다.

           Ex) /home/oracle/admin/testdb/bdump/alert_testdb.log 내용
           Fri Jan 22 08:30:15 2010
           drop tablespace test including contents and datafiles
           Fri Jan 22 08:30:19 2010
           Deleted file /home/oracle/oradata/testdb/test01.dbf
           Completed: drop tablespace test including contents and datafiles


       ② (뒷장에서살펴볼) 테이블스페이스 정보를 redo / archive log 파일을 이용하여 강제로 컨트롤파일에 등록
 
 

실습



 

① 백업된 컨트롤 파일을 이용해서 복구
 - DATAFILE (백업본)
 - Control file (백업본)
 - redo log (현재 사용본)
 
 
1. 백업받기  (기존 test 테이블스페이스 존재해야함. 파일:test01.dbf)
2. 장애발생
SYS> create table scott.test06 (no number) tablespace test;
SYS> inset into scott.test06 values (6);
SYS> commit;
SYS> select * from scott.test06;
SYS> select to_char(sysdate, 'YYYY-MM-DD:HH24:MI:SS') from dual;
복구에 사용될 시간
 
 
SYS> drop tablespace test including contents anddatafiles;
 
SYS> select * from scott.test06;
에러
 
3. 복구사전 작업
임시경로 : /home/oracle/temp/
# 백업 DATAFILE 복사 (필요한 system01.dbf, sysaux01.dbf, undotbs01.dbf, test01.dbf 파일만 복원)
# 백업 컨트롤파일 복사
# 최근 사용 redo log 복사
 
- DB mount에서 파일경로 변경, 복구안할 테이블스페이스 offline drop
 
4. 복구하기
SYS> recover database until time '시간' using backup controlfile;
 
SYS> alter database open resetlogs;
 
SYS> select a.name TS_NAME, b.name FILE_NAME, b.bytes/1024/1024 MB, b.status
  2  from v$tablespace a, b$datafile b
  3  where a.ts#=b.ts#;
 
SYS> select * from scott.test06;
복구완료
 

Posted by 딩구르
,