项目中用到两个DB,通过SQLServer的DBLink将MySQL连接起来查询 现想做到DB数据同步,就是当MySQL的数据变化时,同样将SQLServer的数据进行变动 目前有一想法,就是通过openquery创建一个view放在SQLServer这一边,然后在给这个view创建一个trigger来监视这个view的数据的改变,从而改变SQLServer的数据, 思路可行吗? |
|
#120分 |
|
#3 |
复制工具是SQL Server自带的工具,非第三方.参考 http://www.databasejournal.com/features/mssql/article.php/1438201/Setting-Up-Transactional-Replication-A-Step-by-step-Guide.htm
|
#4 |
刚刚尝试linkdb的table创建了一个view,然后又创建了一个view的trigger有以下两个结论
1.更新linkdb上面的table时,不会触发trigger 2.直接修改view,可以触发trigger,但是不会把数据同步到view对应的table里 |
#5 |
回复3楼: 你好,刚刚看了一下,这样的工具是不是对db结构有要求啊,比如publisher和subscriber两边的数据库表结构要一样之类的。 好像并不适合,我们这边可能需要一些逻辑来控制数据,然后插入 |
#6 |
回复3楼: 另外,现在这个具体情况,MySQL数据库是由一个系统(A)来控制的,SQLServer是另外一个系统(B), 想达到一个这样的目的,系统A的操作,使MySQL数据变化后,通过某种方式,直接影响到SQLServer这边,而且最好是即时的 |
#7 |
|
#8 |
回复7楼: 1.在MYSQL端建dblink连接到SQL Server. 这一点我也想到过,不过mysql有类似于SQLServer的db link吗?请赐教 |
#9 |
回复8楼: |
#10 |
回复9楼: 这样做的话输入主动去同步,还是要去触发的。 最好能够做到被动,也就是MySQL发送消息同步SQLServer 我也baidu了依稀,MySQL倒是有一个federated的存储引擎,不过貌似只支持MySQL对MySQL的,哎。 |
#11 |
|
#12 |
回复11楼: 好的,谢谢你的帮助了~ 另外再问你一个问题吧 根据A表创建了一个B视图,根据B视图又创建了一个C触发器,如果A表发生变动,C触发器会触发吗? 查了一些资料,说触发器的触发是由事件所引起的,如果我对A表更新,那么事件本身是发生在A表上的,理论上C触发器不会被触发,是这样的吧? |
#14 |
是不是可以考虑在客户端处理这样的业务
|
#15 |
回复14楼: 这样的话就要改代码了。而且涉及到的表的所有功能点都要改 |
#17 |
自己写个程序,监控日志的变化,然后把日志中记录的SQL语句转换成T-SQL在SQL SERVER中同时执行一次。
|