通过触发器实现数据库的即时同步方案

通过触发器实现数据库的即时同步方案

一、实现目的

为了实现不同数据库表之间的数据即时同步更新,采用触发器事务处理,可以保证数据更新的安全性和同步性。

 

二、实现步骤

假设本地数据库服务器为A,远程数据库服务器为B

1、  首先要开通本地数据库服务器和远程数据库服务器的MSDTC服务,可以手工开通,也可以通过程序进行开通,如下:

--------------------------------------------

远程:EXEC master..xp_cmdshell 'isql /S"A" /U"sa" /P"" /q"exec master..xp_cmdshell ''net start

本地:EXEC master..xp_cmdshell 'net start msdtc',no_output

--------------------------------------------

2、  A建立远程数据库的ODBC连接,如下:

--------------------------------------------

USE master
   
   
GO
   
   
EXEC sp_addlinkedserver 
   
   
   'SvrTest',    --SvrTest为链接服务器名称
   
   
   '', 
   
   
   'MSDASQL',
   
   
   NULL,
   
   
   NULL,
   
   
   'DRIVER={SQL Server};SERVER=B;UID=sa;PWD=;'    --UID为可以访问目标数据库的用户帐号
    
    
GO
   
   

--------------------------------------------

EXEC sp_serveroption ' SvrTest ', 'rpc', 'TRUE'      --启用RPC

EXEC sp_serveroption ' SvrTest ', 'rpc out', 'TRUE'   --启用RPC

--------------------------------------------

3、  可以写您需要的触发器来操作远程数据库表,这里有三种方式

①、OpenQuery(Linked Server,’query’)   -- Linked Server就是上面所设置的SvrTest,query为具体的SQL操作语句

②、OpenRowSet('provider_name',{'datasource' ; 'user_id' ; 'password'| 'provider_string' }, { [ catalog.] [ schema.] object | 'query' })

具体例子为:delete from openrowset('sqloledb','xz';'sa';'',test.dbo.test)
 where id in(select id from deleted)

③、如果是操作远程数据库的存储过程,则不可以用上面的两个方法,可以直接调用链接服务器名.数据库名.dbo.存储过程名,这个方式也可以直接用于表的调用。

 

三、实例演示

下面以A(远程数据源)和B(本地数据源)机器为例,实现通过B的DataBase2数据库的Web_RegInfo表的插入触发器来即时同步更新A的DataBase1的Corinfo表和ProductReg表:

1、确认开通A和B的MDDTC是否开通。

2、在B开通A的ODBC连接:

3、在B上的DataBase2数据库的Web_RegInfo表写插入触发器,如下:

4、  插入数据库测试和显示测试结果

 

四、其它补充说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值