SQL Server 2000在這裏。SQL Server編譯鎖?
我想成爲一個臨時DBA,但不太瞭解數據庫服務器的機制,所以我有點卡住了。有一個客戶端進程同時訪問三個視圖。這三個視圖查詢遠程服務器以撤回數據。
它看起來像是其中一個查詢可以工作,但其他兩個失敗(客戶端進程說它超時,所以我猜測一個鎖可以做到這一點)。查詢過程有一個鎖定,直到SQL過程重新啓動(我有勇氣試圖殺死spid一次,但它不會放過)。在鎖定掛起後對該數據庫的任何查詢,並指責阻止它的第一個進程。
該進程報告這些鎖定...(格式化道歉,預覽功能顯示它完全排隊)。
spid dbid ObjId IndId Type Resource Mode Status
53 17 0 0 DB S GRANT
53 17 1445580188 0 TAB Sch-S GRANT
53 17 1445580188 0 TAB [COMPILE] X GRANT
我不能分析得太好。對象1445580188是sp_bindefault,是master中的系統存儲過程。什麼是獨家鎖定?
查看代碼,以保護專有...我只改變了名稱(他們保持與別名和whatnot一致),並試圖保持一切完全相同。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER view [dbo].[theView]
as
select
a.[column1] column_1
,b.[column2] column_2
,[column3]
,[column4]
,[column5]
,[column6]
,[column7]
,[column8]
,[column9]
,[column10]
,p.[column11]
,p.[column12]
FROM
[remoteServer].db1.dbo.[tableP] p
join [remoteServer].db2.dbo.tableA a on p.id2 = a.id
join [remoteServer].db2.dbo.tableB b on p.id = b.p_id
WHERE
isnumeric(b.code) = 1
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
Hunh,返回sp_bindefault。編輯問題摘要以反映它。這是主數據庫中的一個系統sproc,我不知道爲什麼它會調用它。 – Chris 2009-04-09 16:55:14