Sql-Server
使用 SSIS 優化 2 台伺服器之間的大型數據集同步
我在不同的伺服器上有兩個數據庫,伺服器 A 和伺服器 B。兩者都是 SQL Server。我需要使第二個數據庫與第一個數據庫保持同步。數據庫架構和表是相同的,但是伺服器 A 會定期創建伺服器 B 上缺少的新記錄。我決定使用 SSDT 工具中包含的 SQL Server 集成服務。
將伺服器 B 與伺服器 A 同步的最簡單方法是在 Visual Studio 中創建 SSIS 項目,該項目將生成
Package.dtsx
.這是該軟體包目前的功能
- 創建引用伺服器 A 的 OLE DB 源
- 創建引用伺服器 B 的 OLE DB 目標
- 選擇需要同步的特定表
- 在伺服器 A 和伺服器 B 之間為該表創建列映射
Package.dtsx
在 SSMS 中,添加每 15 分鐘執行一次的 SQL Server 作業這個包似乎從伺服器 A 下載所有記錄並嘗試將它們插入伺服器 B。
問題
- 伺服器 B 上可能已經存在一些記錄。有沒有辦法只插入伺服器 B 上缺少的記錄,以防止日誌中出現關於重複主鍵的一堆錯誤?
- 伺服器 A 可能有很多記錄。有沒有辦法在同步開始之前獲取伺服器之間的差異,也許有一些動作可以通過 ID 比較記錄並只下載伺服器之間的差異?
你想在你的 SSIS 包中添加一個“查找”操作符。此包將“檢查”某些列(例如您的 PK),然後您將能夠僅對失去的行採取措施。
關於您下載密鑰的想法,您可以將 PK 從 ServerB 到 ServerA 的初始數據流設置為永久臨時表或臨時表。SSIS 中的臨時表使用需要一些努力,因為您需要在您將保存臨時表的 ServerA 的連接對像上啟用保留相同連接,最初使用全域臨時表(使用##)進行開發,以便它在您的開發工作期間可見並使用繞過驗證/延遲驗證,以便 SSIS 在臨時表不可見時不會引發錯誤(臨時表 BTW 應在初始數據流之前使用執行 SQL 任務創建) . 下載後,您可以在 ServerA 上本地比較密鑰,並且只將新密鑰發送到 ServerB。