트랜잭션 격리 수준

Microsoft SQL Server Compact 4.0은 기본적으로 커밋된 읽기 격리 수준에서 작동합니다. 그러나 응용 프로그램이 다른 격리 수준에서 작동해야 할 경우가 있습니다. 응용 프로그램에서 다른 격리 수준을 구현하려면 SET TRANSACTION ISOLATION LEVEL 문을 사용하여 세션의 격리 수준을 설정함으로써 전체 세션의 잠금을 사용자 지정합니다.

중요 정보 중요

SQL Server Compact 4.0의 기본 격리 수준은 커밋된 읽기이지만 이 격리 수준을 사용하면 데이터를 읽을 때 S 잠금이 사용되지 않습니다. 이 동작은 MicrosoftSQL Server와 다릅니다. SQL Server에서 커밋된 읽기를 사용할 경우 행을 읽을 때는 항상 S 잠금이 요청되며 해당 행에서 잠금이 충돌하는 경우 대기합니다. SQL Server Compact 4.0에서는 잠글 필요 없이 커밋된 데이터를 읽을 수 있도록 데이터 페이지의 버전이 자동으로 유지 관리되기 때문에 S 잠금이 필요하지 않습니다. SQL Server Compact 4.0에서 SELECT 작업은 데이터를 잠글 필요가 없으며 거의 성공하기 때문에 이 사실은 매우 중요합니다. 일부 데이터에 X 잠금이 있을 경우 SQL Server와 달리 SELECT 작업은 대기하지 않습니다. SELECT 작업에는 여전히 Sch-S 잠금이 필요합니다. 이 작업은 Sch-X 잠금이 충돌하기 때문에 테이블을 수정하는 경우에만 실패합니다.

격리 수준을 지정한 경우 SQL Server Compact 4.0 세션에서 모든 SELECT 문의 잠금 동작은 해당 격리 수준에서 작동하며 세션이 종료되거나 격리 수준을 다른 수준으로 설정할 때까지 유효합니다. 예를 들어 트랜잭션 격리 수준을 Serializable로 설정하고, 동시 트랜잭션에 의해 실제로 존재하지 않는 행이 Employee 테이블에 삽입될 수 없도록 하려면 다음 SQL 문을 사용합니다.

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

BEGIN TRANSACTION;

SELECT EmployeeID FROM Employee;

트랜잭션 격리 수준을 프로그래밍 방식으로 설정할 수도 있습니다. 다음은 ADO .NET을 사용하여 트랜잭션 격리 수준을 설정하는 방법에 대한 예입니다.

SqlTransaction myTrans;

myTrans = myConnection.BeginTransaction(IsolationLevel.RepeatableRead);

표시: