萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mssql數據庫 >> SQL Server數據庫同步問題

SQL Server數據庫同步問題

  我們可以通過數據復制跨局域網、Internet在不同的數據庫服務器上面維護多個數據的多個拷貝,同時以同步或異步的方式保證各個拷貝之間的數據一致性。

  SQL Server提供完善的內置數據復制能力,它是SQL Server核心引擎非常重要的一部分。

  SQL Server的復制分為三種方式:

  快照復制:在某個時間點對於出版數據庫中的數據照相,然後將其復制到定購服務器上。一般用於復制靜態表。

  事務復制:復制的內容是多條語句和存儲過程,這樣定購數據庫只是讀取數據庫的數據修改方式,並且反映這種修改。一般用戶更新頻率較高的數據庫。

  合並復制:允許定購者和出版者的雙向修改,並將修改反映到雙方數據庫上。如果數據有沖突,將會按照一定規則處理該沖突。

  目前單位有用到一個web網站,數據庫分別位於美國,荷蘭和深圳。在網站基礎架構上,我們使用的是3DNS和BigIP實現智能域名解析和負載均衡。但由於三地具備各自的數據庫(SQL Server),需要保證各個數據庫的數據一致。我們就需要做數據復制。根據用戶的要求我們做的是事務復制,在網站的前兩個版本都很正常,但在上兩周更新了web頁面版本後,發現事務復制經常出現錯誤。重新做事務復制在間隔不長的時間後仍然出現。後檢查錯誤日志發現提示:

  The query processor could not produce a query plan from the optimizer because a query cannot update a text, ntext, or image column and a clustering key at the same

  檢查數據庫表格,經過排查,確定存在問題的一個表格(XXX_article)。和程序員確認後發現此表格屬性變更為ntext類型,而且會同時更新此字段和此表的聚集索引欄位。

  因此,懷疑是由於在做事務復制時會同時修改這兩處位置造成,查閱相關的數據未能找到明確的官方說明,但是有其他程序的人員在程序編碼中發現類似問題,其解決方法是分成兩次update這個兩個欄位。具體的技術細節,未能得到明確的說明。在事務復制上我們無法干擾其過程,因此我們將不對xxx_article做事務復制。然後對於xxx_article做快照復制,這樣可以避免此問題的產生。經過測試和應用,此問題已經得到解決。

copyright © 萬盛學電腦網 all rights reserved