메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Transaction: 두 판 사이의 차이

noriwiki
새 문서: 분류:데이터베이스 == 개요 == 데이터베이스 트랜잭션(Database Transaction)은 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다. 이론적으로 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Co...
 
잔글 봇: 자동으로 텍스트 교체 (-\[\[분류:데이터베이스 시스템(\|[^\]]+)?\]\] +분류:데이터베이스\1)
 
(다른 사용자 한 명의 중간 판 3개는 보이지 않습니다)
1번째 줄: 1번째 줄:
[[분류:데이터베이스]]
상위 문서: [[SQL]]


== 개요 ==
==개요==
데이터베이스 트랜잭션(Database Transaction)데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다.
'''Transaction'''이란 '''하나 이상의 쿼리(query) 또는 갱신(update) SQL 문장의 연속정인 실행 단위'''이다. 즉, transaction은 논리적으로 하나의 작업 단위(unit of work)로 간주된다. 이때 어떠한 SQL 쿼리를 실행하면 transaction은 자동으로(implicitly) 실행되며, 모든 실행을 마친 후 다음 SQL 키워드 중 하나가 transaction을 종료해야 한다.<ref>밑에서 work 키워드는 optional하다. 즉 안써도 무방하다.</ref>
* '''commit work''': 현재 transaction을 commit한다. 이는 transaction에 의해 수행된 모든 갱신을 데이터베이스에 영구적으로 반영한다.
* '''rollback work''': 현재 transaction을 rollback한다. 즉, transaction에 의해 수행된 모든 갱신을 되돌린다.
또한, 데이터베이스 시스템은 transaction의 '''atomic'''성을 보장한다. 즉, transation의 '''모든 갱신이 반영되거나, 하나도 반영되지 않는다.''' 따라서 위의 모든 SQL 예제 들에 transaction 개념을 제공하면, 여러 개의 갱신 문장은 하나의 transaction으로 묶여서 실행되야 한다. 이중 하나의 문장에서 오류가 발생하면, 해당 transaction의 이전 문장들이 수행한 여러 갱신들의 효과는 모두 되돌려진다.  


이론적으로 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)을 보장한다. 이 성질을 첫글자를 따 ACID라 부른다. 그러나, 실제로는 성능향상을 위해 이런 특성들이 종종 완화되곤 한다.
그리고 transaction은 '''insolation''' 특성을 가진다. 이는 transaction이 다른 transcation들과 서로 간섭하지 않고 독립적으로 처리되어야 한다는 것을 의미한다.


어떤 시스템들에서는 트랜잭션들은 논리적 작업 단위(LUW, Logical Units of Work)로 불린다.
==각주==
 
[[분류:데이터베이스]]
== 구현 ==
데이터베이스 기능 중, 트랜잭션을 조작하는 기능은 사용자가 데이터베이스 완전성(integrity) 유지를 확신하게 한다.
 
단일 트랜잭션은 데이터베이스 내에 읽거나 쓰는 여러 개 쿼리를 요구한다 이때 중요한 것은 데이터베이스가 수행된 일부 쿼리가 남지 않는 것이다. 예를 들면, 송금을 할 때 한 계좌에서 인출되면 다른 계좌에서 입금이 확인되는 것이 중요하다. 또한 트랜잭션은 서로 간섭하지 않아야 한다. 트랜잭션의 특성에 대해 더 많은 정보를 보려면, ACID를 참조.
 
간단한 트랜잭션은 아래 양식의 SQL 언어로 데이터베이스 내에서 실행된다.
 
* Begin the transaction
* Execute several queries (DB내 갱신이 아직 적용되지 않는다)
* Commit the transaction (트랜잭션이 성공적이며, 갱신이 실제 적용됨)
 
만약 쿼리 하나가 실패하면, 데이터베이스 시스템은 전체 트랜잭션 또는 실패한 쿼리를 롤백한다. 이것은 DBMS가 어떻게 사용되고 셋업 되었느냐에 따라 다르다. 트랜잭션은 커밋전에 언제든지 수동으로 롤백될 수 있다.
 
