快速,持续,稳定,傻瓜式
支持Mysql,Sqlserver数据同步

Sql server同步数据到oracle

请联系QQ:1793040 索取软件

是因为个很奇葩的需求,因为新开发的功能还没有上线,需要临时做个老库和新库数据同步的功能,因为老程序跑着一版.net的,用的sqlserver2008数据库,新库用的oracle,新版程序没有上线,数据就想展示在线上,因此,要做个老库和新库的同步程序。

老库sqlserver 是2008,新库oracle是12c

用到了sqlserver2008的”链接服务器”功能,以此来做dblink,我在网上找了很久很久,实在是找不到可用的资料,链接上了远程数据库还是会有数据库无法访问oracle的分布式事务的错误,很难受,最后是无意中了解到Oracle的分布式事务是一个ODAC的包,oracle装在linux上,linux上可没有什么MSDTC,MSDTC配置也是sqlserver链接sqlserver的。

无法执行远程事务的错误如下图

由图可知,如果是不正确的方法链接了oracle数据库,即使可以查询数据,也会在需要执行事务的时候出现这个问题,又怎么实现同步数据呢?

还有一个奇怪的问题,在sql界面是可以执行事务的,在触发器中却不可以,那怎么行,就是得用触发器呢。

首先,在slqserver服务器上安装oracle的ODAC,做分布式事务管理之用

在这里可以找到需要的ODAC包,还包含了客户端等等,这下可方便了不少。https://www.oracle.com/technetwork/topics/dotnet/downloads/odacdev-4242174.html

下载完毕之后解压缩,长这个样,运行setup.exe进行安装

这里的操作就很简单了

安装完毕之后,他会告诉你tnsnames.ora的路径,修改为你的oracle数据库的一些连接信息。注意圈起来的地方是别名,后面有用

打开sqlserver管理器

在链接服务器上右键,新建链接服务器

关于这几个框,

连接服务器名:随便写,想叫什么叫什么

访问接口:选Oracle这个驱动,在你安装完oracle的客户端后自动出现的

产品名称:写Oracle

数据源:上面红框圈起来的那个,就是你在tnsnames.ora配置的链接别名

访问接口字符串:在链接服务器的访问接口下,这个OraOLEDB.Oracle的这个

安全性这里配置

选最后一个使用此安全上下文建立链接,输入你的oracle数据库账号密码

服务器选项:将RPC这两项选为True,默认是False

点击”确定”完成链接服务器创建。

刚才创建的链接服务器就出现在连接服务器列表中了。接下来在刚才我们说的”访问接口”,在OraOLEDB.Oracle右键”属性”打开此界面,在”允许进程内”这里打钩,确定。这个不配置的话创建链接服务器会报错。这个应该在创建连接服务器之前配置的。

数据同步采用了触发器,insert,update,delete,使用还算方便

在sqlserver数据库中,找到需要同步的表,新建触发器,这里在test表这建立触发器


然后执行,就得到了可以同步数据的触发器。

更新,删除也是同理,

更新触发器

删除的我没用,是这样的

DELETE OPENQUERY (Oracle, ‘SELECT name FROM TEST.test WHERE id=”123456”’);

关于OpenQuery的语法。可参考sqlserver官网:

https://docs.microsoft.com/en-us/sql/t-sql/functions/openquery-transact-sqlview=sql-server-2017

这样就完成了这个数据的同步。

是不是简单又清晰,也不太难的过程,我怎么就没找到个这种帖子呢?

有什么问题请留言,我会定期查看账号。

相关推荐

咨询软件
 
QQ在线咨询
售前咨询热线
QQ1793040