Sql-Server
使用批量刪除/創建更新實現高可用性的 SQL Server 策略
擁有一個生產 SQL Server 2017 數據庫,該數據庫使用來自我們無法控制的另一個來源的 sqoop 每晚填充。希望在不關閉應用程序的情況下完全同步某些表(現在我們更新插入,但這還不夠,因為原始數據源中有刪除)。數據量很小(十幾個表,個位數百萬行的記錄)
是否有一種複制策略可以讓我們實現這一目標?也許類似於擁有一對旋轉數據庫,在任何時間點,其中一個指向生產,另一個正在批量更新。
首先,不要放下桌子來執行此操作。你有兩個更好的選擇:
- 使用合併命令
- 在插入之前 TRUNCATE 表,不要 DROP 和 CREATE。
TRUNCATE…INSERT 模式的主要限制是權限,因為簡單的讀取或更新權限授予不允許 TRUNCATE。使用此命令需要表的 ALTER 權限。它還有一些其他特定限制,因為您不能使用 TRUNCATE IF:
- 該表由 FOREIGN KEY 約束引用(除非 FK 引用來自同一個表)
- 作為索引視圖參與者的表。
- 該表是事務或合併複製的來源。
如果表的這些條件都不成立,並且執行任務的登錄具有足夠的權限,那麼您可以使用 TRUNCATE…INSERT 處理。
MERGE 只需要插入、更新和刪除權限。在您了解正在發生的事情之前,語法可能會有點(輕描淡寫)令人困惑。但是,在網上快速搜尋會發現許多學習該命令的好教程。
您還可以在技術上為 DUI 更新編寫單獨的 DELETE、UPDATE 和 INSERT 命令。但是,這需要在顯式事務中,並且比不需要顯式在事務中的 MERGE 更難維護。