描述:資料庫A中的表table1,實時同步到資料庫B

1、在資料庫A中設定訪問資料庫B的連結伺服器。

2、在兩個資料庫之間表中,選擇一個表,對其新增、刪除、修改操作設定觸發器,通過觸發器實現資料同步到其他資料庫的表。

-建立觸發器,同步遠端表_新增操作
CREATE TRIGGER SYN_RemoteTable_Insert
   ON Table
   AFTER INSERT
AS
BEGIN
    SET NOCOUNT ON;

    INSERT [vRemoteTable]    SELECT * FROM inserted

END
GO

--建立觸發器,同步遠端表_同步操作
CREATE TRIGGER [dbo].[SYN_RemoteTable_Update]
   ON Table
   AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;

    UPDATE vRemoteTable set ID=u.ID,Name=u.Name
   FROM inserted u where u.ID=vRemoteTable.ID

END

--建立觸發器,同步遠端表_刪除操作
CREATE TRIGGER [dbo].[SYN_RemoteTable_Delete]
   ON Table
   AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;

DECLARE @ID int;
select top 1 @ID=IsNull(ID,-1) from deleted;
delete   vRemoteTable   where   [email protected]
END
GO

1.        雙方啟動MSDTC服務
MSDTC服務提供分散式事務服務,如果要在資料庫中使用分散式事務,必須在參與的雙方伺服器啟動MSDTC(Distributed Transaction Coordinator)服務。

2.        開啟雙方135埠
MSDTC服務依賴於RPC(Remote Procedure Call (RPC))服務,RPC使用135埠,保證RPC服務啟動,如果伺服器有防火牆,保證135埠不被防火牆擋住。  

使用“telnet IP 135 ”命令測試對方埠是否對外開放。也可用埠掃描軟體(比如Advanced Port Scanner)掃描埠以判斷埠是否開放。

3.        保證連結伺服器中語句沒有訪問發起事務伺服器的操作
在發起事務的伺服器執行連結伺服器上的查詢、檢視或儲存過程中含有訪問發起事務伺服器的操作,這樣的操作叫做環回(loopback),是不被支援的,所以要保證在連結伺服器中不存在此類操作。

4.        在事務開始前加入set xact_abort ON語句
對於大多數 OLE DB 提供程式(包括 SQL Server),必須將隱式或顯示事務中的資料修改語句中的 XACT_ABORT 設定為 ON。唯一不需要該選項的情況是在提供程式支援巢狀事務時。

5.        MSDTC設定
開啟“管理工具――元件服務”,以此開啟“元件服務――計算機”,在“我的電腦”上點選右鍵。在MSDTC選項卡中,點選“安全配置”按鈕。

在安全配置視窗中做如下設定:

l選中“網路DTC訪問”

l在客戶端管理中選中“允許遠端客戶端”“允許遠端管理”

l在事務管理通訊中選“允許入站”“允許出站”“不要求進行驗證”

l保證DTC登陸賬戶為:NT   Authority/NetworkService

6.        連結伺服器和名稱解析問題
建立連結sql server伺服器,通常有兩種情況:

l第一種情況,產品選”sql server”

EXEC sp_addlinkedserver

   @server='linkServerName',

   @srvproduct = N'SQL Server'

這種情況,@server (linkServerName)就是要連結的sqlserver伺服器名或者ip地址。

l第二種情況,訪問介面選“Microsoft OLE DB Provider Sql Server”或“Sql Native Client”

EXEC sp_addlinkedserver  

   @server=' linkServerName ',

   @srvproduct='',

   @provider='SQLNCLI',

   @datasrc='sqlServerName'

這種情況,@datasrc(sqlServerName)就是要連結的實際sqlserver伺服器名或者ip地址。

Sql server資料庫引擎是通過上面設定的伺服器名或者ip地址訪問連結伺服器,DTC服務也是通過伺服器名或者ip地址訪問連結伺服器,所以要保證資料庫引擎和DTC都能通過伺服器名或者ip地址訪問到連結伺服器。

資料庫引擎和DTC解析伺服器的方式不太一樣,下面分別敘述

6.1       資料庫引擎
第一種情況的@server或者第二種情況的@datasrc設定為ip地址時,資料庫引擎會根據ip地址訪問連結伺服器,這時不需要做名稱解析。

第一種情況的@server或者第二種情況的@datasrc設定為sql server伺服器名時,需要做名稱解析,就是把伺服器名解析為ip地址。

有兩個辦法解析伺服器名:

一是在sql server客戶端配置中設定一個別名,將上面的伺服器名對應到連結伺服器的ip地址。

二是在“C:/WINDOWS/system32/drivers/etc/hosts”檔案中增加一條記錄:

xxx.xxx.xxx.xxx   伺服器名

作用同樣是把伺服器名對應到連結伺服器的ip地址。

6.2       DTC
不管哪一種情況,只要@server設定的是伺服器名而不是ip地址,就需要進行名稱解析,辦法同上面第二種辦法,在hosts檔案中增加解析記錄,上面的第一種辦法對DTC不起作用。

如果@server設定的是ip地址,同樣不需要做域名解析工作。

  .