实现SQL Server数据同步更新-均为SQL Server服务器 |
Windows Xp环境下,实现两台SQL Server数据同时更新,详细步骤: 1、 DB Server 环境 SQL Server安装版本为SQL Server 2000 SP4 2、 运行Services.msc,查看DTC(Distributed Transaction Coordinator)服务 A) 启动DTC服务 B) 属性->登录选项卡->确保登录名为(NT AUTHORITY/ NetworkService) 1. 如登录身份为 <本地系统> 2. 运行CMD->NET STOP MSDTC->MSDTC uninstall(删除MSDTC) 3. Regedit->查找并删除 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSDTC 4. 运行CMD->MSDTC Uninstall(安装MSDTC) 5. 运行CMD->NET START MSDTC 6. CHECK MSDTC登录身份为 NetworkService 帐户 3、 运行Dcomcnfg.exe 打开组件服务(控制面板->管理工具->组件服务) 展开组件服务->计算机->我的电脑->属性->MSDTC->事务配置(安全性配置) 在 安全配置 对话框中, 单击以 选中网络 DTC 访问 复选框 要允许分布式事务在此计算机上运行从远程计算机, 请单击以选中 允许入站 复选框 要允许分布式事务在远程计算机上运行从此计算机, 请单击以选中 允许出站 复选框 事务管理器通信 组, 下单击以选择 不要求进行验证 选项 在 安全配置 对话框中, 单击 确定 确定即可 4、 运行Firewall.cpl(运行防火墙) 选中 例外 选项卡->添加程序->浏览找到MSDTC.exe文件(默认路径:Drive/windows/system32)->程序和服务列表中选中MSDTC->添加端口 ->端口号文本框中输入:135->选择TCP选项->名称对话框输入 异常名称->确定 当然关闭防火墙也可 5、 运行regedit->HKEY_LOCAL_MACHINE/SOFTWARE/MICROSOFT/MSSQLSERVER/PROVIDERS/SQLOLEDB->除了’AllowInProcess’键值为1,其余均为0 利用Linked Server实现Trigger同步更新 1、 建立Linked Server A)Enterprise Management Local SQL Server->安全性->链接服务器->右键(新建链接服务器)
B)T-SQL EXEC sp_addlinkedserver 'test','','SQLOLEDB','test',null,'driver={sql server};server=ipaddress;uid=sa,pwd=;' 建立Linked Server @server = 'server' -------常用 exec sp_serveroption N'test', N'rpc out', N'true' 配置Linked Server 选项 @server “Linked server” exec sp_serveroption N'test', N'rpc', N'true' exec sp_addlinkedsrvlogin 'test','False',null,'sa','' 添加Login @rmtsrvname “Linked server” 3、 Trigger编写 A)建立好Linked Server,在查询分析器中Test Select * from [Linked Server Name]. [DB Name]. dbo. [Table Name] Insert into [Linked Server Name]. [DB Name]. dbo. [Table Name] Values(‘’,’’,’’,’’,……) B)在 Local Table 上建立Trigger CREATE TRIGGER TR_insert ON [dbo].[Local_Table] FOR INSERT AS begin set xact_abort on insert into [Linked Server Name]. [DB Name]. dbo. [Table Name] select * from inserted end
利用OpenRowSet()函数实现Trigger同步更新 直接编辑Trigger(保证MSDTC可用) CREATE TRIGGER TR_insert ON [dbo].[Local_Table] FOR INSERT AS begin set xact_abort on insert into openrowset('MSDASQL','DRIVER={SQL Server};SERVER=IP Address ;UID=sa;PWD=sa Password', Northwind.dbo.test) select * from inserted end |