1. 程式人生 > >血淚經驗分享--->SQL Server 2012建立連結伺服器

血淚經驗分享--->SQL Server 2012建立連結伺服器

現在我有一個需求是需要在兩個不同的SQL SERVER 2012的伺服器之間進行資料訪問和更新。我們需要把Server One的資料插入到Server Two的伺服器上去,一天執行一次任務。我們的首選方案是在兩個伺服器之間建立連結伺服器,下面介紹下如何建立連結伺服器。我需要做的事情是,我需要定時的全量的把Server one的資料插入到Server Two裡去。所以這裡就涉及到需要把Server Two裡的表的資訊做刪除操作,由於我們都知道delete表是需要記錄日誌,他是為了回滾用的。所以要記錄詳細的日誌。由於我此表比較大,而且每天都做一次刪除,我也不需要寫日誌。所以我不想用delete操作,我想用truncate來刪除表。這就是故事的有趣的點。

如何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操作.