나는이 게시물이 다소 오래되었음을 알고 있지만 나는 그런 상황에 처해있다. 아래의 교착 상태 정보와 관련 테이블 링크를 찾으십시오 : 및 http://pastebin.com/5E8kw6Kw
외래 키 참조를 포함하지 않은 모든 테이블에 대한 참조를 닫고 일부 테스트 데이터를 작성해야합니다. 페이지 참조 PAGE: 16:8:5031979
은 아래 코드에 따라 profmaster
테이블로 해석됩니다. 제발 후자가 해결되지 않기 때문에 출력에서 m_objId
대신 Metadata ObjectId
을 사용했습니다. 여기
DBCC TRACEON(3604)
DBCC PAGE(16,8,5031979,1)
DBCC TRACEOFF(3604)
select name from sys.tables where object_id = 1889441805
페이지 해상도 보고서의 출력입니다 :
http://pastebin.com/HfrVp2nP - 내가 SQL 서버 2008 R2 (SP1) X64을 실행하고있어주의하시기 바랍니다
나는 어떻게이 문제에 관해서는 대한 의견을 보내 줄 해결할 수 있습니다.
- 전자 (. 즉, SQL 버그) 삭제 및 기타 작업, 또는 단일 문 교착 상태 타협 계단식 제약, 교착 상태를 사용하여 두 개의 삭제 사이
<deadlock-list>
<deadlock victim="process53f9f2bc8">
<process-list>
<process id="process53f9f2bc8" taskpriority="0" logused="4712" waitresource="KEY: 16:72057678434598912 (a60c363e20e5)" waittime="571706" ownerId="93354998" transactionname="user_transaction" lasttranstarted="2013-11-19T15:39:31.203" XDES="0x80011730" lockMode="U" schedulerid="2" kpid="2064" status="suspended" spid="61" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2013-11-19T15:39:31.263" lastbatchcompleted="2013-11-19T15:39:31.260" clientapp="3E WebUI" hostname="LA-BAT-26-WAPI" hostpid="2728" loginname="sa" isolationlevel="read committed (2)" xactid="93354998" currentdb="16" lockTimeout="4294967295" clientoption1="671096864" clientoption2="128056">
<executionStack>
<frame procname="adhoc" line="1" stmtstart="140" sqlhandle="0x02000000d1e0f407f28e46e45feec1ce34fc8f3e09dcb3c5">
update n0t0 set ProfMaster = @0 , MatrixTaxCode = null , PrevProfMaster = @1 , LastProcItemID = @2 , TimeStamp = GETDATE () from Timecard as n0t0 where ((((n0t0 . WorkDate) < = (@3)) and (((n0t0 . IsActive) = (@4)) and ((n0t0 . IsNB) = (@5)))) and (((((n0t0 . ProfMaster) is null) and ((n0t0 . InvMaster) is null)) and ((n0t0 . WIPRemoveDate) is null)) and ((n0t0 . CurrProcItemID) is null))) and ((n0t0 . Matter) in (select n1t1 . Matter from ProfMatter as n1t1 where (n1t1 . ProfMaster) = (@6))) </frame>
<frame procname="adhoc" line="1" sqlhandle="0x0200000095131921232b4d814cc188595c176663442618b6">
UPDATE n0t0 SET ProfMaster = 252516,MatrixTaxCode = NULL,PrevProfMaster = 252516,LastProcItemID = '939f3291-10a7-4704-885e-9021b2a39f15',TimeStamp = GETDATE() FROM Timecard AS n0t0 WHERE ((((n0t0.WorkDate) <= ('11/04/2013 00:00:00')) AND (((n0t0.IsActive) = (1)) AND ((n0t0.IsNB) = (0)))) AND (((((n0t0.ProfMaster) IS NULL) AND ((n0t0.InvMaster) IS NULL)) AND ((n0t0.WIPRemoveDate) IS NULL)) AND ((n0t0.CurrProcItemID) IS NULL))) AND ((n0t0.Matter) IN (SELECT n1t1.Matter FROM ProfMatter AS n1t1 WHERE (n1t1.ProfMaster) = (252516)))/**0x2C621659**/ </frame>
</executionStack>
<inputbuf>
UPDATE n0t0 SET ProfMaster = 252516,MatrixTaxCode = NULL,PrevProfMaster = 252516,LastProcItemID = '939f3291-10a7-4704-885e-9021b2a39f15',TimeStamp = GETDATE() FROM Timecard AS n0t0 WHERE ((((n0t0.WorkDate) <= ('11/04/2013 00:00:00')) AND (((n0t0.IsActive) = (1)) AND ((n0t0.IsNB) = (0)))) AND (((((n0t0.ProfMaster) IS NULL) AND ((n0t0.InvMaster) IS NULL)) AND ((n0t0.WIPRemoveDate) IS NULL)) AND ((n0t0.CurrProcItemID) IS NULL))) AND ((n0t0.Matter) IN (SELECT n1t1.Matter FROM ProfMatter AS n1t1 WHERE (n1t1.ProfMaster) = (252516)))/**0x2C621659**/ </inputbuf>
</process>
<process id="process50b54c8" taskpriority="0" logused="43622588" waitresource="PAGE: 16:8:5031979" waittime="1575" ownerId="87921480" transactionname="user_transaction" lasttranstarted="2013-11-19T14:26:29.400" XDES="0x569d39950" lockMode="U" schedulerid="9" kpid="1304" status="suspended" spid="60" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2013-11-19T15:49:01.277" lastbatchcompleted="2013-11-19T15:49:01.277" clientapp="3E WebUI" hostname="LA-BAT-27-WAPI" hostpid="2628" loginname="sa" isolationlevel="read committed (2)" xactid="87921480" currentdb="16" lockTimeout="4294967295" clientoption1="671096864" clientoption2="128056">
<executionStack>
<frame procname="adhoc" line="1" stmtstart="86" sqlhandle="0x020000006014e71626ea61a3e74df841cee6a59043438dc8">
update n0t0 set ProfStatus = @0 , LastProcItemID = @1 , TimeStamp = GETDATE () from ProfMaster as n0t0 join #TempMatterProforma as z0 on ((n0t0 . ProfIndex) = (z0 . ProfIndex)) and ((z0 . IsNewProforma) = (@2)) </frame>
<frame procname="adhoc" line="1" sqlhandle="0x020000004d41a316b62a8171bbf8979051631fdc480c754b">
UPDATE n0t0 SET ProfStatus = N'P' ,LastProcItemID = 'd7eff077-6f52-435f-906a-6fc8f2ee929a',TimeStamp = GETDATE() FROM ProfMaster AS n0t0 JOIN #TempMatterProforma AS z0 ON ((n0t0.ProfIndex) = (z0.ProfIndex)) AND ((z0.IsNewProforma) = (0))/**0xA8DF8735**/ </frame>
</executionStack>
<inputbuf>
UPDATE n0t0 SET ProfStatus = N'P' ,LastProcItemID = 'd7eff077-6f52-435f-906a-6fc8f2ee929a',TimeStamp = GETDATE() FROM ProfMaster AS n0t0 JOIN #TempMatterProforma AS z0 ON ((n0t0.ProfIndex) = (z0.ProfIndex)) AND ((z0.IsNewProforma) = (0))/**0xA8DF8735**/ </inputbuf>
</process>
</process-list>
<resource-list>
<keylock hobtid="72057678434598912" dbid="16" objectname="TE_3E_BAT27B.dbo.Timecard" indexname="IDX__TimeIndex__2F97CBE5" id="lock1ffcaf600" mode="X" associatedObjectId="72057678434598912">
<owner-list>
<owner id="process50b54c8" mode="X"/>
</owner-list>
<waiter-list>
<waiter id="process53f9f2bc8" mode="U" requestType="wait"/>
</waiter-list>
</keylock>
<pagelock fileid="8" pageid="5031979" dbid="16" objectname="TE_3E_BAT27B.dbo.ProfMaster" id="lock3bf068600" mode="IX" associatedObjectId="72057678315388928">
<owner-list>
<owner id="process53f9f2bc8" mode="IX"/>
</owner-list>
<waiter-list>
<waiter id="process50b54c8" mode="U" requestType="wait"/>
</waiter-list>
</pagelock>
</resource-list>
</deadlock>
</deadlock-list>
교착? –
필자는 시도하지 않았으므로 교착 상태가 발생하는지 확실히 알지 못하기 때문에 주석에 넣을 것이다. 그러나 테이블 a와 테이블 b, 테이블 c 및 테이블 b에 FK가있는 상황을 시도해보십시오. FK에서 테이블로 c. 나는 이것이 교착 상태에 빠질 수 있다고 생각한다. 교착 상태를 유발해야하는 스크립트를보고 싶습니다. – HLGEM
레무스, 당신이 언급 한 첫 번째 것은 내가하려고하는 것입니다. HLGEM, 당신은 2005/2008에 그런 순환 의존성을 만들 수 없습니다. 그것은 제가 시도한 첫 번째 일이었습니다. –