Sql-Server

如何將新行從源伺服器發送到目標伺服器?

  • January 27, 2021

語境

我們有一個 SQL Server“源”,每天將 10M 行插入到一個表中。沒有更新。我想將新行發送到“目標”伺服器,然後在磁碟空間有限的源上刪除那些(遲早)。PK 是單調遞增的標識列。

(已編輯:我忘了提,目標伺服器大多處於離線狀態)

問題

除了基於管理已發貨的 PK 範圍的程序化導出導入之外,還有更有效的解決方案嗎?我的 DBA 知識非常有限,我的第一個想法是使用簡單的恢復模型進行差異備份,然後是恢復模型已滿的一些日誌傳送,但我認為這兩種情況下,“源”上的刪除都將應用於我所做的“目標”不想發生。

聽起來在這種情況下,一個更簡單的解決方案可能最適合您,例如安排一個每日SQL 代理作業目標數據庫的表INSERTS INTO從您的源表中需要 1000 萬行。如果您總是在將源表中的那 1000 萬行發送到目標表後刪除它們,那麼這聽起來像是一個非常簡單的語句。INSERT

您必須遠端INSERT INTO訪問目標表,這可以通過多種方式完成,例如使用連結伺服器和/或OPENQUERY.

如果目標伺服器離線,您的SQL 作業的一部分將需要根據您自己的重試/中止邏輯來管理異常。

您可以玩的一件事是Transactional Replication。複製過程(代理;日誌讀取器)嗅探事務日誌並基於此生成 DML 命令,然後將這些 DML 命令應用於訂閱伺服器。您可以決定是否“運送”DELETE,例如在配置複製時。

OTOH,人們可能會認為複制“亂扔”您的 SQL 伺服器,並且它還對源數據庫施加了一些限制(關於您可以執行的 DDL)。因此,在將它應用到生產伺服器之前,請確保您使用它並讓自己對它感到滿意。

自己滾動可以被認為是“更清潔”的解決方案。但是您會花費更多時間來開發該解決方案。SQL Server 中可能對您有所幫助的功能是更改跟踪(自上次檢查以來修改了哪些行)和更改數據擷取(進行了哪些修改……)。

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