메뉴 건너뛰기

bysql.net

1. 트랜잭션 개요

트랜잭션이란

 

 ○데이터베이스의 논리적으로 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리킨다.

 

 ○응용 프로그램은 트랜잭션의 집합

 

3가지 명령어를 트랜잭션을 콘트롤하는 TCL(TRANSACTION CONTROL LANGUAGE)

 

○ COMMIT : 올바르게 반영된 데이터를 데이터베이스에 반영시키는 것

 

○ ROLLBACK : 트랜잭션 시작 이전의 상태로 되돌리는 것

 

○ SAVEPOINT :  저장점

 

트랜잭션의 대상이 되는 SQL문은 UPDATE, INSERT, DELETE 등 데이터를 수정하는 DML 문이다.

 

2. COMMIT

입력한 자료나 수정한 자료에 대해서 또는 삭제한 자료에 대해서 전혀 문제가 없다고 판단되었을 경우 COMMIT 명령어를 통해서 트랜잭션을 완료

 

- 단지 메모리 BUFFER에만 영향을 받았기 때문에 데이터의 변경 이전 상태로 복구 가능

- 현재 사용자는 SELECT 문장으로 결과를 확인 가능

- 다른 사용자는 현재 사용자가 수행한 명령의 결과를 볼 수 없음

- 변경된 행은 잠금(LOCKING)이 설정되어서 다른 사용자가 변경할 수 없음

  • SQL Server의 COMMIT

Oracle은 DML을 실행하는 경우 DBMS가 트랜잭션을 내부적으로 실행

 DML 문장 수행 후 사용자가 임의로 COMMIT 혹은 ROLLBACK을 수행해 주어야 트랜잭션이 종료

(일부 툴에서는 AUTO COMMIT을 옵션으로 선택할 수 있다.)  

 

SQL Server에서의 트랜잭션은 기본적으로 3가지 방식으로 이루어진다.

1) AUTO COMMIT SQL Server의 기본 방식이며, DML, DDL을 수행할 때마다 DBMS가 트랜잭션을 컨트롤하는 방식

명령어가 성공적으로 수행되면 자동으로 COMMIT을 수행하고 오류가 발생하면 자동으로 ROLLBACK을 수행

 

2) 암시적 트랜잭션 Oracle과 같은 방식으로 처리 

 트랜잭션의 시작은 DBMS가 처리하고 트랜잭션의 끝은 사용자가 명시적으로 COMMIT 또는 ROLLBACK으로 처리

 인스턴스 단위 또는 세션 단위로 설정 가능  인스턴스 단위로 설정하려면 서버 속성 창의 연결화면에서 기본연결 옵션 중 암시적 트랜잭션에 체크를 해주면 된다. 세션 단위로 설정하기 위해서는 세션 옵션 중 SET IMPLICIT TRANSACTION ON을 사용

 

3) 명시적 트랜잭션 트랜잭션의 시작과 끝을 모두 사용자가 명시적으로 지정하는 방식

 BEGIN TRANSACTION (BEGIN TRAN 구문도 가능)으로 트랜잭션을 시작하고 COMMIT TRANSACTION(TRANSACTION은 생략 가능) 또는 ROLLBACK TRANSACTION(TRANSACTION은 생략 가능)으로 트랜잭션을 종료한다. ROLLBACK 구문을 만나면 최초의 BEGIN TRANSACTION 시점까지 모두 ROLLBACK이 수행

3. ROLLBACK

테이블 내 입력한 데이터나, 수정한 데이터, 삭제한 데이터에 대하여 COMMIT 이전에는 변경 사항을 취소할 수 있는데 데이터베이스에서는 롤백(ROLLBACK) 기능을 사용한다. 롤백(ROLLBACK)은 데이터 변경 사항이 취소되어 데이터의 이전 상태로 복구되며, 관련된 행에 대한 잠금(LOCKING)이 풀리고 다른 사용자들이 데이터 변경을 할수 있음 

  • SQL Server의 ROLLBACK

- 데이터에 대한 변경 사항은 취소

- 이전 데이터는 다시 재저장

- 관련된 행에 대한 잠금(LOCKING)이 풀리고, 다른 사용자들이 행을 조작할 수 있음

 

 

