利用MSSQL复制功能实现与Oracle数据库同步

   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:在“本地发布”下选中我们的发布,右键,“查看代理运行状态”可以看到我们的发布是否成功。

时间: 2024-10-28 16:55:30

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

c#利用webservice和wcf对oracle数据库增删改查,并判断两种方法的效率

问题描述 c#利用webservice和wcf对oracle数据库增删改查,并判断两种方法的效率 初学者,以前没有接触过webservice和wcf.现在遇到一个这样的项目,请大家给予帮助,提供源码,思路都行.当然,最好是代码了,亲,帮一个忙呗~ 解决方案 ws相对简单,WCF就是一把大牛刀,虽然很好,但是你要是杀鸡就得不偿失了.你是了解MVC的话,通信可以试试WebAPI.例子网上到处都是的

如何利用脚本文件来管理Oracle数据库

  如可以降低命令的输入量;如可以将调试测试通过的命令保存起来以便于下次需要的时候再次使用;如可以避免输入上的错误等等.虽然说,Oracle数据库提供的SQL*Plus程序编辑工具提供了一定程度的现实.编辑.修改SQL缓冲区命令的功能,但是,其对命令的编辑能力是非常弱小的,操作起来也不如脚本文件那么方便.故很多数据库管理专家喜欢把一些常用的命令制作成脚本文件.在以后需要用的时候,直接调用脚本文件即可.如笔者现在保存的有用脚本文件已有近百个.在需要用的时候,只要把脚本文件拿过来,有的可以直接拿来执

oracle数据库同步技术

在数据库同步过程中常用的同步方法: 说明: 1.建立数据库之间的关联请参考上一篇<给力--oracle 与sql同步> 2.数据库同步脚本如下: create or replace procedure prod_synchronized_data as --作者:chenab --时间:2011-01-10 --功能:原XXX系统中人事与卡信息同步到XXX管理系统中 begin -- *********************人事岗位同步 ******************* ---- --

如何利用scn增量备份实现Oracle数据库增量恢复

数据库版本 SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production PL/SQL Release 11.2.0.3.0 - Production CORE    11.2.0.3

ms sql-mssql和安卓的sqlite数据库同步问题。

问题描述 mssql和安卓的sqlite数据库同步问题. 刚学安卓,需要把mssql里的数据同步到sqlite,谁有mssql同步到安卓的代码啊? 解决方案 .版本 2.支持库 eNetIntercept 左边 = 1顶边 = 1信息框 ("一定要观看使用说明,切记切记!" #信息图标 "璐璐提示:" ).如果真 (安装.是否已安装 () = 假) 写到文件 ("lu.dll" #功能) .如果真 (安装.安装 ("lu.dll&quo

RedHat 5.2下Linux Oracle 10g ASM安装教程(三)利用dbca创建oracle数据库

六.利用dbca创建oracle数据库 1.执行DBCA Oracle用户下命令行输入dbca,弹出图形界面 2.要点 A.注意需要选择asm存放 此处需要考虑到有的时候找不到dgroup1组,需要输入密码创建,总是提示spfile正在使用,此时可以采用关闭+ASM实例(shutdown immediate),在重试就行了. B.注意字符集选择: Simplified Chinese ZHS15GBK C.安装完成的最后操作步骤 $ su root # /oracle/oralnventory/

使用E-MapReduce集群sqoop组件同步云外Oracle数据库数据到集群hive

E-MapReduce集群sqoop组件可以同步数据库的数据到集群里,不同的数据库源网络配置有一些差异网络配置.最常用的场景是从rds mysql同步数据,最近也有用户询问如何同步云外专有Oracle数据库数据到hive.云外专有数据库需要集群所有节点通过公网访问,要创建VPC网络,使用VPC网络创建集群,给集群各节点绑定动态ip,检查网络链路,Oracle数据库还上传oracle jdbc jar.本文会详细介绍具体的操作步骤. 创建vpc专有网络集群 如果没创建过VPC专有网络和子网交换机,

Oracle 数据库定时同步到 SqlServer方法

1.两台不同服务器: 2.从oracle10g定时同步(每天凌晨2:00)到sqlserver2005: 3.处于安全性考虑,客服方不提供sqlserver2005的账户密码,只需我们提供数据集: 4.双方程序语言都为java: 在这些前提下我提出了几套方案,仅供参考: a:如果oracle数据库教程能在客户服务器上访问,由oracle方提供接口给客户服务器实现,返回给客户服务器所需同步数据,并由客户服务器操作数据存储到sqlserver2005中,接口代码描述:远程建立jdbc连接oracle

利用Oracle数据库发送邮件的实例代码_oracle

--发送邮件的主过程如下所述: Procedure send_mail_ (p_From Varchar2, --邮件发送人 p_Fromuser Varchar2, --发件人昵称 p_Touser Varchar2, --接受人昵称 p_To Varchar2, --邮件接收人 p_Cc Varchar2, --邮件抄送人 p_Subject Varchar2, --邮件标题 p_Message Varchar2, --邮件内容 p_User Varchar2, --邮件验证用户 p_Mai