1. COMMIT 연산(완료)
COMMIT
- 트랜잭션이 연산을 완료된 것에 COMMIT 문장을 통해 트랜잭션
관리자에게 알려 주는 연산
- 트랜잭션에서 변경하려는 내용이 데이터베이스에 완전하게 반영됨
- SQL 구문상으로 COMMIT WORK
ROLLBACK 연산
- 트랜잭션이 행한 모든 연산을 취소시키거나 트랜잭션을 재 시작하도록 함
COMMIT
- 트랜잭션 실행이 성공적으로 완료되어 COMMIT 연산을 수행한 상태를 의미
- 계좌 이체를 하는 트랜잭션을 간략한 코드로 표현한 프로그램 소스
A 계좌에서 B 계좌로 2000을 이체하는 트랜잭션 예를 프로그램으로 구현한
것이다(프로그램 소스는 프로그래밍 언어마다 문법이 다를 수 있다).
[프로그램 설명]
1. ACCT_SAVE 테이블에는 많은 항목들이 존재하지만, 그 중에서
acct_name (계좌번호), acct_amt(잔액) 두개의 항목만을 사용해 보았다.
2. tmp_amt 변수는 서버에서 해당 조건에 맞는 acct_amt(잔액) 항목 값을
읽어들여 잠시 저장하는 임시 변수이다. 즉 해당 계좌에 계좌 이체를 할 수
있는지 잔액을 확인하기 위한 변수이다.
3. // 표시는 프로그램을 설명하는 주석이다.
==================================================
ACCOUNT_TRANS: // 트랜잭션 이름
Begin_transaction // 트랜잭션의 시작으로<활동(active)>상태유지
{
SELECT acct_amt INTO :tmp_amt // A 계좌에서 잔액을 조회하여
FROMACCT_SAVE // 임시변수 tmp_amp에 저장
WHERE acct_name = ‘A‘;
// A 계좌에서 B 계좌로2000을 이체하기 위한 잔액 비
교 루틴
IF tmp_amt<2000then // tmp_amt 내에 값을 비교하여 잔액이 부족하면,
{ // 메시지로 결과를 알린 후
printf(“잔액이부족한다“); // 더 이상 진행하지 않고, ERR_RTN 루틴 실행
GOTOERR_RTN; // 트랜잭션상태 <실패(failed)>이며,
} // <철회(aborted)>로 이동 예정
else
{ // 잔액이 부족하지 않으면, 계좌 이체 루틴 실행
UPDATE ACCT_SAVE
SETacct_amt=acct_amt-2000
WHERE acct_name = ‘A‘;
IFERRORthenGOTOERR_RTN; // 문장을 수행하다가 문제가 발생하면, ERR_RTN 루틴 실행
// 트랜잭션상태 <실패(failed)>이며, <철회(aborted)>로
UPDATEACCT_SAVE // 이동 예정
SETacct_amt=acct_amt+2000
WHERE acct_name = ‘B‘;
// 마지막 명령문 수행 직후
// 트랜잭션 상태 <부분완료(PARTIALLYCOMMITTED)>
IFERRORthenGOTOERR_RTN; // 문장을 수행하다가 문제가 발생하면, ERR_RTN 루틴 실행
// 트랜잭션상태 <실패(failed)>이며, <철회(aborted)>로
// 이동예정
COMMIT; // 정상적으로 문장이 수행되어 COMMIT문 수행
printf (“계좌이체가 정상적으로 수행되었다“); // <완료(committed)>
GO TO END_RTN;
}
ERR_RTN;
ROLLBACK; // 문장 수행을 실패하여 ROLLBACK문 수행<철회(aborted)>
END_RTN;
RETURN;
}
End_transaction
============================
COMMIT과 ROLLBACK의 비교
2. ROLLBACK 연산(복귀)
트랜잭션이 성공하지 못하는 원인
시스템(사이트) 고장
중앙 처리 장치, 주기억 장치, 전원 공급 장치 등이 고장남
트랜잭션 고장
트랜잭션 고장은 트랜잭션이 수행되는 도중에 철회됨
매체 고장
디스크 헤드, 디스크 콘트롤러 등이 고장 나서 보조 기억 장치의 전부 또는 일부 내용이 지워짐
통신 고장
자연적 재해
부주의 또는 고의적인 고장
'DB > 수업' 카테고리의 다른 글
21. 트랜잭션(11-1) (0) | 2017.07.04 |
---|---|
20. 데이터 베이스 설계와 ER 모델 (10-2) (0) | 2017.06.27 |
19. 데이터 베이스 설계와 ER 모델(10-1) (0) | 2017.06.27 |
10. 관계 대수와 관계 해석(5-2) (0) | 2017.05.21 |
9. 관계 대수와 관계 해석(5-1) (0) | 2017.05.21 |