-
트랜잭션 Trasaction프로그래밍/DBMS 2021. 8. 19.반응형
트랜잭션은 쉽게 말하면 안정성의 보장이다.
은행 업무에서 A가 B에게 100만원을 송금한다면
A -> B
A의 계좌에서는 -100만원
B의 계좌에서는 +100만원
이 작업이 이루어질때 어떤 문제가 생기면 모든 작업을 원상태로 되돌린다.
이것이 트랜잭션 이다.
트랜잭션을 하기 위해서 필요한 명령어
커밋(Commit): 작업을 완료하면 변경사항을 한꺼번에 DB에 반영한다.
롤백(Rollback): 부분 작업이 실패하면 트랜잭션 실행 전으로 되돌림. (걍 하다가 데이터 잘못 넣으면 롤백하고 다시 대신 커밋을 안했다면 이전에 넣었던 데이터가 다 날아갈 수 있으니 조심)
SAVEPOINT :
- 일반적으로 ROLLBACK을 명시하면 작업 전체가 취소됨.
- SAVEPOINT를 사용하면 전체가 아닌 특정 부분에서 트랜잭션을 취소시킬 수 있음
- 취소하려는 지점을 SAVEPOINT로 명시한뒤 (ROLLBACK TO)를 실행하면 지정한 해당 SAVEPOINT 지점까지 처리한 작업이 ROLLBACK됩니다.
INSERT INTO test(num, subject) VALUES (1, 'a'); INSERT INTO test(num, subject) VALUES (2, 'b'); COMMIT; INSERT INTO test(num, subject) VALUES (3, 'c'); SELECT * FROM test; SAVEPOINT a; UPDATE test SET subject = 'x' WHERE num = 3; SELECT * FROM test; ROLLBACK TO a; -- UPDATE는 ROLLBACK 되고 INSERT는 ROLLBACK 되지 않음 SELECT * FROM test;
COMMIT이 되지 않는 상태 확인
-- 관리자(sys 또는 system) 계정에서 확인 SELECT s.inst_id inst, s.sid||','||s.serial# sid, s.username, s.program, s.status, s.machine, s.service_name, '_SYSSMU'||t.xidusn||'$' rollname, --r.name rollname, t.used_ublk, ROUND(t.used_ublk * 8192 / 1024 / 1024, 2) used_bytes, s.prev_sql_id, s.sql_id FROM gv$session s, --v$rollname r, gv$transaction t WHERE s.saddr = t.ses_addr ORDER BY used_ublk, machine;
반응형'프로그래밍 > DBMS' 카테고리의 다른 글
PL/SQL 기본 문법 (0) 2021.08.24 오라클 12c과 11g의 구동 방식 차이 (페이징) (0) 2021.08.22 고급 쿼리 / 정규식 (0) 2021.08.18 고급 쿼리 / 계층적 쿼리 / PIVOT (0) 2021.08.18 시퀀스 SEQUENCE (0) 2021.08.18