라일락 꽃이 피는 날

[Oracle] 데이터 삭제 본문

프로그래밍/Oracle

[Oracle] 데이터 삭제

eunki 2022. 6. 3. 17:33
728x90
  delete truncate drop
데이터 삭제 삭제 삭제
저장공간 유지 삭제 삭제
저장구조 유지 유지 삭제
취소여부 (rollback) 가능 불가능 불가능
플래쉬백 여부 가능 불가능 가능

 

 

 

 

예제 1. SCOTT 의 데이터 삭제

delete from emp
    where ename = 'SCOTT';

 

 

 

예제 2. emp 테이블 비우기

truncate table emp;

truncate를 하면 rollback 도 안 되고 과거의 데이터도 확인할 수 없다.

이 경우에는 백업 받은 것으로 복구할 수 밖에 없다.

 

 

 

예제 3. emp 테이블 삭제

drop table emp;

drop 과 truncate 의 차이는 truncate 는 테이블의 구조를 남겨둔다.

테이블의 구조를 남겨두면 나중에 데이터를 새로 입력할 때, 테이블을 생성하지 않아도 된다.

그리고 데이터를 모두 삭제 할거면 delete 보다는 truncate 가 속도가 훨씬 빠르다.

drop 은 완전히 삭제 하는 거라서, 이 테이블이 정말 필요 없을 때 수행해야 한다.

 

 

 

 

데이터를 잘못 삭제했을 때 복구 방법

 

1-0. 복구할 수 있는 시간 확인

select name, value
    from v$parameter
    where name='undo_retention';

900초 = 15분

 

 

 

1-1. 데이터 삭제 전 시간으로 가서 테이블 확인

select *
    from emp as of timestamp to_timestamp('2022/06/03:11:05:00',
                                          'RRRR/MM/DD:HH24:MI:SS');

복구할 수 있는 골든 타임은 15분이므로 15분 안에 조치를 해야 한다.

일단, 위의 시간의 EMP 테이블 데이터를 백업한다.

 

 

 

1-2. 데이터 삭제 전 테이블 백업

create table emp_backup
as
select *
    from emp as of timestamp to_timestamp('2022/06/03:11:05:00',
                                          'RRRR/MM/DD:HH24:MI:SS');

 

 

 

1-3. 백업 테이블의 데이터를 입력

insert into emp
select * 
    from emp_backup;

commit;

 

 

 

2-1. 오라클 휴지통 확인

show recyclebin;

 

 

 

2-2. 테이블을 휴지통에서 복원

flashback table emp to before drop;
728x90