잠금 제한 시간

다른 트랜잭션에서 이미 리소스에 대해 충돌되는 잠금을 소유하고 있어 Microsoft SQL Server Compact 4.0에서 해당 리소스의 트랜잭션에 대한 잠금을 허용할 수 없는 경우 잠금을 요청한 트랜잭션은 다른 트랜잭션에서 잠금을 해제할 때까지 차단됩니다. 이러한 상황은 교착 상태로 인해 발생할 수도 있습니다. SQL Server Compact 4.0에는 2초의 기본 잠금 제한 시간이 있습니다. 데이터에 액세스하여 제한 시간 초과를 대기하는 경우를 제외하면 리소스를 잠그기 전에 리소스의 잠김 여부를 확인할 방법이 없습니다.

참고

sys.lock_information 시스템 뷰를 사용하여 잠금 요청 차단 여부를 확인하고 차단의 주체를 확인할 수 있습니다. 자세한 내용은 잠금 정보 표시를 참조하십시오.

LOCK_TIMEOUT 설정을 통해 응용 프로그램은 문이 차단된 리소스를 대기하는 최대 시간을 설정할 수 있습니다. 문이 LOCK_TIMEOUT 설정보다 오래 대기하면 차단된 문이 자동으로 취소되고 "시스템에서 잠금 대기 시간이 초과되었습니다"라는 SSCE_M_LOCKTIMEOUT 오류 메시지가 응용 프로그램에 반환됩니다. 그러나 SQL Server Compact 4.0에서는 문을 포함하는 어떠한 트랜잭션도 롤백하거나 취소하지 않습니다. 응용 프로그램에는 SSCE_M_LOCKTIMEOUT 오류 메시지를 트래핑할 수 있는 오류 처리기가 있어야 합니다. 응용 프로그램에서 오류를 트래핑하지 않으면 트랜잭션 내의 개별 문이 취소된 사실을 인식하지 못한 채 계속 진행할 수 있습니다. 트랜잭션 뒷부분의 문은 실행되지 않은 문에 따라 달라질 수 있으므로 오류가 발생할 수 있습니다.

SSCE_M_LOCKTIMEOUT 오류 메시지를 트래핑하는 오류 처리기를 구현하면 응용 프로그램에서 제한 시간 상황을 처리하고 차단된 문을 자동으로 다시 전송하거나 전체 트랜잭션을 롤백하는 등의 해결 조치를 취할 수 있습니다.

현재 세션에 대한 LOCK_TIMEOUT 설정을 지정하려면 다음 코드 예에 표시된 대로 SET LOCK_TIMEOUT 구문을 실행하십시오.

SET LOCK_TIMEOUT 2000;

참고 항목

개념

잠금에 대한 개요

트랜잭션 격리 수준

잠금 힌트