Oracle SQL | Transaction

suyeon·2022년 4월 28일
0

Oracle SQL

목록 보기
2/6
post-thumbnail

220428

Transaction, 트랜잭션⭐

데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위

  • 데이터를 조작하는 업무의 물리적(시간적) 단위
  • 1개 이상의 명령어(행동, SQL)로 구성된 작업 단위(기간)

데이터베이스의 상태를 변경시키다는 것은 간단하게 말해서 INSERT, DELETE, UPDATE를 이용하여 데이터베이스를 접근하는 것을 의미한다.

착각하지 말아야 할 것은, 작업의 단위는 질의어 한문장이 아니라는 것.

작업단위는 많은 질의어 명령문들을 사람이 정하는 기준에 따라 정하는 것. ex) 업무별, 시간대별

트랜잭션 명령어 DCL(TCL; Transaction Control Language)

COMMIT / ROLLBACK / SAVEPOINT(=CHECKPOINT)

COMMIT : 현재(하나의) 트랜잭션이 성공적으로 끝났고, 데이터베이스에 반영해라.

ROLLBACK : 현재 트랜잭션을 데이터베이스에 반영하지말고 취소해라(되돌려라).

SAVEPOINT : 트랜잭션을 할 작업 구간 설정, 일부만 ROLLBACK

-- 뷰 아님! 그냥 복사본 원본이랑 관계x
create table tblTrans
as
select name, buseo, jikwi from tblInsa where city = '서울';

select * from tblTrans;


-- 로그인(접속) > 트랙잭션이 시작됨.
-- INSERT, DELETE, UPDATE 명령어는 실행 '즉시' 데이터베이스에 '반영 되지 않는다'. > 임시 적용한다.
delete from tblTrans where name = '박문수';

select * from tblTrans;

-- 진짜로 데이터베이스에 반영해도 된다고 하면 commit
commit; -- 현재 트랙잭션에서 했던 모든 행동을 진짜 데이터베이스에 반영해라

delete from tblTrans where name = '김인수';
select * from tblTrans;

-- 또 새로운 트랜잭션이 자동으로 시작된다.
rollback; -- 현재 트랜잭션에서 했던 모든 행동을 진짜 데이터베이스에 반영하지 말고 없었던 일로 취소해라.'(되돌려라)'

select * from tblTrans; --> '박문수' 살아나지 않음. 한번 commit한 것은 rollback에 의해서 되돌릴 수 없다.

delete from tblTrans where name = '김인수';
select * from tblTrans;

새로운 트랜잭션이 시작하는 경우

  1. 클라이언트 접속 직후
  2. commit 실행 직후
  3. rollback 실행 직후

현재 트랜잭션이 종료되는 경우

  1. commit 실행
  2. rollback 실행
  3. 클라이언트 접속 종료
  4. DDL 실행 (★★★)
  1. commit 실행 > 현재 트랜잭션을 DB에 반영함

  2. rollback 실행 > 현재 트랜잭션을 DB에 반영 안 함

  3. 클라이언트 접속 종료

    • 정상 종료

      • 현재 트랜잭션에 아직 반영안된 명령어가 남아있으면 사용자에게 확인메세지 보냄
    • 비정상 종료

      • 무조건 rollback 처리
  4. DDL 실행 (★★★ 주의)

    • CREATE, ALTER, DROP > 실행 > 그 즉시 COMMIT 동반 > AUTO COMMIT
    • DDL 성격 > 구조 변경 > 데이터 영향을 미침 > 사전에 미리 저장(COMMIT)
select * from tblTrans;

commit; -- 지금부터 새로운 트랜잭션 시작이다. 라는 의미

delete from tblTrans where buseo = '영업부';
select * from tblTrans;

-- + COMMIT
create table tblTest( 
    seq number primary key
);

-- 그래 영업부는 지우면 안될거 같아. 
rollback;

-- 영업부 안 돌아옴!!!! why? DDL은 AUTO COMMIT.
select * from tblTrans;

commit;

delete from tblTrans where buseo = '기획부';
select * from tblTrans;

rollback;

ex) savepoint

commit; -- A

select * from tblTrans;

insert into tblTrans values ('가가가', '영업부', '부장');
insert into tblTrans values ('나나나', '영업부', '과장');

savepoint a; -- 중간 저장

delete from tblTrans where name = '김말숙';
select * from tblTrans;

savepoint b; 

delete from tblTrans where buseo = '개발부';
select * from tblTrans;

rollback to b; -- savepoint b로 이동
select * from tblTrans;

rollback to a;
select * from tblTrans;

rollback; -- A로 이동
select * from tblTrans;

클라이언트 도구

  • SQL Developer
  • Auto Commit 옵션(사용자 선택)

🙋‍♂️ 마무리

DDL(CREATE, DROR, ALTER) 실행 시 자동 COMMIT
트랜잭션(COMMIT, ROLLBACK) 실행하면 취소가 안 되므로 신중히

0개의 댓글