两台Sql Server数据库服务器间传数据
时间:2010-11-14 来源:bookcold
一. 配置分布式事务协调器
由于在两台数据库间写数据,必然涉及分布式事务的问题;因此,需要在两台运行着Sql Server的机子上配置分布式事务协调器。以下以Windows 7为例,其他操作系统配置方案类似。
1. 启动组件服务管理工具:开始菜单—>运行—>键入dcomcnfg.exe—>确定
2. 展开“组件服务”,展开“计算机”,展开“我的电脑”,右键点击本地DTC,选择“属性”。
3.在打开的对话框中,切换至“安全”选项卡,以下图方式配置相应选项
二. 建立链接数据库
数据库链接能够让本地的一个 SQLserver 登录用户映射到远程的一个数据库服务器上,并且像操作本地数据库一样。
可以通过下面两句Sql语句实现建立链接数据库的功能
exec sp_addlinkedserver '链接名称','','SQLOLEDB','链接数据库IP' exec sp_addlinkedsrvlogin '链接名称','false',null,'用户名','密码'
详细看参考:http://www.cnblogs.com/firstyi/archive/2007/08/09/849494.html 和 http://tech.it168.com/a2009/0205/264/000000264544.shtml
这是,可以随便写个select语句试试是否成功,假如无法查询,则尝试在两台机的host文件中添加对方的IP和机器名,并且记得关闭防火墙再试
三.编写存储过程
至此就可以开始写插入链接数据库的存储过程了,这一步则相对简单,根据自身需要编写。我在项目中所使用的存储过程如下:
Create proc P_DBSync as begin declare @device_id char(20) declare @error int --错误数 set @error=0 -- SET XACT_ABORT ON will cause the transaction to be uncommittable -- when the constraint violation occurs. set XACT_ABORT on --声明游标 declare invoice_cursor insensitive cursor for select [DeviceID] from Device open invoice_cursor begin tran while @@FETCH_STATUS = 0 --遍历表 begin fetch next from invoice_cursor into @device_id insert into link.demo.Device select * from Device where DeviceID=@device_id set @error=@@error+@error insert into link.demo.DeviceParameter select * from DeviceParameter where DeviceID=@device_id set @error=@@error+@error end if @error=0--没有错误统一提交事务 begin commit tran--提交 CLOSE invoice_cursor--关闭游标 DEALLOCATE invoice_cursor--释放游标 return 1 end else begin rollback tran--回滚 CLOSE invoice_cursor DEALLOCATE invoice_cursor
return 0 end
至此,从一个库导数据至另一个库的工作就基本完成了;当然以上方案有个问题,有一条记录出错,则所有的插入操作都会回滚,以后继续改进。
相关阅读 更多 +