企業管理器 → 複寫 → 發行集 → 右鍵屬性 → 執行代理程式 → 排程設為每分鐘執行。
檢查 C:\Program Files\Microsoft SQL Server\MSSQL\REPLDATA\unc\... 目錄下是否每分鐘產生時間命名資料夾。
或直接查詢訂閱端資料庫確認資料表已同步。
環境:遠端伺服器 xz (sa/無密碼),本地同步至遠端。
表結構:本地 [user](id, number, name, state),state:NULL=新增、1=修改、0=同步済。
觸發器維護 state:UPDATE ... SET state=1 FROM ... JOIN inserted。
建立連結伺服器 srv_lnk 指向 xz。
CREATE PROC p_synchro AS
-- BEGIN DISTRIBUTED TRANSACTION (若需跨伺服器交易)
-- 同步刪除:遠端有但本地無
DELETE FROM srv_lnk.test.dbo.[user]
WHERE id NOT IN (SELECT id FROM [user]);
-- 同步新增:本地 state IS NULL
INSERT INTO srv_lnk.test.dbo.[user] (id, number, name)
SELECT id, number, name FROM [user] WHERE state IS NULL;
-- 同步修改:本地 state = 1
UPDATE srv_lnk.test.dbo.[user] SET
number = b.number,
name = b.name
FROM srv_lnk.test.dbo.[user] a
JOIN [user] b ON a.id = b.id
WHERE b.state = 1;
-- 重設本地標誌
UPDATE [user] SET state = 0 WHERE ISNULL(state,1) = 1;
-- COMMIT TRAN
GO
EXEC msdb..sp_add_job @job_name = N'資料同步';
EXEC msdb..sp_add_jobstep @job_name = N'資料同步', @step_name = N'同步執行',
@subsystem = N'TSQL', @command = N'EXEC p_synchro',
@retry_attempts = 5, @retry_interval = 5;
EXEC msdb..sp_add_jobschedule @job_name = N'資料同步', @name = N'每日零點',
@freq_type = 4, @freq_interval = 1, @active_start_time = 0;