文章參考百度過的文章,現在忘了具體哪篇,感謝其分享,這裡根據自己的操作和遇到的問題整理一下。
需求:在兩個不同的SQL SERVER 2012的服務器之間進行數據訪問和更新。我們需要把SourceData的數據插入到TargetData的服務器上去,一天執行一次任務。我們的首選方案是在兩個服務器之間建立鏈接服務器。
操作:定時全量的把SourceData的數據插入到TargetData裡去。這裡涉及到需要把TargetData裡的表的信息做刪除操作,由於delete表需要記錄詳細的日志 (用於回滾),而當表比較大時,而且每天都做一次刪除會產生龐大的日志數據占用內存,所以這裡不采用delete操作,而用truncate來刪除表。
兩個服務器的配置:
Server one: DB Version: 2012 Server IP: 192.168.2.200 Souce Database
Server two: DB Version: 2012 Server IP: 192.168.1.56 Target Database
我們可以在任意一個服務器上建立鏈接服務器,但是是有區別的。區別體現在處理數據的時候。
方法一:在源數據庫服務器上建立一個鏈接服務器,讓源數據庫主動的把數據push到目標數據庫中。
1、在源數據庫服務器上建立鏈接服務器。【服務器對象】-【鏈接服務器】-右鍵【新建鏈接服務器(N)...】-【常規】(如下圖)
注 意:鏈接服務器IP:192.168.1.65是目標數據庫,建立這個鏈接服務器准備直接訪問192.168.1.65的服務器上的數據庫表。由於這裡是 SQL SERVER 2012 到SQL SERVER 2012數據庫,所以服務器類型選擇SQL Server。
2、選擇【安全性】設置登錄用戶和密碼,添加一個本地服務器登錄到遠程服務器的登錄映射。然後【確定】(如下圖)
3、這時可以看到了一個192.168.1.56的鏈接服務器。右鍵【測試連接(T)】(如下圖)
4、如果出現如下對話框則說明配置正確(如下圖)
在源數據庫服務器上建立一個job主動的把數據push到目標數據庫裡去。
5、新建立作業:【SQL Server 代理】-【作業】-右鍵【新建作業(N)...】
6、在【常規】中為作業起個名稱(如下圖)
7、點擊【步驟】,然後點擊【新建(N)...】創建作業步驟(如下圖)
8、編輯步驟(如下圖),然後【確定】
從源數據庫push數據到目標數據庫的sql語句:
truncate table [192.168.1.56].TargetData.[dbo].[TargetTable]
go
insert into [192.168.1.56 ].TargetData.[dbo].[TargetTable ] select * from SourceData.[dbo].[SourceTable]
go
9、新建作業計劃(如下圖),然後【確定】
10、最終【確定】就可以了(如下圖)
11、執行SQL JOB,右鍵點擊剛新建的作業【PushDataToTarget】-【作業開始步驟(T)...】(如下圖)
12、結果出現下面的問題(如下圖)
13、然後去查看日志右鍵點擊【PushDataToTarget】-【查看歷史記錄(V)】(如下圖)
=============================================================
方法二:在目標數據庫服務器上建立一個鏈接服務器,讓目標數據庫主動的把數據pull到源數據庫中。
1、創建鏈接服務器 參照上方的方法,並測試鏈接成功。然後在目標數據中新建作業,如下圖
2、新建步驟(如下圖)
從源數據庫pull數據的sql語句:
truncate table TargetData.[dbo].[TargetTable]
go
insert into TargetData.[dbo].[TargetTable ] select * from [192.168.2.200].SourceData.[dbo].[SourceTable]
go
3、新建計劃(如下圖)
4、最終【確定】
5、右鍵點擊【PullDataFromSource】-【作業開始步驟(T)...】
6、執行結果如下
7、再查看日志如下
8、表明執行結果是成功的。從上面的操作中可以總結出:
鏈接服務器的兩個特點:
1.通過鏈接服務器不能刪除(including truncate)鏈接源服務器的任何對像.
2:能過鏈接服務器可以對鏈接源服務器的表進行insert,updae,delete操作.
2015.10.30 10:26 willem SqlServer2012 數據庫同步的兩種方式(SQL JOB + 建立鏈接服務器)