2014-12-04 6 views
2

격리 수준 중 하나를 사용하여 커밋 전에 트랜잭션에 의해 현재 수정 된 데이터를 수정할 수 있도록 허용합니까? 제한이 가장 적기 때문에 커밋되지 않음을 알 수 있습니까? 아니면 그 일이 완전히 막히지 않습니까? 가능하다면 '더러운 글'이라고 부르시겠습니까?SQL Server - '더티 쓰기'라는 것이 있습니까?

답변

2

트랜잭션 및 트랜잭션의 원 자성을 제공하는 RDBMS는 더티 기록을 허용 할 수 없습니다.

SQL Server 은 모든 쓰기가 롤백 될 수 있어야합니다.이어야합니다. 단일 명령문조차도 많은 쓰기를 유발하고 몇 시간 동안 실행될 수 있기 때문에 이것은 단일 명령문에 대해서도 적용됩니다.

행이 작성되었지만 롤백해야한다고 가정 해보십시오. 그러나 다른 한편으로는 이미 저지른 다른 일이 일어났습니다. 이제는 다른 트랜잭션에 제공되는 원 자성 보장을 위반하기 때문에 롤백 할 수 없습니다. 잃어버린 글.

유일한 해결책은 X- 잠금을 사용하여 기록되지만 커밋되지 않은 데이터를 항상 안정화하는 것입니다.

SQL Server는 더티 쓰기 또는 쓰기 손실을 허용하지 않습니다.

+1

의미가 있습니다. 정교 해줘서 고마워. – user441660

1

아니요, 동일한 트랜잭션으로 업데이트하지 않으면 불가능합니다. Uncommitted 읽기 전용으로 격리 수준 설정은 커밋되지 않았지만이를 업데이트 할 수없는 경우에도 테이블에서 데이터를 읽는 데만 작동합니다.

갱신되지 않은 분리 레벨 및 nolock 테이블 힌트는 갱신 또는 삭제 명령문에서 무시되며 트랜잭션이 확약 될 때까지 대기합니다.