首页 > 代码库 > 触发器实现跨服务器

触发器实现跨服务器

原文:http://blog.sina.com.cn/s/blog_59c41d0d0100esja.html

最进在做项目时遇到了一个比较棘手的问题,有两个数据库分别部署在不同的服务器上,系统要求两个服务器实现数据同步操作即热备份,于是就不能不用到SQL触发器这一武器了,当初也考虑了几种解决方案:比如程序中同时操作两个库或写一个外挂程序执行数据库定时任务,但这些方案需要频繁的连接数据库,特别是有张实时数据的表,每天都会产生海量的数据,程序中频繁定时的查询操作势必严重影响系统运行效率,都没有触发器批处理语句来的更直接些,所以最终决定使用触发器实现。

对触发器操作我们一般在同一库中表用的表频繁,不同的跨数据库操作就比较少,现在要实现跨服务器执行触发器操作,简直不感想象,仔细研究了一下,原来触发器跨服务器是可以的。

首先:在SQL中执行以下存储过程语句:
exec sp_addlinkedserver ‘RemoteServer ‘, ‘ ‘, ‘SQLOLEDB ‘, ‘192.168.18.23‘ ---创建服务器连接
exec sp_addlinkedsrvlogin ‘RemoteServer ‘, ‘false ‘,null, ‘sa‘, ‘123456789‘ --创建登陆
sp_dropserver ‘RemoteServer ‘,‘droplogins‘--删除服务器连接和登陆
说明:执行系统存储过程 sp_addlinkedserver添加远程服务器,参数RemoteServer 是为远程服务器取的引用名,可随便写;‘192.168.18.23‘ 为你要操作的远程服务器地址,执行系统存储过程 sp_addlinkedsrvlogin 添加远程服务器登录身份验证,调用sp_dropserver可移除远程服务器注册信息。参数‘RemoteServer 和‘droplogins‘也可只写一个。

其次:做好上一步准备之后还需要将服务中远程分布式服务启动,以实现SQL跨服务器操作,这是微软在实现远程服务器所必需的。右键点击“我的电脑”--“管理”--“服务和应用程序”--“服务”---启动“Distributed Transaction Coordinator”服务,启动分布式服务后还要打开远程服务器以及本地服务器135端口,因为远程分布式服务需要该端口通讯。
1:打开“控制面板”--“管理工具”--“组件服务”
2:在“计算机”下右击“我的电脑”--“属性”--选择“MSDTC”选项卡
3:点击“安全性配置”按钮,
4:网络DTC访问勾选上,允许远程客户端,允许远程管理,允许入站,
允许出站,不要求身份验证勾选上。
注意:以上步骤需要两台服务器都要配置。

到此位置配置准备工作就可以完成了,下面就可以写一个触发器去执行操作远程服务器上的表了。这样本地服务器上的每一个数据操作增删改都会及时同步到远程服务器数据库中。

触发器实现跨服务器