COMMIT과 ROLLBACK을 사용함으로써 의 효과

 

- 데이터 무결성 보장

- 영구적인 변경을 하기 전에 데이터의 변경 사항 확인 가능

- 논리적으로 연관된 작업을 그룹핑하여 처리 가능

4. SAVEPOINT

저장점(SAVEPOINT)을 정의하면 롤백(ROLLBACK)할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백할 수 있다. 따라서 복잡한 대규모 트랜잭션에서 에러가 발생했을 때 SAVEPOINT까지의 트랜잭션만 롤백하고 실패한 부분에 대해서만 다시 실행할 수 있다. (일부 툴에서는 지원이 안 될 수 있음) 복수의 저장점을 정의할 수 있으며, 동일이름으로 저장점을 정의했을 때는 나중에 정의한 저장점이 유효하다.


세이브 포인트  지정

SAVEPOINT SVPT1;


세이브 포인트지점까지 롤백할때

ROLLBACK TO SVPT1;


SQL SRVER 에서 SAVETRANSACTION 을 사용할때

SAVS TRANSACTION SVTR1;


저장해놓은 트렌젝션까지 롤백할때

ROLLBACK TRANSACTION SVTR1;

 

  •  트랜잭션에 대해서  정리

  입력(INSERT), 수정(UPDATE), 삭제(DELETE) 수행시 데이터의 무결성을 보장하는 것이 커밋(COMMIT)과 롤백(ROLLBACK)의 목적

 

 커밋(COMMIT)은 “변경된 데이터를 테이블이 영구적으로 반영해라”라는 의미

 

 롤백(ROLLBACK)은 “ 복귀하라”라는 의미

 

 저장점(SAVEPOINT/SAVE TRANSACTION)은 “데이터 변경을 사전에 지정한 저장점까지만 롤백하라”는 의미

 

- CREATE, ALTER, DROP, RENAME, TRUNCATE TABLE 등 DDL 문장을 실행하면 그 전후 시점에 자동으로 커밋

 

-  DML 문장 이후에 커밋 없이 DDL 문장이 실행되면 DDL 수행 전에 자동으로 커밋

 

 - 데이터베이스를 정상적으로 접속을 종료하면 자동으로 트랜잭션이 커밋

 

 - 애플리케이션의 이상 종료로 데이터베이스와의 접속이 단절되었을 때는 트랜잭션이 자동으로 롤백

 

SQL Server의 트랜잭션은 DBMS가 트랜잭션을 컨트롤하는 방식인 AUTO COMMIT이 기본 방식

 

- 애플리케이션의 이상 종료로 데이터베이스(인스턴스)와의 접속이 단절되었을 때는 트랜잭션이 자동으로 롤백

번호 제목 글쓴이 날짜 조회 수
58 Week1_박우창 [1] balto 2012.07.17 9893
57 Week1_이주영 suspace 2012.07.17 5026
56 Week1_승대수 보라빛고양이 2012.07.17 3053
55 Week1_이진우 [5] ljw 2012.07.16 46281
54 Week1_위충환 [1] 실천하자 2012.07.16 9273
53 문제작성 실천하자 2012.07.16 5794
52 제5절_배치_프로그램_튜닝 보라빛고양이 2012.07.04 6906
51 제4절_파티션_활용 오예스 2012.06.26 5753
50 제3절_DML_튜닝 balto 2012.06.13 9074
49 제1절_고급_SQL_활용 실천하자 2012.06.11 6287
48 제1절 고급 SQL 활용 실천하자 2012.06.11 8397
47 제4절_고급_조인_기법 suspace 2012.06.05 31240
46 제2절_소트_튜닝 file ljw 2012.06.04 12024
45 제3절 조인 기본 원리 보라빛고양이 2012.05.30 6980
44 제1절_인덱스_기본_원리 오예스 2012.05.22 7100
43 제2절_인덱스_튜닝 balto 2012.05.18 9904
42 제2절_쿼리변환 ljw 2012.05.14 5614
41 제1절_옵티마이저 실천하자 2012.05.12 7185
40 제3절_동시성_제어 운영자 2012.05.08 6037
39 제1절_Lock balto 2012.05.05 25259