跨数据库如何实现数据同步性?

pengfei_998 2013-09-30 09:42:11
跨数据库如何实现数据同步性?
比如:我在本地库中写存储过程,添加本地表会员卡数据,但服务器端的数据库的会员卡表也要同步更新,要么都失败,总之不能一边有一边没有?
应该用什么方法实现这一要求呢?
...全文
897 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
attilax 2013-10-02
  • 打赏
  • 举报
回复
看来得要自己写个小的分布式事务管理器了..
Cloud_Hero 2013-10-01
  • 打赏
  • 举报
回复
这种需求,官方推荐使用复制。在你的“本地”建立分发服务器,在“服务器端”建立订阅服务器。 如果你的数据要求一致性非常高,就需要数据库规划大师重新设计,把会员卡信息只保存在一个数据库,应用程序需要访问会员卡信息时就只能连接到这个数据库。
發糞塗牆 2013-09-30
  • 打赏
  • 举报
回复
guguda2008 2013-09-30
  • 打赏
  • 举报
回复
你这个需求本身就比较奇葩,先改本身数据库再修改服务器?一般是提交到服务器再返回修改信息更新本地吧
pengfei_998 2013-09-30
  • 打赏
  • 举报
回复
您直接说说可以吗?或者加我QQ:可以有偿服务。本人Q: 454482813
guguda2008 2013-09-30
  • 打赏
  • 举报
回复
怎么看起来像是数据库复制里的合并模式
pengfei_998 2013-09-30
  • 打赏
  • 举报
回复
引用 13 楼 DBA_Huangzj 的回复:
你按照这里的方法试试http://iamadba.blogspot.hk/2010/11/unable-to-begin-distributed-transaction.html
无法显示网页 您正在查找的页当前不可用。 网站可能遇到支持问题,或者您需要 调整您的浏览器设置。 什么情况,谷歌浏览器和IE都打不开??
發糞塗牆 2013-09-30
  • 打赏
  • 举报
回复
pengfei_998 2013-09-30
  • 打赏
  • 举报
回复
引用 11 楼 DBA_Huangzj 的回复:
异步的意思就是分两步来执行,那么第一步成功了,就提交了,第二步不成功,只会回滚第二步,所以不能保证,但是把整个操作都放到一个事务里面,一旦网络出问题,更新服务器的操作失败,那么就把更新本地的都撤销。
那就是说我直接用: begin tran 和rollback tran , commit tran 把INSERT 和UPDATE 都包裹在这里面了?? 但现在的问题是:执行这个过程时报下面这样的错误: 服务器: 消息 7391,级别 16,状态 1,过程 TEST,行 12 该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。 [OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ] OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。
發糞塗牆 2013-09-30
  • 打赏
  • 举报
回复
异步的意思就是分两步来执行,那么第一步成功了,就提交了,第二步不成功,只会回滚第二步,所以不能保证,但是把整个操作都放到一个事务里面,一旦网络出问题,更新服务器的操作失败,那么就把更新本地的都撤销。
pengfei_998 2013-09-30
  • 打赏
  • 举报
回复
访问肯定没有问题,但你能保证网络100%不出问题?或者其它不确定因素?如果是银行的话汇一笔1000万的款?分行更新了,总行没有更新,这会是什么情况????
發糞塗牆 2013-09-30
  • 打赏
  • 举报
回复
如果你的本地sqlserver可以访问远程服务器,那直接就可以了
pengfei_998 2013-09-30
  • 打赏
  • 举报
回复
再说了,就算写成 begin tran 还是报错?头都大了
pengfei_998 2013-09-30
  • 打赏
  • 举报
回复
引用 6 楼 DBA_Huangzj 的回复:
BEGIN DISTRIBUTED TRANSACTION 这个一定要用到吗?
我看别人的这样写的,且写了注释,我就这样写了,你的意思是:直接用:begin tran ?
發糞塗牆 2013-09-30
  • 打赏
  • 举报
回复
BEGIN DISTRIBUTED TRANSACTION 这个一定要用到吗?
發糞塗牆 2013-09-30
  • 打赏
  • 举报
回复
你是本地需要同步到服务器?如果这样的话,本地做个复制(replication)到服务器,这样本地更新了服务器自动实时同步,本地要是失败服务器也不会出现
pengfei_998 2013-09-30
  • 打赏
  • 举报
回复

CREATE  PROCEDURE TEST
as
begin
set ansi_warnings on
--   exec sp_addlinkedserver 'aaa',' ','SQLOLEDB','192.168.10.252'
--   exec sp_addlinkedsrvlogin 'aaa','false',NULL,'sa',''

--查询
set xact_abort on
--  begin tran  -- 
BEGIN DISTRIBUTED TRANSACTION  --开始异步事务
select * from  aaa.CYQT_SERVER.dbo.TEST
 insert into  aaa.CYQT_SERVER.dbo.TEST (A) values ('abcdefg') --添加远程表
 --      insert into  TEST2 (A) values ('abcdefg') --添加本地表
   commit tran
end
GO

这是我本地的存储过程代码,不加事务就可以成功,加了事务就报如下错误:


服务器: 消息 7391,级别 16,状态 1,过程 TEST,行 12
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。



pengfei_998 2013-09-30
  • 打赏
  • 举报
回复
DBA_Huangzj ,我也有此意,但这就涉及到分布式事务,我试了几次都失败了,在本地存储过程中,其它没有问题,加事务就失败了,能不能详细指导下???
發糞塗牆 2013-09-30
  • 打赏
  • 举报
回复
你把整个流程放到一个事务里面
ai_li7758521 2013-09-30
  • 打赏
  • 举报
回复
高级语言控制,插入会员信息时,分别向两个库中都保存,如果保存失败,那么删除刚保存的记录。
加载更多回复(2)

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