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