iT邦幫忙

0

SQL SERVER 交易式複寫進階技巧(二) : 略過複寫指令並執行下一批次指令

  • 分享至 

  • xImage
  •  

本篇會分享交易式複寫執行中指令發生錯誤時 , 使用其他方法暫時排解錯誤得以讓後續的指令繼續正常運行。

直接進入重點 ↓↓↓
環境 :

發行資料庫 : GAME
訂閱資料庫 : report
資料表名稱 : USERS_INFO
  1. 已建立好的交易式複寫 , 來源與目的表目前的資料。
    https://ithelp.ithome.com.tw/upload/images/20250714/20169860vOVRK6vaQ4.png

  2. 模擬某一次意外發生 , 誤刪了report的Sarah資料 , 但沒有人發現。
    https://ithelp.ithome.com.tw/upload/images/20250714/20169860jX3N3cEHaR.jpg

  3. 此時這次在GAME要將Sarah資料執行UPDATE才發現問題 , 目的表找不到Sarah , 而未散發的指令卻開始累積...
    https://ithelp.ithome.com.tw/upload/images/20250714/20169860HdKovGzOmY.png
    https://ithelp.ithome.com.tw/upload/images/20250714/20169860PYGk5GbH1n.png
    https://ithelp.ithome.com.tw/upload/images/20250714/20169860PrTkibSc9s.jpg

小結一下 , 目前我們遇到麻煩了 ,
UPDATE來源表時, 目的表的資料不知道什麼原因找不到資料導致複寫指令無法順利進行下去 , 若還原資料庫並找到Sarah正確的資料也要一段時間 , 而這段時間我必須損失複寫失敗的成本 , 要是指令成千上萬後後果不堪設想。

OK 我們除了補上資料外今天和各位分享一招略過複寫指令的方法 , 這個方法是"暫時的"解決問題 , 最後還是要去了解為何資料會憑空消失 , 以下我們開始來找出這筆指令實際的模樣吧。

  1. 找出目前正在執行且失敗的指令 , 我們實際要的東西是xact_seqno這個欄位的值 , 它代表著這筆指令。
    https://ithelp.ithome.com.tw/upload/images/20250714/20169860gGl73d5ZKo.jpg
    https://ithelp.ithome.com.tw/upload/images/20250714/20169860eqlng4QF4h.png

  2. 查出該筆指令實際的樣貌。
    https://ithelp.ithome.com.tw/upload/images/20250714/20169860l7EfeUsg4e.jpg
    https://ithelp.ithome.com.tw/upload/images/20250714/20169860EOXO8rtJds.jpg

  3. 指定目前指令要從哪裡開始 , 我們把原本找到的數值進一位。

https://ithelp.ithome.com.tw/upload/images/20250714/20169860eks6Q8EsTN.png

  1. 執行該指令 , 略過該筆指令執行下一筆 , 讓後續的指令可以順利執行 , 未散發的指令也清空了 , 結果讓人滿意。
    https://ithelp.ithome.com.tw/upload/images/20250714/20169860eSAENDAkhA.png
    https://ithelp.ithome.com.tw/upload/images/20250714/20169860WWp6HTj1HE.png

結論 :
雖然這暫時略過的撇步還不錯用 , 但實際上還是要去了解問題本身出在哪裡 , 一般來說訂閱端的資料是不會去做更動的 , 一切交由發行這邊來控制 , 對資料庫還不熟悉的朋友這個方法也不推薦使用 , 若本篇對各位有幫助或是又學到一招密技那是皆大歡喜 , 若有錯誤請直接指正謝謝。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言