답변:
SQL Server는 일반적으로 Oracle과 다른 잠금 전략을 사용합니다. SQL Server에서 사용하는 기본 전략은 행을 선택하면 행, 페이지 또는 전체 테이블에 대한 읽기 잠금이 행에 배치됨을 의미합니다 *. 따라서 NOLOCK
때로는 유용한 절입니다. 비록 일반적인 조언은 격리 수준의 의미를 변경하고 쿼리 출력에 일관성이없는 결과를 초래할 수 있으므로 절대 사용하지 않는 것이 좋습니다.
* (참고 : 이것이 기본값입니다. SNAPSHOT
격리를 선택하면 동작이 다르고 독자는 작성자를 차단하지 않습니다.)
Oracle에서 읽기 프로세스는 쓰기 프로세스를 차단하지 않습니다. 다음은 ' Oracle Database Concepts 11g Release 2 ' 에서 발췌 한 것입니다 . Oracle이이를 처리하는 방법에 관심이있는 경우 살펴보십시오.
잠금 동작 요약
데이터베이스는 잠금을 획득 한 조작에 따라 여러 가지 다른 유형의 잠금을 유지 보수합니다. 일반적으로 데이터베이스는 독점 잠금 및 공유 잠금이라는 두 가지 유형의 잠금을 사용합니다. 행이나 테이블과 같은 리소스에서는 하나의 독점 잠금 만 얻을 수 있지만 단일 리소스에서는 많은 공유 잠금을 얻을 수 있습니다.
잠금은 독자와 작가의 상호 작용에 영향을 미칩니다. 독자는 리소스에 대한 쿼리 인 반면, 작가는 리소스를 수정하는 명령문입니다. 다음 규칙은 독자 및 작성자를위한 Oracle Database의 잠금 동작을 요약합니다.
• 작성자가 수정 한 경우에만 행이 잠 깁니다.
명령문이 하나의 행을 업데이트하면 트랜잭션은이 행에 대해서만 잠금을 획득합니다. 데이터베이스는 행 레벨에서 테이블 데이터를 잠금으로써 동일한 데이터에 대한 경합을 최소화합니다. 정상적인 상황 1에서 데이터베이스는 행 잠금을 블록 또는 테이블 레벨로 에스컬레이션하지 않습니다.
• 행 작성자가 동일한 행의 동시 작성기를 차단합니다.
한 트랜잭션이 행을 수정하는 경우 행 잠금은 다른 트랜잭션이 동일한 행을 동시에 수정하지 못하게합니다.
• 독자는 절대 작가를 차단하지 않습니다.
행의 판독기는 행을 잠그지 않기 때문에 기록기는이 행을 수정할 수 있습니다. 유일한 예외는 SELECT ... FOR UPDATE 문입니다.이 문은 읽고있는 행을 잠그는 특수한 유형의 SELECT 문입니다.
• 작가는 절대 독자를 차단하지 않습니다.
기록기에 의해 행이 변경되면 데이터베이스는 실행 취소 데이터를 사용하여 판독기에 일관된 행보기를 제공합니다.