2013-05-10 69 views
-1

我有一份工作是更新一張桌子20分鐘,在這些時刻我無法自然更新任何一行。如何在SQL Server 2008中用鎖定表更新大量行?

有沒有一種方法或方法來做到這一點?

工作可以更長,但我必須繼續更新表格。

另一方面,如果作業中出現錯誤,作業應該回滾。

謝謝..

+0

FWIW,參見[基於行版本控制的隔離級別數據庫引擎(HTTP:/ /msdn.microsoft.com/en-us/library/ms177404(v=sql.105).aspx)(和相關鏈接)。對於何時使用:「讀者/寫者阻塞的發生點在於併發的好處大於增加創建和管理行版本的開銷。」請注意,它關於事務之間的*不阻塞*(即小於SERIALIZABLE);不一定關於整體表現。 – user2246674 2013-05-10 15:37:39

+0

哪種表格提示對於這種情況是正確的。我希望能夠在更新鑽孔表時更新一行? – 2013-05-10 20:23:27

+0

你不應該那樣做。如果這項工作能夠回滾,那麼如果你轉向更寬鬆的鎖定策略(即,你將失去所有的交易完整性),你將會陷入糟糕的境地。 – 2013-05-11 11:02:29

回答

0

將工作拆分成單獨的交易。在像SQL Server這樣的專業數據庫管理系統中,鎖的工作方式是根據需要升級到更高的級別。一旦查詢遇到了很多頁面,它就更新爲只讀表鎖定。在保持交易完整性的同時避免這種情況的唯一方法是將其分解成較小的工作。

+0

你有一個鏈接或一個很好的搜索詞,你可以瞭解更多關於如何做你的建議嗎? – 2013-05-10 17:58:59

+0

關於將大型工作分成更小的工作?唔,不? – 2013-05-11 11:01:01

0

正如Niels指出的那樣,您應該嘗試在批處理中明確提交事務中的每個批次來更新表。如果你正在創建足夠的鎖來保證表鎖,那麼你的機會也會增加你的事務日誌。如果有必要,它可能值得檢查並縮小到更合理的大小。

或者你可以嘗試讓其中「禁止基於鎖的數量鎖升級」跟蹤標誌1224或1211 - http://msdn.microsoft.com/en-us/library/ms188396.aspx