Sql-Server

SQL Server 複製,是否可以對某些文章進行“僅上傳”同步?

  • May 11, 2019

在 SQL Server 的合併複製中,我知道如何使發布的文章僅下載(無論是否對訂閱者數據庫有更新限制) - sp_addmergearticle 中的@subscriber_upload_options 參數,或 SSMS 的 GUI 中的相應選項。

我想要實現的是某些文章的相反行為。因此,在同步期間,源自訂閱者一側的記錄會傳送到發布者,而不是相反。並且在發布者上所做的更新不會同步回訂閱者,而在訂閱者上所做的更新確實會發送給發布者。即與僅下載文章完全相反。

這有可能實現嗎?使用複制的“標準”配置選項還是使用一些手動技巧?

您可以添加一個過濾器,如:0 = 1,文章變為僅上傳

您可以使用設置組合。關鍵問題是在同步時,預設設置是刪除並重新創建您的文章。

您可以通過編輯這些變數來阻止它:

@pre_creation_cmd = ‘none’

您也可以強制刪除或截斷。

然後,由於快照沒有刪除任何值,您可能必須在同步之前確保結構正確。

您可以通過 sp_changemergearticle 執行此操作:

@creation_script = ‘<yourpathtocreationscript.sql>’

這應該引用您在創建合併發佈時應該從發布者自動化的腳本。有一個選項可以將發布步驟添加到發布中,您可以在其中編寫 ETL 腳本以將值保持在適當位置。

您可以通過兩種方式對 sp_addmergepublication 過程執行此操作:

@pre_snapshot_script = ] 'pre_snapshot_script'

或者

@post_snapshot_script = ] 'post_snapshot_script'

腳本(腳本的文件位置)可用於首先將訂閱者數據儲存到臨時表中,然後將數據重新插入合併表中。

此時,很明顯,如果您願意,您根本不必使用 @pre_command_cmd 參數。我只是向您展示您擁有的所有選項。

此外,由於這是一個合併複製,如果您希望訂閱者更改數據但不將其上傳到發布者,請在 sp_addmergearticle 中使用此選項:

@subscriber_upload_options = 1

2 防止任何更改。

sp_addmergearticle - Microsoft Docs

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