1.分别建立链接对数据库进行操作,SQLServer可以用ADO.NET,操作Oracle可以用OLEDB或者用System.Data.OracleClient(需要添加引用才能用)

  这种方案的优点就是简单,各自写各自的数据库操作代码,缺点就是不能将两个数据库中的表直接进行联合查询,链接Oracle的每台机器必须安装OracleClient才可以使用。

2.使用同义词操作Oracle数据库。

  这种方法的具体操作我在以前的文章中已经写清楚了,这样做一来可以进行表的联合查询二来不需要每台机器都安装OracleClient,但是还是有一个缺点:效率低,比如对同义词使用like去查找需要的数据,如果是直接连Oracle数据库也许只要0.1秒就可以找到答案,但是用同义词可能就要等10秒20秒或更久。原来SQLServer并不是直接把查询语句传递给Oracle,让Oracle执行操作,而是将所有数据都取到SQLServer服务器上,边取数据边分析,直到满足查询条件为止。其实这种数据放在两个服务器上还有一个缺点就是一旦Oracle服务器宕机,即使我们这边的所有服务器都是好的,那么我们的程序中用到Oracle数据的地方就无法使用。

3.直接链接Oracle数据库+同义词+作业+异常跳转 方式。

  这种方法具体讲就是我们的程序直接用OLEDB(OracleClient)链接Oracle数据库,同时SQLServer服务器也建立了同义词指向Oracle,在SQLServer上建立作业,将同义词中的数据拷贝到SQLServer服务器的表中。一旦Oracle宕机,程序中就会捕捉到异常,于是就使用SQLServer中的数据。这样做比较复杂,需要一定的编程,效率也不是特别高,但是优点也是明细的,平时链接Oralce服务器,异常情况下链接SQLServer中的备份数据,保证了程序的正常运行。

4.直接编写一个程序,以服务或自启动方式一直运行,每隔一段时间将Oracle数据库中的数据写到SQLServer数据库中。

  这种方法就是编程复杂,具有很大难度。

5.利用SQLServer2005的复制功能将Oracle数据库中的数据同步到SQLServer服务器中,程序只操作SQLServer,不链接Oracle数据库。

  这种方法不需要编写任何代码,由于只对SQLServer进行查询,所以查询效率高可以做多表链接,开发人员也不需要再装OracleClient,也不用害怕Oracle服务器宕机导致我们的相关程序无法使用。优点倒是很多,那么有没有缺点拉?缺点还是有的,主要是取得的数据不是实时的数据,Oracle那边的数据更新了,我们这边还有可能是老数据。

  前面的四种方法我就不用多讲了,这次主要是讲第五种方法的具体实现:

1.安装SQLServer复制功能。

  在安装SQLServer数据库的时候选上“复制”,将“复制”功能安装到服务器。微软说如果第一次安装的时候没有装,以后再想添加该功能只需要运行安装程序将“复制”选上就可以了,不过说是这么说,我试了几次都不行,我也不知道怎么回事,为了安装上复制,所以将SQLServer卸载了,重新安装!这种方法很笨,不过我实现想不出其他办法了,希望高手指点。

2.设置Oracle服务器端的权限。

  创建一个用于复制用的用户,授予下列权限:

CREATE PUBLIC SYNONYM 和 DROP PUBLIC SYNONYM

CREATE PROCEDURE

CREATE SEQUENCE

CREATE SESSION

  还必须直接为用户授予下列权限(不是通过角色):

CREATE ANY TRIGGER。

CREATE TABLE

CREATE VIEW

  同时该用户还必须对要发布的表所在表空间有UNLIMITED的权限,还要针对每个要用于同步的表设置Select权限。

3.SQLServer服务器上安装OracleClient10g

  必须安装了才可以链接Oracle服务器,不推荐安装Oracle9i,即使我们要链接的Oracle是9i的。安装完成以后重启SQLServer服务器。用PLSQL或其他工具测试一下是否可以链接到Oracle服务器。

4.设置SQLServer Agent权限

  在SQLServer服务器上 新建用户,将该用户加为管理员,在“服务”中找到“SQLServer Agent”,将其启动用户改为该用户,重启该服务。

5.配置分发

  打开ManagementStudio右键“复制”节点,选中“配置分发”,按向导一步一步操作,将快照文件夹路径指定为一个专门的共享文件夹,其他都不用修改,完成配置分发。

6.添加Oracle发布

  右键“本地发布”->“新建Oracle发布”,启动Oracle发布向导,添加Oracle服务器,将在Oracle服务器上新建的用户密码输入,一直下一步,选快照发布,选中需要发布的表,选中“立即创建快照发布”和“计划运行快照代理”,计划时间就自己根据需要设定,“快照代理”选择“代理服务帐户”,发布名称填写需要的名称,比如“Test1”,然后点击完成。这样就完成了发布工作。

7.添加Oracle订阅

  右键“本地订阅”->“新建订阅”运行向导,选中刚才新建的Test1发布,一般选中“推送订阅”,指定要订阅的数据库(比如:mis),也就是要用来存储Oracle数据的数据库,订阅属性中选中用SQLServer代理用户运行,代理计划“连续运行”,初始化时间“立即”,然后创建订阅完成。

  这个时候我们打开订阅的数据库mis,我们可以看到其中添加了Oracle发布出来的表,而且这些内容会按照计划隔段时间同步Oracle数据一次。

  到此我们的同步完成。

