血淚經驗分享--->SQL Server 2012建立連結伺服器
阿新 • • 發佈:2019-02-19
現在我有一個需求是需要在兩個不同的SQL SERVER 2012的伺服器之間進行資料訪問和更新。我們需要把Server One的資料插入到Server Two的伺服器上去,一天執行一次任務。我們的首選方案是在兩個伺服器之間建立連結伺服器,下面介紹下如何建立連結伺服器。我需要做的事情是,我需要定時的全量的把Server
one的資料插入到Server Two裡去。所以這裡就涉及到需要把Server Two裡的表的資訊做刪除操作,由於我們都知道delete表是需要記錄日誌,他是為了回滾用的。所以要記錄詳細的日誌。由於我此表比較大,而且每天都做一次刪除,我也不需要寫日誌。所以我不想用delete操作,我想用truncate來刪除表。這就是故事的有趣的點。
b,編輯步驟 我從源資料庫push資料到目標資料庫的sql語句是: truncate table [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH]
go
insert into [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH] SELECT * FROM BI.DBO.[BIU8_GL_ACCVOUCH]
go
go
insert into BI.[dbo].[BIU8_GL_ACCVOUCH] SELECT * FROM [192.168.21.252].BI.DBO.[BIU8_GL_ACCVOUCH]
go
go
insert into BI.[dbo].[BIU8_GL_ACCVOUCH] SELECT * FROM [192.168.21.252].BI.DBO.[BIU8_GL_ACCVOUCH]
go
如何SQL Server 2012建立連結伺服器
兩個伺服器的配置: Server one: DB Version: 2012 Server IP: 192.168.21.252 Souce Database Server two: DB Version: 2012 Server IP: 192.168.25.210 Target Database 我們可以在任意一個伺服器上建立連結伺服器,但是是有細微的區別的,下面看我在處理資料的時候遇到的問題,此問題讓我瞭解到在任意一個伺服器上建立連結伺服器是有區別的。方法一:我在源資料庫伺服器上建立一個連結伺服器,我想讓源資料庫主動的把資料push到目標資料庫中。
1,建立連結伺服器
在源資料庫伺服器上建立連結伺服器如下: 注意:連結伺服器IP:192.168.25.210是我的目標資料庫,建立的這個連結伺服器就想直接訪問192.168.25.210的伺服器上的資料庫表。由於我是SQL SERVER 2012 到SQL SERVER 2012資料庫,所以伺服器型別選擇SQL Server。 需要新增一個本地伺服器登入到遠端伺服器的登入對映。 這個時候我們看到了一個192.168.25.210的連結伺服器了。 可以測試下連結伺服器是否連結成功。2, 在源資料庫伺服器上建立一個job主動的把資料push到目標資料庫裡去。
a, 新建立作業b,編輯步驟 我從源資料庫push資料到目標資料庫的sql語句是: truncate table [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH]
go
insert into [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH] SELECT * FROM BI.DBO.[BIU8_GL_ACCVOUCH]
go
c,新建作業計劃
我修改了下計劃的執行時間,讓他立馬執行下這個job.下面問題來了。如下圖:
下面我把job裡的指令碼放到查詢分析器裡執行了下,執行結果讓我很迷茫。如下圖:
從上圖的錯誤提示可以看出這個語句是有問題的不可以這麼執行的。 但是這個語句的語法是沒有錯的。truncate table [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH],我一開始懷疑是否不可以這麼執行SQL 語句,如是我執行了下面的語句
從上面可以看出連結資料庫的寫法是正確的,因為delete from [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH]刪除目標資料庫的表示成功的。因為我說了,我不想用delete來刪除資料表,這樣會產生很多的日誌的。我希望用truncate刪除資料。於是我用方法二來再做一次。
方法二:我在目標資料庫伺服器上建立一個連結伺服器,我想讓目標資料庫主動地從源資料庫中把資料pull到自己的資料庫中。
1,在目標庫伺服器上(192.168.25.210)建立連結伺服器,連線伺服器(192.168.21.252)如下圖,具體步驟請參考上面的方法。
2,測試連結伺服器是否連結成功
3,在目標資料庫伺服器上建立一個job主動的把源資料庫的資料pull到自己的資料庫裡來。關於如何建立job的細節可以參考上面的步驟。
4,新建立作業名:pull_data_from_target_db
5,具體的作業步驟程式碼如下圖:
我從目標資料庫pull源資料庫的sql語句是: truncate table BI.[dbo].[BIU8_GL_ACCVOUCH]go
insert into BI.[dbo].[BIU8_GL_ACCVOUCH] SELECT * FROM [192.168.21.252].BI.DBO.[BIU8_GL_ACCVOUCH]
go
6,新建立作業計劃
7,檢視job的執行情況如下圖:
從上面2014/12/19 9:48:02就是我剛才執行的,它成功的執行了job。可以看出下面的語句是執行成功的。 truncate table BI.[dbo].[BIU8_GL_ACCVOUCH]go
insert into BI.[dbo].[BIU8_GL_ACCVOUCH] SELECT * FROM [192.168.21.252].BI.DBO.[BIU8_GL_ACCVOUCH]
go
所以從上的操作中可以得出如下的非常重要的結論:
連結伺服器有兩個特點:
1:通過連結伺服器不能刪除(including truncate)連結源伺服器的任何對像.
2:能過連結伺服器可以對連結源伺服器的表進行insert,updae,delete操作.