개발/database

[DB] Transaction

yun000 2024. 12. 18. 12:05

<Transaction>

=논리적인 작업의 단위. 분리되어서는 안된다

 

commit, rollback으로 적용하거나 종료할 수 있다

DCL, DDL 실행으로 자동 커밋되기도 한다

데이터베이스 비정상적으로 종료되면 변경사항이 취소된다.

 

 

1. 명시적 transaction

=commit, rollback등으로 적용하거나 종료하는 것

트랜잭션 논리 제어

COMMIT 데이터 영구 변경, 현재 트랜잭션 종료
SAVEPOINT savePoint지정
ROLLBACK 미결정 데이터 버리고 트랜잭션 종료.
ROLLBACK TO 세이브포인트 이름 = 해당 savePoint와 그다음 변경들을 버린다

 

COMMIT, ROLLBACK 사용 장점

데이터 일관성 제공

데이터 영구적으로 변경하기 전에 데이터 변경 미리 확인 가능

관련 된 작업을 논리적으로 그룹화

하나의 트랜잭션이 끝난 후 다음의 실행 가능한 SQL문장은 자동적으로 다음 트랜잭션 시작

 

 

 

2. 암시적 transaction

=DDL문장 완료, DCL문장 완료시 자동 commit된다.

SQL plus 비정상 종료하거나 시스템이 실패되면 자동 rollback된다. → 데이터 무결성 보호

 

AUTOCOMMIT

=DML실행시 자동으로 commit되게 할 것인지 정할 수 있다.

--on으로 변경
set autocommit on
show autocommit

--Off로 변경
set autocommit off
show autocommit

 

SAVEPOINT, ROLLBACK

=savepoint로 작업을 되돌릴 수 있다

delete from emps where department_id=20;--TASK1

savepoint delete_20; --set rollback point

delete from emps where department_id=30; --TASK2

rollback to savepoint delete_20; --TASK2가 취소된다

 

<LOCK>

읽기 일관성

=항상 데이터 검색이 일관되게 보증한다.

트랜잭션 때문에 잠긴다. 이것을 사용해서 읽기 일관성을 보증할 수 있다.

 

읽기 일관성의 중요성

- 데이터베이스 reader, writer는 일관된 데이터를 보게 된다

-  reader는 변경 중인 데이터는 보지 않는다

- writer는 데이터베이스에 대해 일관되게 수행된 변경을 보증한다

- 하나의  writer에 의해 만들어진 변경은 다른 writer가 만드는 변경과 충돌하지 않는다.

 

LOCK

Table Level Lock

= 테이블의 모든 행을 잠금. 

exclusive mode=최고 레벨의 테이블 잠금. 읽기만 가능하고 입력 수정 안됨

그 외 모드들 = row share, row exclusive, share update, share, share row exclusive, exclusive

lock table 테이블명 in exclusive mode;

 

Row Level Lock

= 특정 행만 잠금

 

DML과 LOCK