Sql-Server

使用批量刪除/創建更新實現高可用性的 SQL Server 策略

  • January 20, 2020

擁有一個生產 SQL Server 2017 數據庫,該數據庫使用來自我們無法控制的另一個來源的 sqoop 每晚填充。希望在不關閉應用程序的情況下完全同步某些表(現在我們更新插入,但這還不夠,因為原始數據源中有刪除)。數據量很小(十幾個表,個位數百萬行的記錄)

是否有一種複制策略可以讓我們實現這一目標?也許類似於擁有一對旋轉數據庫,在任何時間點,其中一個指向生產,另一個正在批量更新。

首先,不要放下桌子來執行此操作。你有兩個更好的選擇:

  1. 使用合併命令
  2. 在插入之前 TRUNCATE 表,不要 DROP 和 CREATE。

TRUNCATE…INSERT 模式的主要限制是權限,因為簡單的讀取或更新權限授予不允許 TRUNCATE。使用此命令需要表的 ALTER 權限。它還有一些其他特定限制,因為您不能使用 TRUNCATE IF:

  • 該表由 FOREIGN KEY 約束引用(除非 FK 引用來自同一個表)
  • 作為索引視圖參與者的表。
  • 該表是事務或合併複製的來源。

如果表的這些條件都不成立,並且執行任務的登錄具有足夠的權限,那麼您可以使用 TRUNCATE…INSERT 處理。

MERGE 只需要插入、更新和刪除權限。在您了解正在發生的事情之前,語法可能會有點(輕描淡寫)令人困惑。但是,在網上快速搜尋會發現許多學習該命令的好教程。

您還可以在技術上為 DUI 更新編寫單獨的 DELETE、UPDATE 和 INSERT 命令。但是,這需要在顯式事務中,並且比不需要顯式在事務中的 MERGE 更難維護。

引用自:https://dba.stackexchange.com/questions/257785