본문 바로가기

Oracle/SQL

SQL [DML문] Delete 데이터삭제

where 절 없이 작성하면 절 대 안 됨

  • 취소여부 - 가능 rollback
  • 플래쉬백 여부 - 가능
  • 휴지통에 없다.
  • undo segment 라는 공간에 들어가기 때문에 flashback table 로 복구해야한다.

delete from 테이블 명

where 지울 데이터 조건

예제 80 스캇의데이터 지우기

delete from emp
where ename = 'SCOTT';

 

문제 390 월급이 3000 이상인 사원들을 지우기

delete from emp 
where sal >=3000;

모르고 delete → commit 한 자료 복구 방법

 

delete from emp; —————> 테이블을 모두 지움

commit; —————→ 다 저장되버림

rollback; ——————> 롤백 안됨

select * from emp; —————> 데이터 검색 안됨


예전시간 데이터를 확인하는 방법

  • Flashback query 문
    • 타임머신타고 과거로,,, (골든 타임 15분 안에 조치를 해야합니다)
    • as of timestamp 를 쓴 후 to_timestamp식을 쓴다
    select * from emp as of timesTamp to_timestamp('2021/11/17:15:24:00', 'RRRR/MM/DD:HH24:MI:SS');
  • 예전 자료를 볼 수 있음 —> 아직 복구는 아님

  1. 복구할 수 있는 시간을 확인 하는 방법—> 900초 (기본 설정값 )
  2. select name, value 
    from v$parameter
    where name = 'undo_retention';
  3. 기본 시간설정도 바꿀 수 있다. (단 데이터 용량을 좀 잡아먹음)
  4. emp 테이블을 flashback 이 가능한 상태로 변경합니다.
  5. alter table emp 
    enable row movement;
  6. 특정시간으로 emp 테이블 복구하기 
  7. flashback table emp to timestamp 
    to_timestamp('2021/11/17:15:24:00', 'RRRR/MM/DD:HH24:MI:SS');
    
    commit;
     

이 명령어가 수행 한 순간 insert into 가 일어난 것이고

마지막 commit 해주어야 완료된다.


문제 391 사원테이블의 월급을 전부 0으로 변경 commit

update emp 
set sal = 0 ;

commit;

문제 392 위에 지운 월급을 다시 복구하시오. COMMIT

  1. alter table emp enable row movement;
  2. flashback table emp to timestamp
    to_timestamp ('2021/11/17:16:01:00','RRRR/MM/DD:HH24:MI:SS');
  3. SELECT * FROM EMP; → 일단 확인
  4. COMMIT ; → 저장