트랜잭션

조예빈·2024년 4월 5일
0

Oracle

목록 보기
13/26
post-custom-banner

트랜잭션(transaction, Tx)

  • 업무 처리의 최소 단위(더 이상 분할 X) -> 다 같이 일어나거나 다 같이 일어나지 말아야 하기 때문에 쪼갤 수 없음(ALL OR NOTING)
  • 가상의 논리적인 하나의 작업 단위
  • 이 작업이 전부 실행되거나 실행이 안되어야 함

세션(session)

  • 하나의 접속 단위
  • 세션 = 접속 (connect의 의미가 아닌 접속 단위를 의미)
  • 어떤 활동을 위한 시간이나 기간
  • 로그인을 하면 로그인 세션이라 하는데, 나의 로그인과 친구의 로그인은 다른 세션임(=다른 접속임)
  • 오라클에서의 세션 : DB 접속을 시작으로 여러 DB에서 관련 작업을 수행한 후 접속을 종료하기까지의 전체 기간

트랜잭션

--테이블 생성 및 수정
CREATE TABLE DEPT_TCL AS SELECT * FROM DEPT;
INSERT INTO DEPT_TCL VALUES(50, 'DATABASE', 'SEOUL');
UPDATE DEPT_TCL SET LOC='BUSAN' WHERE DEPTNO = 40;
DELETE FROM DEPT_TCL WHERE DNAME = 'RESEARCH';
SELECT * FROM DEPT_TCL;

테이블을 만들고 수정한 후 명령 프롬프트로 SQLPLUS에 접속

INSERT, UPDATE, DELETE가 아무것도 일어나지 않은 상태임

ROLLBACK;
COMMIT;

ROLLBACK 후 COMMIT까지 하면 적용된 사실을 알 수 있음

COMMIT명령어가 실행되는 시점의 상황이 반영됨

--!!!
INSERT INTO DEPT_TCL VALUES(60, 'DATABASE', 'SEOUL');
INSERT INTO DEPT_TCL VALUES(70, 'DATABASE', 'SEOUL');
INSERT INTO DEPT_TCL VALUES(80, 'DATABASE', 'SEOUL');
ROLLBACK;

이 상태에서 ROLLBACK을 실행하면 --!!!로 돌아감

INSERT INTO DEPT_TCL VALUES(60, 'DATABASE', 'SEOUL');
SAVEPOINT SP1;
INSERT INTO DEPT_TCL VALUES(70, 'DATABASE', 'SEOUL');
SAVEPOINT SP2;
INSERT INTO DEPT_TCL VALUES(80, 'DATABASE', 'SEOUL');
ROLLBACK TO SP2;
COMMIT;

지정된 지점으로 ROLLBACK이 일어남

COMMIT을 안하면 한쪽에서는 삭제가 일어나도 다른쪽에서는 삭제가 안됨 -> 작업자 DB에서만 삭제된것

이 상태에서 지우려고 하면 LOCK이 걸렸기 때문에 아무런 작업도 할 수 없음. 사진에서도 실행되지 않고 멈춰 있는 것을 알 수 있음. 즉, 조회는 가능하지만 조작이 되지 않은 것을 알 수 있음

신한은 개발용, 테스트용, 운영용 DB가 따로 있음!

profile
컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다. -마틴 파울러
post-custom-banner

0개의 댓글