티스토리 뷰
트랜잭션은 다음과 같이 4가지 특성을 갖는다.
1) 원자성
트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않아야 한다.
2) 일관성
트랜잭션이 실행되기전에 데이터베이스 내용이 잘못되어있지 않다면 트랜잭션이 실행된 후에도
데이터베이스의 내용에 잘못이 있으면 안된다.
3) 고립성
트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과가 만들어져서는 안된다.
4) 지속성
트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.
이런 트랜잭션 처리에서 빠질수 없는 부분은 Lock 이다
Lock은 트랜잭션 처리에서 순차성을 보장하기 위한 방법으로 공유락과 베타락으로 나뉘어진다.
먼저 공유락은
데이터 검색만 가능한것을 의미한다.
즉 데이터의 수정, 삭제, 삽입에 대한 권한은 없어 불가능한 상황을 말한다.
이 경우, 여러사람이 동시에 검색을 수행해도 DB의 데이터는 변하는것이 아니므로 어떤 문제도 발생하지 않는다.
베타락은
데이터의 수정에서 발생되며
선행되는 트랜잭션의 수행이 끝날때까지 유지된다.
예를들어서 여러 트랜잭션이 동시에 수행이 된다면 우선순위에 있는 트랜잭션이 끝날때까지
베타락이 유지되고, 끝난후에 차 순위에 있는 트랜잭션이 수행되고 이를 블록킹이라고 한다.
그러나 두개의 테이블에서 각각 데이터 갱신을 위해 서로의 테이블에 베타락을 걸고 있는 상황에서
다른 테이블의 데이터를 갱신하려 하는 상황이 발생할 수 있다.
즉 서로 다른 테이블에서 서로에게 베타락을 걸고 있는 상황인것으로,
서로의 트랜잭션이 서로에게 우선순위 트랜잭션이 되어 영원히 처리할수 없는 상황이 되는것이다.
이를 교착상태(또는 데드락)라고 부르며 이 경우에는 DBMS가 하나의 트랜잭션을 임의로 오류를 일으킴으로서
교착상태를 해결한다.
'DB > ORACLE' 카테고리의 다른 글
ORACLE의 특이한 문법 (0) | 2023.09.03 |
---|---|
view (0) | 2023.09.03 |
서브쿼리 (0) | 2023.09.02 |
시퀀스(sequence) (0) | 2023.09.02 |
ROWNUM (0) | 2023.09.01 |