8.测试是否同步成功

  用PLSQL往Oracle中写入数据,修改数据,删除数据,如果发布时候选中的是每一分钟运行快照代理一次,那么隔一分钟后,我们再去打开SQLServer中的表,我们可以看到其中的内容和Oracle一样进行了变化。

PS:在“本地发布”下选中我们的发布,右键,“查看代理运行状态”可以看到我们的发布是否成功。

MSSQL复制功能实现与Oracle数据库同步的更多相关文章

  1. Oracle数据库同步方案

    Oracle数据库同步方案 1. 利用数据泵导出每表前2000行数据 expdp tvpay2/tvpay directory=dmp dumpfile=20170508.dmp include=ta ...

  2. 愚公oracle数据库同步工具

    最近,利用一些时间对oracle数据库实时同步工具做了一些调研分析,主要关注了linkedin的databus和阿里的yugong两个中间件,其中databus需要在每个待同步的表上增加额外的列和触发 ...

  3. 不同服务器数据库之间的数据定时同步到sql server (支持mysql,oracle数据库同步到sql server)

    1,在目标数据库新增服务器对象->连接到服务器->新建服务器连接 2,编写数据同步业务PROC ALTER PROC TestProc AS BEGIN --打开完全事物回滚 SET XA ...

  4. Oracle数据库迁移到AWS云的方案

    当前云已经成为常态,越来越多的企业希望使用云来增加基础设施的弹性.减轻基础设施的维护压力,运维的成本等.很多企业使用云碰到的难题之一是如何将现有的应用迁移到云上,将现有应用的中间件系统.Web系统及其 ...

  5. 关于oracle数据库压力测试

    今天接到需求,需要对oracle数据库进行压力测试,就这几个字的需求. 然后查看了以下软件: 1.Benchmark Factory是一款专业的服务器性能测试工具,专为数据库测试和可扩展性测量而设计, ...

  6. 通过MSSQL连接服务器连接至Oracle数据库

    前言 有很多时候,我们需要MSSQL与Oracle进行跨库查询或数据交互.本篇随笔将阐述如何通过MSSQL的连接服务器连接至Oracle数据库,并且读取数据的示例. 具体步骤 首先需要到Oracle的 ...

  7. Oracle数据库数据同步方案

    一.比较原始的方案:触发器/Job/快照+dblink的方式,可实现同步和定时刷新: 二台不同的数据库服务器,从一台数据库服务器A的一个用户读取另一台数据库服务器B下某个用户的数据,可以通过dblin ...

  8. linux/windows系统oracle数据库简单冷备同步

    linux/windows系统oracle数据库简单冷备同步 我们有一个财务系统比较看重财务数据的安全性,同时我们拥有两套系统,一个生产环境(linux),一个应急备份环境(windows).备份环境 ...

  9. MySQL和MsSQL实时自动同步---SyncNavigator 数据库同步软件

    需要MySQL数据库支持的狐友们有福了,MySQL和MsSQL实时自动同步---SyncNavigator 数据库同步软件   使用SyncNavigator轻松实现数据库异地同步.断点续传.异构同步 ...

随机推荐

  1. KnockoutJS(1)-数据模型

    前言 说到数据模型(ViewModel),就不得不提到MVVM模式,接触过WPF和Silverlight的人应该对这个模式比较熟悉. 不熟悉也没多大关系,因为KnockoutJS的使用相对简单. MV ...

  2. WCF、Web API、WCF REST、Web Service之区别

    http://www.dotnet-tricks.com/Tutorial/webapi/JI2X050413-Difference-between-WCF-and-Web-API-and-WCF-R ...

  3. Node.js 【CORS(cross origin resource sharing) on ExpressJS之笔记】

    app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*" ...

  4. Demo学习: ClientInfo

    ClientInfo 获取客户端环境参数,从0.9版本开始新增了TUniClientInfoRec对象,可以得到客户端的一些信息,之前为了获取浏览器版本号需要自己写函数,现在可以直接使用TUniCli ...

  5. Spark Streaming揭秘 Day10 从BlockGenerator看接收数据的生命周期

    Spark Streaming揭秘 Day10 从BlockGenerator看接收数据的生命周期 昨天主要介绍了SparkStreaming中对于Receiver的生命周期管理,下面让我们进入到Re ...

  6. butterknife7.0.1使用

    1.官网:http://jakewharton.github.io/butterknife/ Introduction Annotate fields with @Bind and a view ID ...

  7. Google code: Why ‘Everything up-to-date’ when pushing (git)

    原文链接:http://blog.rexzhao.com/2011/11/28/google-code-git-everything-up-to-date-when-push.html 第一次在Goo ...

  8. CPU使用率

    CPU使用率 事故回放 当时的情况是那个样子的: 1,正值饭点,客户电话说系统慢,几乎无法完成订单调度,有时还显示内存不足.当时心里的第一个声音就是,服务器配置太低了,远程一看,2核4G内存,cpu平 ...

  9. hdu 4710 Balls Rearrangement()

    http://acm.hdu.edu.cn/showproblem.php?pid=4710 [code]: #include <iostream> #include <cstdio ...

  10. tcpprep 对IPV6的支持

    在采用tcpreplay对包实施回放前,需要对包执行预处理,tcpprep就是完成这个任务的.tcpprep要做的处理就是生成一个cache文件,根据tcpprep wiki的介绍http://tcp ...