-
SQL 데이터 삭제 | TRUNCATE, DROP TABLE [PURGE]Data Base_Oracle/SQL 2020. 1. 13. 17:42
여러가지 데이터 삭제 방법
TRUNCATE
DDL 계열 명령어이기 때문에 바로 COMMIT이 돼서
ROLLBACK으로 데이터를 복구할 수 없음§ 형식_TRUNCATE
[ SQL> truncate table 테이블명; ]
delete / truncate 공통점
테이블의 구조는 그대로 두고 테이블 내의 데이터 삭제
delete / truncate 차이점
DELETE TRUNCATE DML, ROLLACK으로 복원 가능 DDL 계열 명령어, ROLLBACK으로 복원 불가 테이블 내의 데이터만 바로 삭제 테이블을 전부 삭제한 후 구조를 다시 만듬 ※ 데이터 삭제시에는 truncate보다 delete를 사용하는 편이 안전함
DROP TABLE
테이블을 삭제하는 것이기 때문에 데이터도 같이 삭제됨
DDL 명령어이기 때문에 ROLLBACK으로 복구 불가테이블을 recyclebin(휴지통)에 버리는 것과 같음
항상 백업을 받아두는 것이 안전
영구삭제 PURGE
flashback 기술이 적용되지 않음
∵ recyclebin을 거치지 않고 삭제됨§ 형식
[ SQL> drop table 테이블명 [purge]; ]
# 예제_DELETE / ROLLBACK
① scott계정의 b_emp3 테이블의 구조는 그대로 두고 데이터는 전부 삭제
[ SQL> delete from b_emp3;
14 행이 삭제되었습니다.
select * from b_emp3;
선택된 레코드가 없습니다.
desc b_emp3 ]이름 널? 유형 EMPNO NUMBER(4) JOB VARCHAR2(9) ... ... ... ② b_emp3의 데이터를 복구
[ SQL> rollback;
롤백이 완료되었습니다.
select count(*) from b_emp3; ]COUNT(*) 14 ※ delete는 commit이전에 복구가 가능함
# 예제_TRUNCATE
① scott계정의 b_emp3 테이블 내의 데이터를 truncate를 이용해서 삭제
[ SQL> truncate table b_emp3;
테이블이 잘렸습니다.
select * from b_emp3;
선택된 레코드가 없습니다.
desc b_emp3 ]이름 널? 유형 EMPNO NUMBER(4) JOB VARCHAR2(9) ... ... ... ② rollback 후 b_emp3 테이블 확인
[ SQL> rollback;
롤백이 완료되었습니다.
select * from b_emp3;
선택된 레코드가 없습니다. ]※ truncate로 삭제된 데이터는 rollback으로 복구할 수 없음
# 예제_DROP TABLE PURGE
① b_emp3를 영구삭제
[ SQL> drop table b_emp3 purge;
테이블이 삭제되었습니다. ]② flashback이 되는 지 확인
[ SQL> flashback table b_emp3 to before drop;
1행에 오류:
ORA-38305: 객체가 RECYCLE BIN에 없음 ]※ b_emp3가 recyclebin을 거치지 않고 삭제되었기 때문에 발생하는 에러
여러가지 데이터 삭제 방법에 대해 알아보았습니다.
delete 이외에는 복구가 까다롭고 버전에 따라 아예 불가능한 경우도 있기 때문에
데이터 삭제시에는 항상 백업테이블을 만들어 둘 것을 권장드립니다.
'Data Base_Oracle > SQL' 카테고리의 다른 글
SQL 데이터 복원 | FLASHBACK (0) 2020.01.13 SQL_RECYCLE BIN | DATA DICTIONARY (0) 2020.01.13 SQL_WITH GRANT OPTION 객체 권한 위임 (0) 2020.01.13 SQL_OBJECT PRIVILEGE 개요 & DATA DICTIONARY (0) 2020.01.13 SQL_With Admin Option 시스템 권한 위임 (0) 2020.01.13