在複製中,有的時候會出現訂閱端被人修改,導致發布端插入資料的時候主鍵衝突,這個時候我們要做的不是直接的初始化太過暴力,而對於生產環境來說,這樣的操作代價也會很大。下面會說幾種方法來處理衝突:
1、 檢視出錯的複製命令的具體內容
如果在複製監視器的訂閱詳細資訊中檢視分發**出錯資訊時,如果發錯發生在應用複製命令時,則可以看到類似資訊:
嘗試的命令:
if @@trancount > 0 rollback tran
(事務序列號:.......)
錯誤訊息:
違反了primary key 約束'%s'。不能在物件'%s'中插入重複鍵.
如下例子:
嘗試的命令:在上面我們可以看到事務的序列號為 : 0x0001d2a8000005d4002700000000 ,而衝突主鍵為:600001if@@trancount
>
0rollback
tran
(事務序列號:
0x0001d2a8000005d4002700000000,命令 id: 2
)錯誤訊息:
violation
ofprimary
keyconstraint
'pk_somasterextention
'. cannot insert duplicate key
in object '
dbo.somasterextention
'. the duplicate key value is (600001). (源: mssqlserver,錯誤號: 2627
)獲取幫助: http:
//help/
2627
violation
ofprimary
keyconstraint
'pk_somasterextention
'. cannot insert duplicate key
in object '
dbo.somasterextention
'. the duplicate key value is (600001). (源: mssqlserver,錯誤號: 2627
)獲取幫助: http:
//help/
2627
,但有的時候這個主鍵會不準確,當多個的時候也只是會顯示插入的第乙個主鍵。
我們可以通過以下語句來看一下有多少的事務
use可以看到以下結果:distribution
gosp_browsereplcmds
'0x0001d2a8000005d4002700000000
' ,'
0x0001d2a8000005d4002700000000
'
由上面可以看到是8條插入語句在發布庫執行。command 預設的命名規則是sp_ms+operation+schemaname+tablename ,可以通過下面這個查詢定位到具體表
declare可以看到@article_id
intset
@article_id=3
usedistribution
goselect
*from msarticles where article_id=
@article_id
解決方法是將刪除的行在訂閱中重新插入,主鍵就是sp_msins_dbosomasterextention裡的引數。
如果在訂閱端刪除資料,而發布端又更新資料的時候,複製也會報錯,如下:
嘗試的命令:2、 忽略複製失敗的命令if@@trancount
>
0rollback
tran
(事務序列號:
0x0001d2a8000005de001600000000,命令 id: 1
)錯誤訊息:
the row was
)獲取幫助: http:
//help/
20598
the row was
)獲取幫助: http:
//help/
20598
在複製監視器中可以選中發布伺服器 ---在 "操作 '"下拉列表中可以看到 "**配置檔案 "
可以看到**配置檔案屬性為:
可以在這個裡面進行配置來設定跳過錯誤,也就是把預設設定改為" continue on data consistency errors. " 如果設定之後沒有的話,可以把**重新啟動。在此不再舉例了。
3、 比較表中的資料差異
對於以上三種方式我提倡的是1和3,第二種方法不太提倡。
主主複製 主主複製時的主鍵衝突解決
大致思路 1 2臺伺服器都設定上二進位制日誌和relay日誌 2 都設定上replcation賬號 3 都設定對方為自己的master 主主複製下一定要注意避免的問題 同步衝突 例 create table stu id int primary key auto increment.2臺mysql地...
SVN中衝突的解決
本人使用svn的時間不是很長,在使用之前也僅僅是粗淺的了解過這個軟體。從今年的8月份開始,由於乙個專案使用eclipse 3.1,跨地域的開發,為了適應不同的開發人員處於不同的地理位置,因此我們使用svn作為團隊開發的管理工具。開始使用時,僅僅是邊學邊用,遇到不懂的地方再去查詢資料。今天由於有點時間...
解決Gradle中jar衝突
plain view plain copy 1.直接在configuration中排除 plain view plain copy configurations plain view plain copy dependencies 排除多個jar可以使用多個exclude 3.當然,我們也可以強制使...