데이터베이스의 상태를 변화시키기 위한 하나의 작업 단위 또는 한번에 실행되어야 할 일련의 연산
하나의 트랜잭션은 모두 반영되거나 모두 반영되지 않아야 한다. 트랜잭션 연산 중 일부는 실행되었더라도 나머지 연산이 비정상적으로 처리되었다면 트랜잭션 실행 전 상태로 돌아가야한다.
수행하고 있는 트랜잭션에 의해 변경된 내용을 유지하면서 이전에 commit 된 내역을 롤백 세그먼트 영역
에 임시 저장하고 있다가 트랜잭션 수행 중 오류가 발행하면 변경 사항을 폐기하고 임시 저장한 최근 commit 시점으로 rollback 한다.
이때, 트랜잭션이 너무 길다면 모든 연산을 재수행하는데에 비용이 들기에 정상적인 처리가 확실한 부분에 대해서 save point
를 지정할 수 있다.
save point
를 이용하면 연산을 전체 재수행하는 것이 아닌 특정 부분에서 rollback 시킬 수 있다.
트랜잭션 처리 결과는 항상 일관성 있어야 한다.
예를 들어 게시판 글 테이블의 본문 제약조건이 글자 길이가 255자까지 였다면 트랜잭션이 실행된 후에도 이 조건이 유지되어야 한다.
즉, 데이터 모델의 모든 제약조건(기본키, 외래키, 도메인 제약조건 등)이 트랜잭션 실행 전후에 동일하게 유지되어야 한다.
트랜잭션에서의 일관성은 트리거를 통해 유지된다.
특정 테이블에 DML 명령이 실행되었을 경우 데이터베이스 내부에서 자동으로 실행되는 프로그램. 예를 들어 하나의 테이블이 수정되었을 때 다른 테이블에도 수정이 일어나도록 업데이트를 하는 명령 등으로 구성되어 있다.
둘 이상의 트랜잭션이 병행 실행되고 있을 경우, 하나의 트랜잭션이 실행되는 중에 다른 트랜잭션에 의해 간섭받을 수 없다.
하나의 트랜잭션이 모두 처리되기 전까지 다른 트랜잭션이 처리 값을 참조할 수 없다. 격리성은 Lock & Unlock
기법을 사용해 보장된다.
데이터 읽기 또는 쓰기 작업 중일 경우 다른 트랜잭션이 접근하지 못하게 하고 먼저 들어온 트랜잭션의 요청이 끝나면 unlock하여 다른 트랜잭션의 접근을 허용하는 기법이다. Lock을 잘못 사용하면 어떠한 트랜잭션도 수행할 수 없게 되는 데드락(Dead Lock) 상태에 빠지게 된다.
트랜잭션 수행 결과는 시스템이 고장나더라도 데이터베이스에 영구적으로 반영되어야 한다.
트랜잭션이 성공적으로 종료되어 commit이 되면 이 결과는 데이터베이스에 영구히 반영되어야 한다.
트랜잭션 연산이 모두 성공적으로 마무리되어 트랜잭션 관리자에게 처리가 끝났음을 알리는 연산이다.
트랜잭션 실행 중 비정상적으로 종료되었을 시, 연산의 일부는 성공하였더라도 모든 연산을 실행 취소하는 연산이다.
많은 도움이 되었습니다, 감사합니다.