SQL Server復(fù)制功能要避開缺陷的干擾小結(jié)
更新時(shí)間:2011年03月24日 17:38:05 作者:
SQL Server具有強(qiáng)大的復(fù)制功能,除了將數(shù)據(jù)和數(shù)據(jù)庫(kù)對(duì)象從一個(gè)數(shù)據(jù)庫(kù)復(fù)制并準(zhǔn)確分發(fā)的另一個(gè)數(shù)據(jù)庫(kù)中,還要實(shí)行數(shù)據(jù)庫(kù)之間的同步。
SQL Server的復(fù)制分為三種,下面介紹一下這三種復(fù)制技術(shù)及其存在的一些缺陷,大家在使用時(shí)可以根據(jù)具體的情境選擇適用的復(fù)制方法,避開這些缺陷的干擾。
1. 快照復(fù)制
A每隔一段時(shí)間將B中的相應(yīng)表中的數(shù)據(jù)全部刪除,然后將自己相應(yīng)表中的全部插到B中。此種方式顯然不適合我們的應(yīng)用,不予考慮。
2. 事務(wù)復(fù)制
對(duì)A中的每一個(gè)滿足復(fù)制條件的事務(wù),每隔一定時(shí)間A都應(yīng)用到B上,反之亦然。SQL Server 通過把數(shù)據(jù)傳給三個(gè)存儲(chǔ)過程(插入,刪除,修改)進(jìn)行數(shù)據(jù)的修改,我們可以根據(jù)自己的應(yīng)用改寫此存儲(chǔ)過程。
存在缺陷:如果從A到B的復(fù)制條件和從B到A復(fù)制條件相同的話,會(huì)產(chǎn)生“踢皮球”的循環(huán)現(xiàn)象。既一系列事務(wù)應(yīng)用于A,A會(huì)把這些事務(wù)應(yīng)用于B,B收到這一系列事務(wù)后,又會(huì)把它應(yīng)用于A,……如此循環(huán)。
3. 合并復(fù)制
每隔一段時(shí)間,復(fù)制將會(huì)把數(shù)據(jù)庫(kù)A,B中需要復(fù)制的數(shù)據(jù)合并一下,使得AB中的數(shù)據(jù)完全一樣,數(shù)據(jù)都是AB數(shù)據(jù)庫(kù)中數(shù)據(jù)的全體數(shù)據(jù)。如果A和B中數(shù)據(jù)主鍵有沖突,則根據(jù)優(yōu)先級(jí)只選其中一條數(shù)據(jù)。
需要注意:為了區(qū)分?jǐn)?shù)據(jù)來自于哪個(gè)地點(diǎn),SQL Server會(huì)將每一個(gè)需要復(fù)制的表中另加一個(gè)字段,在編程時(shí)應(yīng)該注意。
存在缺陷:
SQL Server 每隔一定時(shí)間進(jìn)行一次復(fù)制,如果找不到另一臺(tái)Server(比如因?yàn)榫W(wǎng)絡(luò)故障,或是另一臺(tái)SQL Server沒有啟動(dòng)),經(jīng)過n(默認(rèn)為10)次連接后,它的復(fù)制功能將會(huì)down掉,直至有人將復(fù)制功能啟動(dòng)。 需要復(fù)制的表中如果在復(fù)制之前就有數(shù)據(jù),在建立復(fù)制時(shí)比較麻煩(SQL Server不提供此類問題的解決方法,需要手動(dòng)完成)。因此,需要復(fù)制的表在使用過程中不能經(jīng)常變動(dòng)表結(jié)構(gòu)。(文/張夢(mèng)強(qiáng))
1. 快照復(fù)制
A每隔一段時(shí)間將B中的相應(yīng)表中的數(shù)據(jù)全部刪除,然后將自己相應(yīng)表中的全部插到B中。此種方式顯然不適合我們的應(yīng)用,不予考慮。
2. 事務(wù)復(fù)制
對(duì)A中的每一個(gè)滿足復(fù)制條件的事務(wù),每隔一定時(shí)間A都應(yīng)用到B上,反之亦然。SQL Server 通過把數(shù)據(jù)傳給三個(gè)存儲(chǔ)過程(插入,刪除,修改)進(jìn)行數(shù)據(jù)的修改,我們可以根據(jù)自己的應(yīng)用改寫此存儲(chǔ)過程。
存在缺陷:如果從A到B的復(fù)制條件和從B到A復(fù)制條件相同的話,會(huì)產(chǎn)生“踢皮球”的循環(huán)現(xiàn)象。既一系列事務(wù)應(yīng)用于A,A會(huì)把這些事務(wù)應(yīng)用于B,B收到這一系列事務(wù)后,又會(huì)把它應(yīng)用于A,……如此循環(huán)。
3. 合并復(fù)制
每隔一段時(shí)間,復(fù)制將會(huì)把數(shù)據(jù)庫(kù)A,B中需要復(fù)制的數(shù)據(jù)合并一下,使得AB中的數(shù)據(jù)完全一樣,數(shù)據(jù)都是AB數(shù)據(jù)庫(kù)中數(shù)據(jù)的全體數(shù)據(jù)。如果A和B中數(shù)據(jù)主鍵有沖突,則根據(jù)優(yōu)先級(jí)只選其中一條數(shù)據(jù)。
需要注意:為了區(qū)分?jǐn)?shù)據(jù)來自于哪個(gè)地點(diǎn),SQL Server會(huì)將每一個(gè)需要復(fù)制的表中另加一個(gè)字段,在編程時(shí)應(yīng)該注意。
存在缺陷:
SQL Server 每隔一定時(shí)間進(jìn)行一次復(fù)制,如果找不到另一臺(tái)Server(比如因?yàn)榫W(wǎng)絡(luò)故障,或是另一臺(tái)SQL Server沒有啟動(dòng)),經(jīng)過n(默認(rèn)為10)次連接后,它的復(fù)制功能將會(huì)down掉,直至有人將復(fù)制功能啟動(dòng)。 需要復(fù)制的表中如果在復(fù)制之前就有數(shù)據(jù),在建立復(fù)制時(shí)比較麻煩(SQL Server不提供此類問題的解決方法,需要手動(dòng)完成)。因此,需要復(fù)制的表在使用過程中不能經(jīng)常變動(dòng)表結(jié)構(gòu)。(文/張夢(mèng)強(qiáng))
相關(guān)文章
sql?server多行數(shù)據(jù)合并一行顯示簡(jiǎn)單實(shí)現(xiàn)代碼
有時(shí)候我們需要將多行數(shù)據(jù)按照某一列進(jìn)行合并,以便更方便地進(jìn)行數(shù)據(jù)分析和處理,這篇文章主要給大家介紹了關(guān)于sql?server多行數(shù)據(jù)合并一行顯示簡(jiǎn)單實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2023-12-12
sql server 臨時(shí)表 查找并刪除的實(shí)現(xiàn)代碼
考慮使用表變量而不使用臨時(shí)表。當(dāng)需要在臨時(shí)表上顯式地創(chuàng)建索引時(shí),或多個(gè)存儲(chǔ)過程或函數(shù)需要使用表值時(shí),臨時(shí)表很有用。通常,表變量提供更有效的查詢處理。2008-12-12
sqlserver 中ntext字段的批量替換(updatetext的用法)
在Sql Server 中,ntext/text/image 字段不允許應(yīng)用replace函數(shù)替換內(nèi)容2009-09-09
SQL?SERVER常用的日期與時(shí)間查詢總結(jié)
這篇文章介紹了SQL?SERVER常用日期與時(shí)間查詢的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
sqlserver數(shù)據(jù)庫(kù)使用存儲(chǔ)過程和dbmail實(shí)現(xiàn)定時(shí)發(fā)送郵件
這篇文章主要介紹了sqlserver數(shù)據(jù)庫(kù)存儲(chǔ)過程和Job實(shí)現(xiàn)定時(shí)從數(shù)據(jù)庫(kù)發(fā)送郵件的功能,大家參考使用吧2014-01-01

