本文出自我的個人網站【思考者日記】,轉載請務必保留此出處。
SQL Server2005中對於增、刪、改和查詢是有某些沖突的,很容易造成死鎖。現在有台數據庫里的FileDetail表是由兩套程序來操作的,一套程序負責增、刪、改,另一套程序負責查詢,結果當數據量大的時候,很容易造成查詢的那套程序查詢數據很慢,甚至造成死鎖的情況。原因是SQL Server2005里的設計機制是插入的時候,死鎖的記錄只會是某一條,並不影響下一條和上一條,但是糾結的情況來了,你插入的時候是爽了,並不影響你,可是當我查詢的時候,如果發現某一條記錄被死鎖,那么我這條T-SQL查詢的結果就是全部死鎖,查詢不出任何東西。
為了解決這個問題,我們可以使用同步來解決這個問題,將這台數據庫分開,我們建立兩個FileDetail表,一個用來給增、刪、改的程序使用,另一個給查詢的程序來調用,這樣就可以解決以上的難題。
在SQL Server2005中,同步數據需要:發布服務器、分發服務器和訂閱服務器,源數據所在的服務器是發布服務器,負責發表數據。發布服務器把要復制的數據或對象發生的改變復制到分發服務器,分發服務器用來接收數據的所有改變,它包含一個分發數據庫,並保存這些改變,再把這些改變分發給訂閱服務器。在復制過程中,發布服務器是一種數據庫實例,它通過復制向其他位置提供數據,分發服務器也是一種數據庫實例,它起着存儲區的作用。訂閱服務器是接收復制數據的數據庫實例。一個訂閱服務器可以從多個發布服務器上接收數據。
下面的例子因為我現在沒有那么多資源,只用了本機做測試,我還測試了兩台之間的操作,大家有興趣的可以弄多台來試試。
現在我們來通過SQL Server2005來實現數據同步:
首先我們開啟SQL Server代理(默認是禁用的)
正在啟動——》啟動成功
現在我們來復制下數據庫。
點擊siccdb右鍵-任務-復制數據庫,出現以下界面
下一步
這里使用SQL Server身份驗證,一般建議大家都用這種方式,安全,不會出錯。填好之后,下一步。
這里的目標服務器也使用SQL Server身份驗證。如果你想使用同一網段下別的計算機的數據庫,那么這里的目標服務器可以選擇你的遠程計算機,注意:遠程計算機連接不支持IP和別名,必須使用DoMain登錄名(即域計算機登錄名)。這里說下我在測試兩台計算機同步碰到的問題,我發現登錄不了了?
原因
你的計算機改過計算機名
可以使用
SELECT * FROM Sys.SysServers來查詢下數據庫里的源服務器名
我這里是WILCOM-DEV_SQLS
我們ping下服務器的IP地址,遠程登錄不上的可以在C:WINDOWSsystem32driversetc下的hosts文件里配置下
下一步:
這里大家可以根據實際情況來選擇,默認是第一種,我這里選擇第二種,因為我的源數據庫是不能斷開的(斷開了就要出大事了,呵呵,開個玩笑)好了,廢話不多說,選中后點下一步:
這里默認會勾選你要發布的數據庫,狀態必須是已存在於目標上才可以發布。好了,我這里沒有問題,下一步:
這里是目標數據庫,我給改了下目標數據庫的名字為siccdb_bak
下面選擇如果目標數據庫已存在的情況,我選擇第一種,下一步。
這里大家可以不要動,保持默認就好。直接下一步
我這里就不選擇計划了,大家可以自己試試看計划的執行狀態。
如果你發現下面的integration Services代理賬號不讓選,是灰色的禁止狀態,那建議你看下你的SQL Server服務有沒有安裝這個,如果沒有,那悲催了,你就重新運行SQL Server的安裝向導重新安裝下這個服務吧。(下圖的這個服務)
緊接着,下一步
這里就可以完成啦。
OK,復制完畢。
刷新下數據庫,我們會發現多了一個siccdb_bak
現在,我們來進行發布這個siccdb數據庫,讓siccdb_bak來保持和它同步。
選擇數據庫同級目錄下的復制-本地發布-新建發布,啟動發布向導。
下一步:
默認第一個,下一步。
這里是存放快照文件的目錄,大家默認即可, 免的后面找不到。下一步:
這里我們選擇需要發布的數據庫,下一步:
這里我們選擇快照發布,其他的選項大家可以對照上圖中的說明來自己嘗試,相信大家都很聰明滴。下一步:
這里我們展開表,可以發現這個庫下的所有表,我們可以根據情況來勾選,好了,下一步:
這里我們還可以對選中的表添加SQL語句來篩選,因為我這里用不到,就不給大家做演示了,節約時間,趕緊寫教程。下一步:
這里我們需要勾選立即和計划,勾選計划后,我們選擇更改
我這里需要實時同步,所以我選擇了每天每分鍾來進行同步,大家可以根據實際情況來選擇,好了,確定。
好了,現在來檢查下是否是你選擇的計划,下一步:
這里選擇安全設置,
上面的信息我在前面已經說過了,如果不知道的,可以參考我前面的說明。填好后,確定。
下一步:
立即發布,下一步:
這里填好發布名稱,完成。
OK,一切正常,我們關閉。
本地發布下多了一個[siccdb]:TOB就是我們剛創建的發布,現在我們需要來訂閱它,右鍵本地訂閱-新建訂閱:
打開訂閱向導,下一步:
這里找到了我們的發布源,下一步:
這里選擇[推送訂閱],簡單點,不耽誤時間了,下一步:
這里我們選擇好訂閱服務器和訂閱數據庫,下一步:
這里我們選好與分發服務器、與訂閱服務器的連接:
填好后,確定。
選擇連續運行,下一步:
選擇連續運行,下一步:
創建訂閱,下一步:
好了,這里就完成了。
現在我們在siccdb中增、刪、改些數據,我們在一分鍾后會發現,siccdb_bak中也同步更新了這些數據。
本文出自我的個人網站【思考者日記】,轉載請務必保留此出處。