我試圖用NHibernate保存對象圖。由於非空約束衝突,保存失敗。SQL Server - 表似乎被阻止
我現在發現數據庫中與圖形中某個對象相對應的表現在似乎被鎖定。我無法查詢它。每當我嘗試,它只是坐在那裏無所事事,直到我取消查詢。大約半個小時的情況就是如此。
在保存代碼中,事務首先被提交併處理。
SELECT @@ TRANCOUNT對數據庫給出0
任何想法一)這是怎麼回事,和b)怎樣才能表背?
我試圖用NHibernate保存對象圖。由於非空約束衝突,保存失敗。SQL Server - 表似乎被阻止
我現在發現數據庫中與圖形中某個對象相對應的表現在似乎被鎖定。我無法查詢它。每當我嘗試,它只是坐在那裏無所事事,直到我取消查詢。大約半個小時的情況就是如此。
在保存代碼中,事務首先被提交併處理。
SELECT @@ TRANCOUNT對數據庫給出0
任何想法一)這是怎麼回事,和b)怎樣才能表背?
@@TRANCOUNT
的作用域爲current connection。
假設您在服務器上擁有足夠的權限。
select hostname,program_name, spid,text from master.sys.sysprocesses
outer apply sys.dm_exec_sql_text(sql_handle) s
WHERE open_tran>0
給出了與當前打開的事務以及該連接執行的最後文本的任何連接。我使用sysprocesses的原因是here。
如果上面的查詢顯示您的罪魁禍首,那麼你可以得到SPID和使用kill <spidnumber>
來毫不客氣地把它卷back.You可能要考慮設置在XACT_ABORT爲將來的查詢,以便錯誤不會離開交易開放。
你確定你已妥善處理你的會話嗎?這通常是這類問題的原因...
嘗試運行此:
SELECT
r.session_id AS spid
,r.cpu_time,r.reads,r.writes,r.logical_reads
,r.blocking_session_id AS BlockingSPID
,LEFT(OBJECT_NAME(st.objectid, st.dbid),50) AS ShortObjectName
,LEFT(DB_NAME(r.database_id),50) AS DatabaseName
,s.program_name
,s.login_name
,OBJECT_NAME(st.objectid, st.dbid) AS ObjectName
,SUBSTRING(st.text, (r.statement_start_offset/2)+1,((CASE r.statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE r.statement_end_offset
END - r.statement_start_offset
)/2
) + 1
) AS SQLText
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON r.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text (sql_handle) st
WHERE [email protected]@SPID
它會告訴你誰是阻止您的查詢
對不起,這不會返回任何行! – David 2010-07-26 19:44:38
然後在該數據庫上沒有任何活動,刪除'WHERE',你會看到這個實際查詢的行。打開多個SSMS窗口,在一個窗口中運行緩慢的查詢,然後快速切換到此窗口並運行此查詢,您可以查看行,然後 – 2010-07-26 20:23:40
無效的對象名稱'sysprocesses'。它的模式是什麼? – David 2010-07-26 15:54:38
對於SQL2005 +它在'sys'模式中,但'sys'對於向後兼容是可選的,所以聽起來像你沒有權限查看它。你能在你的應用程序端做些什麼來關閉連接嗎?你也有@ DOK的建議類似的問題? – 2010-07-26 15:56:05
如果我不能查看它,沒有人可以!這是我的數據庫...... DOK的建議沒有問題。 – David 2010-07-26 16:00:46