트랜잭셔널 데이터베이스
트랜잭션을 지원하는 데이터베이스를 트랜잭셔널 데이터베이스(transactional database)라고 부른다. 현재 대부분의 관계형 데이터베이스 관리시스템은 트랜잭션 데이터베이스이다.
트랜잭셔널 파일시스템
리눅스의 Namesys Reiser4 파일시스템과 마이크로소프트 NTFS 새로운 버전은 모두 트랜잭션을 지원한다.
 
== Isolation Level ==
* Read-uncommitted: dirty read allowed
* Read-committed: dirty read unallowed
* Repeatable-read: in the same query, the same result, allow phantom tuples
* Serializable: Do no allow anything
 
=== Lost update ===
Lost update이란 하나의 transcation이 다른 transcation에 영향을 주어서, 두 작업중 하나가 실패하게 되는 상황을 말한다.
 
=== Dirty read ===
한 트랜잭션(T1)이 데이타에 접근하여 값을 'A'에서 'B'로 변경했고 아직 커밋을 하지 않았을때, 다른 트랜잭션(T2)이 해당 데이타를 Read 하게 되면 T2가 읽은 데이타는 B가 될 것이다. 하지만 T1이 최종 커밋을 하지 않고 종료된다면, T2가 가진 데이타는 꼬이게 된다. 따라서 commit되기 전에는 그 영역에 lock을 걸어야 한다.
 
=== Repeatable-read ===
하나의 trasaction이 삭제 작업이 끝나기 전에 그 영역에 접근을 한다면, 그 접근은 다시 시도하였을 경우 허용되지 않을 것이다. 즉 이처럼 하나의 transaction read에 대한 접근은 반드시 다른 transaction에 lock을 거는 조건을 말한다.
 
=== Phantom tuples ===
트랜잭션(T1) 중에 특정 조건으로 데이타를 검색하여 결과를 얻었다. 이때 다른 트랜잭션(T2)가 접근해 해당 조건의 데이타 일부를 삭제 또는 추가 했을때, 아직 끝나지 않은 T1이 다시 한번 해당 조건으로 데이타를 조회 하면 T2에서 추가/삭제된 데이타가 함께 조회/누락 된다. 만약 이 상황에서 T2가 transaction을 roll-back하면 T1은 T2가 롤백한 데이터를 알지 못하여 마치 T2가 데이터를 commit 한 것처럼 행동하게 된다.

2026년 1월 15일 (목) 12:52 기준 최신판

상위 문서: SQL

개요

Transaction이란 하나 이상의 쿼리(query) 또는 갱신(update) SQL 문장의 연속정인 실행 단위이다. 즉, transaction은 논리적으로 하나의 작업 단위(unit of work)로 간주된다. 이때 어떠한 SQL 쿼리를 실행하면 transaction은 자동으로(implicitly) 실행되며, 모든 실행을 마친 후 다음 SQL 키워드 중 하나가 transaction을 종료해야 한다.[1]

  • commit work: 현재 transaction을 commit한다. 이는 transaction에 의해 수행된 모든 갱신을 데이터베이스에 영구적으로 반영한다.
  • rollback work: 현재 transaction을 rollback한다. 즉, transaction에 의해 수행된 모든 갱신을 되돌린다.

또한, 데이터베이스 시스템은 transaction의 atomic성을 보장한다. 즉, transation의 모든 갱신이 반영되거나, 하나도 반영되지 않는다. 따라서 위의 모든 SQL 예제 들에 transaction 개념을 제공하면, 여러 개의 갱신 문장은 하나의 transaction으로 묶여서 실행되야 한다. 이중 하나의 문장에서 오류가 발생하면, 해당 transaction의 이전 문장들이 수행한 여러 갱신들의 효과는 모두 되돌려진다.

그리고 transaction은 insolation 특성을 가진다. 이는 transaction이 다른 transcation들과 서로 간섭하지 않고 독립적으로 처리되어야 한다는 것을 의미한다.

각주

  1. 밑에서 work 키워드는 optional하다. 즉 안써도 무방하다.