文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>两台Sql Server数据库服务器间传数据

两台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.htmlhttp://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

至此,从一个库导数据至另一个库的工作就基本完成了;当然以上方案有个问题,有一条记录出错,则所有的插入操作都会回滚,以后继续改进。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载