Search

'격리성(isolation)'에 해당되는 글 1건

  1. 2011.08.23 [MS-SQL2011강좌] 21. 트랜잭션에 대한이해 by 강동운님

이 내용은 2011년 6월 현재 SQL2011(코드명 Denali) Beta를 기준으로 작성 되었으며 SQL2011(코드명 Denali) 공식버전(RTM) 발표까지 꾸준히 업데이트 예정입니다.
아울러, 현재 Beta버전이지만 강좌를 따라해 보시는데 아무 문제 없으실거에요. 도움 되시길 바랍니다.
==================================================================================================



안녕하세요이스트럭(강동운입니다.

 

오늘은 트랜잭션에 대한이해입니다.

 

원문http://www.sqler.com/127366

 

트랜젝션에 대한 이야기 입니다. ^_^

트랜젝션에 대한 이야기는 많은 곳에서.. 이런 저런 이유로 들어 보셨을 겁니다.

프로그래밍을 하실때도 이 트랜젝션은 분명히 대단히 속도에 영향을 주는

요소 입니다.

특히나 데이터 수정이 있을 경우인 Insert, Update, Delete를 잘못 수행했을 경우

대단히 많은 문제를 줄 수 있으며.. - CPU등의 시스템은 펑펑 놀고 있는데..

SELECT의 조회 속도가 대단히 느려지는 사태가 발생하는 겁니다.

이럴때는 한번쯤 트랜젝션 처리 모듈의 문제를 어플리케이션에서 점검을 해 보셔야

하지요. - 물론 마지막쯔~음에.. 문제상황인 블러킹이나 데드락을 막는 방법과..

어플리케이션을 개발하실때.. 주의에 주의를 거듭하셔야 하는 부분도

살짝 언급을 해 드릴겁니다.

 

이 장의 이름은 트랜젝션과 잠금처리인데요..

트랜젝션은 뭘까요? ^_^

늘 그랬던 것처럼.. 군더더기 없이 깔끔하게 알아 보도록 하지요.

 

트랜젝션은 작업의 단위를 지정해 주는 중요한 부분이기 때문입니다.

 

또한 트랜젝션은 SQL구문이나 쿼리를 실제로 처리할 경우의 가장 작은 단위 입니다.!!

은행이야기를 조금 해 볼까요?

코난이 계좌에 200원이 있고....  수선이 계좌에 300원이 있다...

짤짤이에서 진 코난이가 100원을 수선이에게 잃어 200원중 100원을 온라인으로 계좌이체

를 시켜줘야 한다....

은행에사거 온라인으로 입금을 하기위해

 

 

1. 코난이 통장에서 100원을 뺌  - 코난이 통장 = 100   수선이 통장 = 200

2. 수선이 통장에 100원을 더함 - 코난이 통장 = 100   수선이 통장 = 300

 

 

 

하려고 했다...

그런데 웬일.. 정전이 나서... 1번 작업을 끝마치니 시스템이 죽었다...

"대우네 은행"에서 그당시 온라인으로 계좌 이체를 시킨 사람이 1000명이었다...

 999명과 코난이는(도합 1000)  이 문제를 어케할 것인가?

-_-;; 아마 기억하시는분들은.. MSSQL7 중급강좌의 트랜젝션 부분을 역시나..

손가락 두개로 컷 & 페이스트 한걸 아실 겁니다. -_-;;

양해하시고.. 저런 문제가 발생할 수 있지요.. !!!

 

저 내용을 우리가 사용하는 구문으로 살짝 돌려 본다면 이런 이야기가 될지 모릅니다.

 

 

 

update 계좌 set 금액 = 금액 - 100 where id like '코난'

update 계좌 set 금액 = 금액 + 100 where id like '수선'

 

 

하지만 위의 쿼리가 아닙니다!!!!!

SQL서버에서 위와 같은 처리를 위해서는 위처럼 쓰시면 안됩니다.

위와 같은 구문으로 쓰시면?

위의 쿼리는 다음과 같이 변환 됩니다.

 

 

begin tran

update 계좌 set 금액 = 금액 - 100 where id like '코난'

commit tran

 

begin tran

update 계좌 set 금액 = 금액 + 100 where id like '수선'

commit tran

 

 

이렇게 변화하게 됩니다. - 내부적으로 SQL서버의 엔진이 저렇게 바꾸는 겁니다.

그렇다면!!! 어떻게 해야.. 하나의 단위로.. 위 두개의 작업을 하나로 묶어서 수행하게

할 수 있을까요?

바로 다음과 같이 명시적으로 begin tran commit tran을 사용하시면 됩니다.

 

 

 

begin tran

update 계좌 set 금액 = 금액 - 100 where id like '코난'

update 계좌 set 금액 = 금액 + 100 where id like '수선'

commit tran

 

 

이렇게 사용하시면 두개의 작업이 하나의 단위로 처리가 되게 되지요.

별로 어렵지 않으실 겁니다그리고 이정도는 컴쪽의 일을 하신다면 한번쯔음~~

들어 보셨을 이야기일 거구요그럼 조금 다른 이야기로.. 내용을 돌려 보도록 하지요.

 

트랜젝션의 네가지 성격

트랜젝션은 DBMS차원에서.. 다음 네가지 성격을 만족해야만 합니다.

1. 원자성(atomicity) : 트랜젝션은 전부전무의 실행만이 있지.. 일부 실행으로

트랜젝션의 기능을 가질 수는 없다.

2. 일관성(consistency) 트랜젝션이 그 실행을 성공적으로 완료하면 언제나 일관된

데이터베이스 상태로 된다라는 의미입니다.. 이 트랜젝션의 실행으로 일관성이

깨지지 않는다 라는 의미 이지요...

3. 격리성(isolation) 연산의 중간결과에 다른 트랜젝션이나 작업이 접근할 수 없다..

라는 의미입니다.

4. 영속성(durability) : 트랜젝션의 일단 그 실행을 성공적으로 끝내면 그 결과를 어떠한

경우에라도 보장받는다.. 라는 의미입니다....

 

그렇다면 도대체~~ 저 어려운 단어들의 나열이 트랜젝션의 성격이라는 것은 알겠는데..

그 트랜젝션 이라는 녀석으로 과연 어떻게 문제가 생겼을때 데이터를 복구하냐??

이때는 UNDO REDO의 이야기가 나오게 됩니다.

우선 많이들 이야기 하시는 이야기로 알아 보지요.

 

장애(failure)와 회복(recovery)

회복(recovery)이란 장애(failure)가 일어났을 때 데이터 베이스를 장애 이전의 상태로

다시 복구 시켜 일관된 상태로(consistent state)로 복구 시키는 작업이지요

당연하지요? -_-;;

장애를 조금더 알아본다면관리자가 구두로 컴퓨터 파워 버튼을 실수로 차버리거나.

해서 문제가 생기는 상황?? 이렇게 대충은 생각이 가능하실 겁니다.

조금만 더 세분화를 시켜 본다면..

 

 

 

1. 트랜젝션 장애

트랜젝션 내의 논리적 오류나 내부조건입력 데이터의 불량데이터의 불명시스템 자원의

과다한 사용요구 등으로 정상적인 실행을 계속 할 수 없는 상태를 의미 합니다.

2. 시스템 장애

이는 하드웨어의 오동작으로 메인 메모리에 있는 정보의 손실이나 교착 상태가 발생하여

더 이상 실행을 계속할 수 없는 상태를 의미 하지요...

3. 미디어 장애

디스크 헤드 붕괴나 고장으로 인하야... 저장 장치의 데이터베이스 일부 또는 전부가

손상된 상태를 의미하구요 ^_^

 

 

이렇게 세분화가 가능해 집니다.

그렇다면 회복이라는 것은?

말 그대로 데이터를 안정된 상태로 복구 시키는 것을 의미하지요.


감사합니다.
 

[출처] SQLER.COM http://www.sqler.com/394741


SQL2011(코드명 Denali) 시리즈 강좌 리스트
[SQL2011강좌] 1. 코드명 Denali 설치 방법
[SQL2011강좌] 2. SSMS 접속 및 간단한 쿼리 실행
[SQL2011강좌] 3. SQL Server 의 MDF, LDF 그리고 데이터베이스 생성하기
[SQL2011강좌] 4. DDL 1탄: 테이블 생성
[SQL2011강좌] 5. DDL 2탄: 쿼리를 이용한 테이블 컬럼 추가 및 삭제
[SQL2011강좌] 6. Primary key와 Unique 제약조건
[SQL2011강좌] 7. DML 1탄 INSERT
[SQL2011강좌] 8. DML 1탄 INSERT(identity 속성)
[SQL2011강좌] 9. Sequence
[SQL2011강좌] 10. pubs, northwind Database 예제 설치
[SQL2011강좌] 11. SELECT(단일 테이블)
[SQL2011강좌] 12. SELECT(JOIN)
[SQL2011강좌] 13. UPDATE, DELETE 절
[SQL2011강좌] 14. DISTINCT, UNION, UNION ALL 키워드
[SQL2011강좌] 15. ORDER BY, GROUP BY, HAVING
[SQL2011강좌] 16. SubQuery(서브쿼리)
[SQL2011강좌] 17. 뷰에 대한 이해 및 생성, 수정, 삭제
[SQL2011강좌] 18. 저장 프로시저에 대한 이해, 생성, 수정, 삭제
[SQL2011강좌] 19. 인덱스에 대한 이해
[SQL2011강좌] 20. 클러스터드 인덱스와 넌 클러스터드 인덱스
[SQL2011강좌] 21. 트랜잭션에 대한이해
[SQL2011강좌] 22. 트랜잭션의 격리수준 4가지
[SQL2011강좌] 23. 잠금에 대한 이해
[SQL2011강좌] 24. 백업과 복구에 대한 이해(풀백업, 차등백업, 트랜잭션 로그 백업)
[SQL2011강좌] 25. 백업과 복구 전략
[SQL2011강좌] 26. 커서란?




SQL2011(코드명 Denali) 시리즈 동영상 강좌 리스트
[SQL2011 동영상 강좌] 1. 코드명 Denali 설치 방법
[SQL2011 동영상 강좌] 2. SSMS 접속 및 간단한 쿼리 실행
[SQL2011 동영상 강좌] 3. SQL Server 의 MDF, LDF 그리고 데이터베이스 생성하기
[SQL2011 동영상 강좌] 4. DDL 1탄: 테이블 생성
[SQL2011 동영상 강좌] 5. DDL 2탄: 쿼리를 이용한 테이블 컬럼 추가 및 삭제
[SQL2011 동영상 강좌] 6. Primary key와 Unique 제약조건
[SQL2011 동영상 강좌] 7. DML 1탄 INSERT
[SQL2011 동영상 강좌] 8. DML 1탄 INSERT(identity 속성)
[SQL2011 동영상 강좌] 9. Sequence
[SQL2011 동영상 강좌] 10. pubs, northwind Database 예제 설치
[SQL2011 동영상 강좌] 11. SELECT(단일 테이블)
[SQL2011 동영상 강좌] 12. SELECT(JOIN)
[SQL2011 동영상 강좌] 13. UPDATE, DELETE 절
[SQL2011 동영상 강좌] 14. DISTINCT, UNION, UNION ALL 키워드
[SQL2011 동영상 강좌] 15. ORDER BY, GROUP BY, HAVING
[SQL2011 동영상 강좌] 16. SubQuery(서브쿼리)
[SQL2011 동영상 강좌] 17. 뷰에 대한 이해 및 생성, 수정, 삭제
[SQL2011 동영상 강좌] 18. 저장 프로시저에 대한 이해, 생성, 수정, 삭제
[SQL2011 동영상 강좌] 19. 인덱스에 대한 이해
[SQL2011 동영상 강좌] 20. 클러스터드 인덱스와 넌 클러스터드 인덱스
[SQL2011 동영상 강좌] 21. 트랜잭션에 대한이해
[SQL2011 동영상 강좌] 22. 트랜잭션의 격리수준 4가지
[SQL2011 동영상 강좌] 23. 잠금에 대한 이해
[SQL2011 동영상 강좌] 24. 백업과 복구에 대한 이해(풀백업, 차등백업, 트랜잭션 로그 백업)
[SQL2011 동영상 강좌] 25. 백업과 복구 전략
[SQL2011 동영상 강좌] 26. 커서란?