Sql-Server
使用來自另一台伺服器的新記錄定期更新表
我在兩台不同的伺服器上有數據庫。我需要定期從伺服器 A 上的表中檢索新記錄,並處理它們以使用它們更新伺服器 B 上的表(具有不同的模式)。
我打算為此使用觸發器,但如果失敗,伺服器 A 上的插入將回滾。表 A 上的插入不能失敗,因此伺服器 B 的更新需要盡可能地與此解耦。
我現在正在考慮在伺服器 B 上使用計劃儲存過程從伺服器 A 檢索結果並更新伺服器 B。這需要每 30 秒執行一次。
這種方法有什麼問題,還是有更好或更“正確”的方法來實現這一目標?
創建具有從伺服器 B 到伺服器 A 的讀取訪問權限的連結伺服器連接。在伺服器 B 上執行一個執行以下操作的程序:
- 檢查伺服器 B 上的表以辨識伺服器 A 中最後插入的記錄。希望您有一個自動遞增的主鍵 (int)。如果沒有,請尋找最大的“最後更新時間戳”。
- 連接到伺服器 A 並從伺服器 A 檢索大於此主鍵/時間戳的所有記錄
- 將這些新記錄插入伺服器 B。
我總是建議在任何類型的自動化系統中進行完整的錯誤擷取和程序日誌記錄。您需要知道它的行為方式,並且如果有任何問題,您需要得到警報。
我會將所有邏輯放在一個儲存過程中,使用連結伺服器從 A 連接到 B,並在完成處理後讓過程休眠 X 秒。
將儲存過程放入設置為連續執行的 SQL Server 作業中。它似乎一直在執行,但儲存過程大部分時間都在休眠。
**注意:**我創建作業以連續執行然後讓程序休眠(使用等待語句)的原因是為了防止作業歷史日誌中出現混亂。我實際上創建了按計劃(每分鐘)執行的作業,但是由於儲存過程處於休眠狀態,因此該作業永遠不會完成。你可以把它歸結為個人喜好。