루프 자체를 잠글 수 있습니까?루프 자체를 잠글 수 있습니까?
지난 밤에 테스트 팀은 이상한 체크를 열었습니다. 응용 프로그램은 사용자가 사건을 확인하실 수 있습니다 그리드 테스터 두 사건 (IDS : 1, 5)를 선택 연기해야 하나를 제외한 모두 상태가 나는 [사건]을 알고
업데이트 가지고하지 않는 연기를 테이블이 갱신되어야하며, 하나 개의 새로운 레코드 I 양 및 질의에서 [IncidentDetail 표 삽입이 좋아 :. 두 [인시던트] IncidentStatus] 값이 영 (0)되어야하기 때문에Id IncidentKindCode TransportEntryId CreateDate IncidentStatus CloseDate
-- ---------------- ---------------- ---------------------- -------------- ---------
1 11301 52 2014-08-26 19:23:21.47 1 NULL
5 11301 56 2014-08-26 20:06:17.94 0 NULL
Id IncidentId InsertDate DetailKind Reason IncidentUser PostponeDate
-- ----------- ---------------------- ---------- --------- ------------ -----------------------
9 1 2014-08-26 20:28:37.37 1 TEST TEST 8 2014-08-27 00:00:00.000
10 5 2014-08-26 20:28:37.37 1 TEST TEST 8 2014-08-27 00:00:00.000
테스터
불평 유효 포인트. 앱을 파헤친 후 앱이 서버에 보낸 정확한 쿼리를 캡처했습니다 (프로필러 덕분에).트리거가 없으며 다른 업데이트는 대기중인 트랜잭션이 없습니다. 첫 번째 루프 반복이 두 번째 루프를 차단하여 업데이트가 실패한 경우에도 예외를 발생시켜야하며 모든 트랜잭션을 롤백해야합니다.
삽입이 작동하는 동안 업데이트가 실패 할 수 있습니다. 모든 열에는 표준 형식 (Int, Varchar (100), DateTime 등)이 있는데 암시 적 캐스팅 문제도 테스트했습니다.
이 문제는 한 번만 발생하며 백업을 사용하더라도 재생산 할 수 없지만 문제가 발생한 이유를 찾을 수없는 경우 프로덕션 환경에서 다시 발생할 수 있습니다.
SQL Server의 오류로 인해 일괄 처리가 중단되는 경우가 있습니다. 거래 및 연결과 동일합니다. (예, 이것은 고약합니다.); 따라서 업데이트가 실패하고 삽입물이 통과 될 수 있습니다. 어쩌면 앱에서 오류를 버리는 것일 수 있습니다. – usr
아니요, 트랜잭션 자체를 차단하거나 교착 상태로 만들 수 없습니다. – usr
내부 쿼리 교착 상태가 발생할 수 있으며 발생할 수 있습니다. 제작 코드에서 직접 문제가 발생했습니다. http://blogs.msdn.com/b/bartd/archive/2008/09/24/today-s-annoyingly-unwieldy-term-intra-query-parallel-thread -deadlocks.aspx – Jace