2015-08-27 59 views
1

在配置SQL Server時生成初始快照 事務複製時,是否有人知道快照代理是否在您選擇的表(文章)上放置了鎖?我有一些包含2+百萬行的表,並且想知道SQL Server是否實際放置表鎖以防止發佈數據庫聯機時的更新。如果放置了鎖,那麼我想在生產的非高峯時段運行初始快照。SQL事務複製 - 初始快照放置表鎖?

謝謝!

回答

0

在事務複製或任何其他類型的複製中,起點是數據庫的快照。創建快照的初始步驟在任何類型的複製中都完全相同。

創建快照時,SQL Server根本不會獲取任何類型的鎖,它實際上是某個時間點的數據庫快照,創建快照不會干擾任何事務。未提交的事務在創建後會回滾到快照中。

要了解更多有關數據庫快照是如何工作的閱讀這篇文章從MSDN How Database Snapshots Work

+0

以下是此鏈接中發現的舊文章的摘錄:併發快照處理 通常,在生成快照時,SQL Server將在作爲快照生成期間的複製一部分發布的所有表上放置共享鎖。這可以防止在發佈表上進行更新。併發快照處理(僅與事務複製一起提供)不會在整個快照生成過程中保留共享鎖,因此,它允許用戶在SQL Server 2000創建初始快照文件時不間斷地繼續工作。 – sydney

+0

https://technet.microsoft.com/en-us/library/Aa179423%28v=SQL.80%29.aspx – sydney

+0

對不起,我的意見不是很清楚。上面的摘錄在這個鏈接中找到:https://technet.microsoft.com/en-us/library/Aa179423%28v=SQL.80%29.aspx,我不確定它是否仍然適用於SQL Server 2012這就是爲什麼我有點困惑。 – sydney

0

如果你在一個支持數據庫快照(如create database [foo]... as snapshot of [bar])SQL Server版本上運行,那麼你可以選擇使用那些作爲快照的基礎。檢查sp_addpublication的@sync_method參數。需要注意的是,由於數據庫快照的工作方式(即寫時複製會減慢任何寫入活動),您仍然可能希望在一天的非繁忙時間內完成此操作,但是您不會爭用鎖定。

+0

我認爲在非高峯期運行初始快照(在我的情況下)可能更安全,特別是我們的OLTP應用程序在工作時間非常繁忙。從我一直在閱讀的內容和上面提供的鏈接中,BOL表示沒有將鎖放置在併發快照處理中,這是事務複製中的「默認」,這與SQL 2012相關。 – sydney

+0

您也可以從備份中初始化完全避免快照的發佈者 –

0

啓動SQL Server 2005時,sp_addpublication的默認@sync_method值爲「併發」,這意味着在snaphsot代理運行期間表不會被鎖定。請注意,這並非完全正確 - 快照代理會在表上放置模式鎖,但該鎖的持續時間最多隻有幾秒。

所以,如果你設置@sync_method =「併發」,那麼不,理論上,更新不會被阻止。如果@sync_method =「native」(SQL Server 2000中的默認設置)或「字符」,那麼是的,更新將被阻止。

+0

有沒有辦法在我實際開始配置複製之前檢查我的sql實例上的默認@sync_method? – sydney

+0

這是一個發佈屬性,您在創建發佈時設置它。 – Greg