본문 바로가기

ORACLE

테이블(table) 삭제 시 (drop, delete) DB 데이터 복구 방법

 

 

## oracle 10g recyclebin 및 as of timestamp 이용 데이터 복구DB

 


업무간 실수 및 자의 또는 타의에 의해 table 및 data가 날라가 버리면~~ 아주 된장 이다...
  
그때 복구 할수 있는 간단한 admin 작업을 해보면...
  
우선 table이 완전 drop되 었는지 data만 지워 졌는지 확인 한다..
 
 
select * from user_tables
where table_names=' tablename'
 
  
첫째  : table이 drop 되었을시~~
  
이때는 recyclebin 을 이용 object를 복구 할 수 있는데....
  
recyclebin 기능을 간단히 알아 보면....
  
window 휴지통에 개념과 유사한  flashback table 에 존재하는  논리적으로 존재하는 data file을 다시 되살리는 기능과 유사합니다... 물론 10g에서만 가능 하구요...

 

9i 이전 버젼은 tablespace 복구 시킨다음  export/import 등 기타 메소드를 사용하여 tablespace 생성하여 복구 시키는데... 프로시져를 수행하고 복제위한 다른데이터베이스 이용해야 하고...
 
 으~~ 머리 아픈 작업을 실시해야 합니다...
 
  
sql> show recyclebin;
  
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ ------------------
SHIN      BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE        2009-10-19:21:13:31

  
sql> flashback recyclebin shin to before drop ;
  
FLASHBACK COMPLETE..
 
sql> select tablename,tablespace_name from user_tables
       where table_name='shin';
 
TABLE_NAME  TABLESPACE_NAME
 
-------------   ---------------------   
    SHIN             TABLESPACENAME
 

복구 되었네요....
  


둘째  : table이 drop 되어있지 않고 truncate 나 delete 가 되었을시...

sql>select tablename,tablespace_name from user_tables
       where table_name='shin';
 
TABLE_NAME  TABLESPACE_NAME
 
-------------   ---------------------   
    SHIN             TABLESPACENAME

 
table은 있네요...
 
데이터를 조회해 보면

 
sql> select * from shin
       where rownum='101';
 

조회해 보니 값이 없네요...

지워진지 한 10분쯤 되었다네요...

이때 as of timestamp 를 이용 조회 하여 복구 합니다...


sql> create table shin1 as
       select * from  shin

       as of timestamp to_timestamp('20091019 21:10:00','yyyyMMdd hh24:mi:ss')

 


backup table을 생성하고 데이터를 복구 합니다...

실시간 access 되거나 사용이 잦은 table은 그에 맞추어 exists 를 이용 없는 값을 insert 시키고


그렇지 않으면 간단히 rename 시킵니다...

 
sql> alter table rename shin to shin1;

 

 

 

출처 : http://blog.naver.com/captain5030/50074212011