Web develop/SQL

[SQL/ORACLE] TCL

ForA 2019. 5. 24. 17:31
728x90

Transaction (트랜잭션)

  • 데이터 처리의 한 단위
  • 오라클에서 발생하는 여러 개의 SQL 명령문(DML)들을 하나의 논리적인 작업단위로 처리
  • 하나의 트랜잭션은 ALL- Or- Nothing 방식으로 처리
  • 목적: 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구시키기 위해서

트랜잭션 제어 명령어

COMMIT;  
ROLLBACK; 
SAVEPOINT sp1;
  • COMMIT

    • 저장되지 않은 모든 데이터를 데이터베이스에 저장하고 현재의 트랜잭션을 종료하라는 명령어.
    • 커밋하면 트랜잭션의 처리과정이 모두 반영되며 하나의 트랜잭션 과정이 끝남
    • 트랜잭션이 발생하는 경우 새롭게 생성되거나 갱신된 데이터들이 물리적으로 영구히 저장됨
    • DDL (CREATE , DROP, ALTER, RENAME, TRUNCATE)은 AutoCommit
    • 정상적인 종료시에도 commit작업을 수행. 예) exit종료
  • ROLLBACK

    • 저장되지 않은 모든 데이터 변경사항(DML)을 취소하고 현재의 트랜잭션을 끝내라는 명령
    • 트랜잭션으로 인한 하나의 묶음처리가 시작되기 이전의 상태로 되돌려지는 것
    • 이전상태로 되돌아가 지금까지 수행했던 데이터베이스의 변경을 모두 무효화
    • 비정상적인 종료시 rollback 작업을 수행. 예) 우측 상단 X버튼 클릭시
    • SAVEPOINT 저장점명;

      SAVEPOINTx

-- 20번 부서와 40번 부서를 삭제
    DELETE FROM dept3 WHERE deptno IN(20,40);
    
    -- 30번 부서의 이름을 '영업부'로 변경. (DML)
    UPDATE dept3 SET dname='영업부' WHERE deptno = 30;
    
    -- 되돌리기
    ROLLBACK; 
    ====> 트랜잭션 시작 <=====
    
    -- 10, 20, 30번 부서를 삭제
    DELETE FROM dept3 WHERE deptno IN(10,20,30);
    
    -- 물리적인 반영(DML을 실제 DataBase에 적용)
    COMMIT;
    ====> 트랜잭션 끝 <=====
    ====> 트랜잭션 시작 <=====
    ROLLBACK; 
    
    DELETE FROM dept4 WHERE deptno=30;
    SAVEPOINT sp1;
    DELETE FROM dept4 WHERE deptno=10;
    SAVEPOINT sp2;
    DELETE FROM dept4 WHERE deptno=40;
    
    ROLLBACK to sp2; --40번을 지우기 전
    ROLLBACK to sp1; --10번을 지우기 전
    ROLLBACK         --30번을 지우기 전
    
    -- ROLLBACK to sp2; 에러발생. 이미 작업취소한 내용을 다시 할 수 없음