Oracle SQL 강좌
트랜잭션(commit과 rollback) 4 18 68,682

by 김정식 트랜잭션 COMMIT ROLLBACK TRANSACTION LOCK [2002.06.08]


트랜잭션(TRANSACTION)

- 트랜잭션은 데이터 처리의 한 단위 이다.

- 오라클 서버에서 발생하는 SQL문들이 하나의 논리적인 작업 단위로써 성공하거나 실패하는 일련의 SQL문을 트랙잭션이라 보면 된다.

- 오라클 서버는 트랜잭션을 근거로 데이터의 일관성을 보증 한다.

- 트랜잭션은 데이터를 일관되게 변경하는 DML문장으로 구성된다 (COMMIT, ROLLBACK, SAVEPOINT)

TRANSACTION의 시작
  • - 실행 가능한 SQL문장이 제일 처음 실행될 때
TRANSACTION의 종료
  • - COMMIT이나 ROLLBACK
  • - DDL이나 DCL문장의 실행(자동 COMMIT)
  • - 기계 장애 또는 시스템 충돌(crash)
  • - deadlock 발생
  • - 사용자가 정상 종료
자동 COMMIT은 다음의 경우 발생 한다.
  • - DDL,DCL문장이 완료 될 때
  • - 명시적인 COMMIT이나 ROLLBACK없이 SQL*Plus를 정상 종료 했을 경우
자동 ROLLBACK은 다음의 경우 발생 한다.
  • - SQL*Plus를 비정상 종료 했을 경우
  • - 비정상적인 종료, system failure

COMMIT과 ROLLBACK

  • - COMMIT : 변경사항 저장
  • - ROLLBACK : 변경사항 취소
COMMIT과 ROLLBACK의 장점
  • - 데이터의 일관성을 제공 한다.
  • - 데이터를 영구적으로 변경하기 전에 데이터 변경을 확인하게 한다.
  • - 관련된 작업을 논리적으로 그룹화 할 수 있다.
  • - COMMIT, SAVEPOINT, ROLLBACK 문장으로 TRANSACTION의 논리를 제어할 수 있다.
COMMIT이나 ROLLBACK 이전의 데이터 상태
  • - 데이터 이전의 상태로 북구가 가능 하다.
  • - 현재 사용자는 SELECT문장으로 DML작업의 결과를 확인할 수 있다.
  • - 다른 사용자는 SELECT문장으로 현재 사용자 사용한 DML문장의 결과를 확인할 수 없다.
  • - 변경된 행은 LOCK이 설정 되어서 다른 사용자가 변경 할 수 없다.
COMMIT 이후의 데이터 상태
  • - 데이터베이스에 데이터를 영구적으로 변경
  • - 데이터의 이전 상태는 완전히 상실
  • - 모든 사용자가 결과를 볼 수 있다.
  • - 변경된 행의 LOCK이 해제되고 다른 사용자가 변경할 수 있다.
  • - 모든 SAVEPOINT는 제거 된다.

참고링크

- 강좌 URL : http://www.gurubee.net/lecture/1403

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 초보자 [2005.03.16 10:10:15]
savepoint라는게 뭐죠?

by 김정식 [2005.03.16 10:18:18]
바로 아래 "4.6. Commit과 Rollback 예제"
강좌를 참고해 보세요..

by oraora [2005.03.17 10:05:50]
정상 종료라는게 뭐죠??

by 홍홍 [2005.05.25 12:03:35]
quit 명령을 통해 sql plus를 종료한걸 말합니당~

by smile [2005.11.09 20:04:48]
퍼갑니다. ^^

by 이광복 [2006.07.02 08:30:45]
sql plus 창의 오른쪽위 X 종료버튼을 누른 것도 정상 종료에 해당하나요?
테스트 해 보면 정상적으로 모든 데이터가 존재하던데...

by ITEAtom [2006.08.31 19:49:19]
x 버튼은 정상 종료가 아닙니다.
exit 를 치고 나가야되죠
isqlplus도 마찮가지로 브라우져를 그냥 받아 버리면 비정상 종료 입니다.
꼭 log out를 해야되죠.

by lemontree [2007.01.24 12:13:19]
insert into는 rollback 되는데
delete는 rollback이 안되나요?

by 이현석 [2007.01.24 14:01:37]
insert,update,delete 모두 rollback됩니다.

by THX [2008.04.30 11:45:36]
감사합니다 깔끔하게 정리 해주셨네요

by 안녕 [2010.04.01 09:23:37]
그 다음예제에선 commit이전에 다른 사용자가가 볼수 있다고 그랬는데 여기선 commit이전엔 다른 사용자가 못 본다고했네요... commit이전에 insert한 것을 select로 해서 다른사용자가 볼 수 있지않나요?

by 좋은하루 [2010.04.05 16:08:31]
일반적으로 오토커밋 포함해서 커밋하기전에 어느 한 사용자가 인서트 또는 업데이트한 자료는 다른 사용자가 볼 수 없습니다. 수정되기 전의 데이타만 보이져..

by 어려워 [2010.04.15 23:17:22]
create table로 테이블 만들고 롤백하고나서 다시 describe 테이블 이나 select문으로 테이블 검색해도 존재하던데..원래 롤백하면 처음으로 돌아서 테이블 없어져야 하는거 아닌가요?

by 마농 [2010.04.19 08:33:32]
Create 은 DML이 아니라 DDL이죠.
Transation은 DML과 관련된 것입니다.

by 김병x [2010.10.25 19:51:18]
진짜 너무 어렵다 젠장......

by SadSave [2010.12.24 10:21:22]
DDL, DML, DCL 이 헤깔리시는분들은 첫장 SQL의 종류를 보고 오시면 이해하기 쉽겠네요. COMMIT과 ROLLBACK은 DML에서만 적용됩니다. 나머지 DDL,DCL은 자동 COMMIT 즉, 자동으로 저장됩니다. 그래서 ROLLBACK자체가 되지 않죠. ROLLBACK은 COMMIT이전에 값을 가지고 오는겁니다.

by 손님 [2012.05.10 10:48:06]
Transation은 TCL입니다.

by 서병준 [2012.10.08 19:05:11]
용어를 먼저 이해하는게 좋은거 같아요
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입