測試環(huán)境及同步要求:
有數(shù)據(jù)庫服務(wù)器srv1和srv2,兩臺電腦能互相訪問,有數(shù)據(jù)
srv1.庫名..author有字段:id,name,phone,
srv2.庫名..author有字段:id,name,telphone,adress
要求:
srv1.庫名..author增加記錄則srv1.庫名..author記錄增加
srv1.庫名..author的phone字段更新,則srv1.庫名..author對應(yīng)字段telphone更新
--*/
--大致的處理步驟
--1.在 srv1 上創(chuàng)建連接服務(wù)器,以便在 srv1 中操作 srv2,實現(xiàn)同步
******************************注 意****************************************
***以dba用戶執(zhí)行以下兩句腳本,(注意只有dba用戶有權(quán)限執(zhí)行以下腳本)***
exec sp_addlinkedserver 你的數(shù)據(jù)庫連接名字 ,'','SQLOLEDB',你的數(shù)據(jù)庫url及端口
exec sp_addlinkedsrvlogin 你的數(shù)據(jù)庫連接名字,'false',null,數(shù)據(jù)庫用戶名,數(shù)據(jù)庫用戶密碼
**************************************************************************
exec sp_addlinkedserver 'srv2','','SQLOLEDB','srv2的sql實例名或ip'
exec sp_addlinkedsrvlogin 'srv2','false',null,'用戶名','密碼'
go
--2.在 srv1 和 srv2 這兩臺電腦中,啟動 msdtc(分布式事務(wù)處理服務(wù)),并且設(shè)置為自動啟動
我的電腦--控制面板--管理工具--服務(wù)--右鍵 Distributed Transaction Coordinator--屬性--啟動--并將啟動類型設(shè)置為自動啟動
go
--3.實現(xiàn)同步處理
--a.在srv1..author中創(chuàng)建觸發(fā)器,實現(xiàn)數(shù)據(jù)即時同步
--新增同步
create trigger tr_insert_author on author
for insert
as
set xact_abort on
insert srv2.庫名.dbo.author(id,name,telphone)
select id,name,telphone from inserted
go
--修改同步
create trigger tr_update_author on author
for update
as
set xact_abort on
update b set name=i.name,telphone=i.telphone
from srv2.庫名.dbo.author b,inserted i
where b.id=i.id
go
--刪除同步
create trigger tr_delete_author on author
for delete
as
set xact_abort on
delete b
from srv2.庫名.dbo.author b,deleted d
where b.id=d.id
go
sp_addlinkedserver
創(chuàng)建一個鏈接的服務(wù)器,使其允許對分布式的、針對 OLE DB 數(shù)據(jù)源的異類查詢進(jìn)行訪問。在使用 sp_addlinkedserver 創(chuàng)建鏈接的服務(wù)器之后,此服務(wù)器就可以執(zhí)行分布式查詢。如果鏈接服務(wù)器定義為 Microsoft® SQL Server?,則可執(zhí)行遠(yuǎn)程存儲過程。
語法
sp_addlinkedserver [ @server = ] 'server'
[ , [ @srvproduct = ] 'product_name' ]
[ , [ @provider = ] 'provider_name' ]
[ , [ @datasrc = ] 'da
[ , [ @location = ] 'location' ]
[ , [ @provstr = ] 'provider_string' ]
[ , [ @catalog = ] 'catalog' ]
參數(shù)
[ @server = ] 'server'
要創(chuàng)建的鏈接服務(wù)器的本地名稱,server 的數(shù)據(jù)類型為 sysname,沒有默認(rèn)設(shè)置。
如果有多個 SQL Server 實例,server 可以為 servername\instancename。此鏈接的服務(wù)器可能會被引用為下面示例的數(shù)據(jù)源:
SELECT *FROM [servername\instancename.]pubs.dbo.authors.
如果未指定 da
[ @srvproduct = ] 'product_name'
要添加為鏈接服務(wù)器的 OLE DB 數(shù)據(jù)源的產(chǎn)品名稱。product_name 的數(shù)據(jù)類型為 nvarchar(128),默認(rèn)設(shè)置為 NULL。如果是 SQL Server,則不需要指定 provider_name、da
[ @provider = ] 'provider_name'
與此數(shù)據(jù)源相對應(yīng)的 OLE DB 提供程序的唯一程序標(biāo)識符 (PROGID)。provider_name 對于安裝在當(dāng)前計算機(jī)上指定的 OLE DB 提供程序必須是唯一的。provider_name 的數(shù)據(jù)類型為nvarchar(128),默認(rèn)設(shè)置為 NULL。OLE DB 提供程序應(yīng)該用給定的 PROGID 在注冊表中注冊。
[ @datasrc = ] 'da
由 OLE DB 提供程序解釋的數(shù)據(jù)源名稱。da
當(dāng)鏈接的服務(wù)器針對于 SQL Server OLE DB 提供程序創(chuàng)建時,可以按照 servername\instancename 的形式指定 da
[ @location = ] 'location'
OLE DB 提供程序所解釋的數(shù)據(jù)庫的位置。location 的數(shù)據(jù)類型為 nvarchar(4000),默認(rèn)設(shè)置為 NULL。location 作為 DBPROP_INIT_LOCATION 屬性傳遞以便初始化 OLE DB 提供程序。
[ @provstr = ] 'provider_string'
OLE DB 提供程序特定的連接字符串,它可標(biāo)識唯一的數(shù)據(jù)源。provider_string 的數(shù)據(jù)類型為 nvarchar(4000),默認(rèn)設(shè)置為 NULL。Provstr 作為 DBPROP_INIT_PROVIDERSTRING 屬性傳遞以便初始化 OLE DB 提供程序。
當(dāng)針對 Server OLE DB 提供程序提供了鏈接服務(wù)器后,可將 SERVER 關(guān)鍵字用作 SERVER=servername\instancename 來指定實例,以指定特定的 SQL Server 實例。servername 是 SQL Server 在其上運行的計算機(jī)名稱,instancename 是用戶連接到的特定的 SQL Server 實例名稱。
[ @catalog = ] 'catalog'
建立 OLE DB 提供程序的連接時所使用的目錄。catalog 的數(shù)據(jù)類型為sysname,默認(rèn)設(shè)置為 NULL。catalog 作為 DBPROP_INIT_CATALOG 屬性傳遞以便初始化 OLE DB 提供程序
上面可以在Transact-SQL幫助里找到
例子:
1.如果要訪問的計算機(jī)名稱為new(同局域網(wǎng)內(nèi)可以共享訪問,計算機(jī)名字規(guī)則)
sp_addlinkedserver 'new'
select * from new.pubs.dbo.jobs
2.如果要訪問的計算機(jī)ip是192.168.100.189(計算機(jī)名稱不和sql語法(可以在我的電腦屬性里修改)或要訪問的是一個靜態(tài)ip或域名)
--添加遠(yuǎn)程sql服務(wù)器
sp_addlinkedserver 'new', ' ', 'MSDASQL', NULL, NULL,
'Driver={SQL Server};Database=hjdb;Server=192.168.100.189;UID=sa;PWD=;'
select * from new.pubs.dbo.jobs
補(bǔ)充:sp_helpserver 顯示所有鏈接的服務(wù)器信息
sp_dropserver 刪除鏈接服務(wù)器的定義