프로그래밍/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