如何跨Oracle数据库实现表级别的实时同步

时间:2022-01-18 12:24:27
有两个Oracle数据库,分别布置在不同的服务器上,系统均为windows2003;
这里暂且说成是一个主数据库和从数据库;
(1) 主数据库:oracle_A;
(2) 从数据库:oracle_B;
在oracle_A中有一个表table_A与oracle_B中的表table_B结构相同;

我是处在oracle_B,拥有一个用户可以访问oracle_A中的表table_A,该用户只拥有查询的权限;

我的问题的是,如何在oracle_A中表table_A发生变化时,进行及时更新同步到oracle_B的table_B中?

我现在的处理方式:

通过建立远程连接DBLink+JOB定时任务+存储过程的方式,实现了定时同步更新,但不能做到实时同步.

现在要求升级:

经理要求实现实时更新,大家有没有好的方法.简便一点的,最好具体一点,O(∩_∩)O谢谢.在线等....



27 个解决方案

#1


用触发器试试

#2


就一张表吗,搞个stream把

#3


引用 2 楼 sxq129601 的回复:
就一张表吗,搞个stream把
对就是一张表.

#4


引用 1 楼 A_A_apan 的回复:
用触发器试试
由于我只对oracle_A中的table_A表拥有查询功能,不就有增删改的权限.所以触发器没有写啊.还请指教.

#5


如果用触发器,一定要保证网络是实时通的,不然第二台机器断网的话,头一台机器的操作就会失败;

#6


引用 5 楼 wmxcn2000 的回复:
如果用触发器,一定要保证网络是实时通的,不然第二台机器断网的话,头一台机器的操作就会失败;
可以确保是实时通的,由于我只对oracle_A中的table_A表只拥有查询功能,不具有增删改的权限,所以触发器没有写啊.毕竟只有进行了增删改操作才可以触发更新同步操作.

还请指教.

#7


引用 2 楼 sxq129601 的回复:
就一张表吗,搞个stream把
使用stream,不是得对oracle_A也进行设置吗,现在我只拥有一个查询指定表权限的用户,还可以对oracle_A进行其他设置吗.求指点.

#8


引用 7 楼 javaee_sunny 的回复:
Quote: 引用 2 楼 sxq129601 的回复:

就一张表吗,搞个stream把
使用stream,不是得对oracle_A也进行设置吗,现在我只拥有一个查询指定表权限的用户,还可以对oracle_A进行其他设置吗.求指点.


这个要配置,只有查询不行,你就用job挺好的呀,如果数据量不大时间点定的短些

#9


引用 6 楼 javaee_sunny 的回复:
可以确保是实时通的,由于我只对oracle_A中的table_A表只拥有查询功能,不具有增删改的权限,所以触发器没有写啊.毕竟只有进行了增删改操作才可以触发更新同步操作.

还请指教.


嗯,按 2# 的思路,配置一个流吧 . Stream

#10


触发器。
gitter

#11


引用 8 楼 sxq129601 的回复:
Quote: 引用 7 楼 javaee_sunny 的回复:

Quote: 引用 2 楼 sxq129601 的回复:

就一张表吗,搞个stream把
使用stream,不是得对oracle_A也进行设置吗,现在我只拥有一个查询指定表权限的用户,还可以对oracle_A进行其他设置吗.求指点.


这个要配置,只有查询不行,你就用job挺好的呀,如果数据量不大时间点定的短些
在部署测试的过程中,oracle_A的table_A表中,只有一条数据,当时我把job的定时任务设成间隔是1分钟.在运转一段时间之后,电脑接近卡死状态.

我把job任务移除,设成时间间隔为1天,才慢慢好起来.

不清楚,是不是由于时间间隔太多.太耗性能引起的?

存储过程中的同步逻辑,我是这样写的:
(1) 删除oracle_b中的数据;
(2)向oracle_b表中,插入通过远程连接从oracle_a中查询到的数据.

#12


引用 6 楼 javaee_sunny 的回复:
Quote: 引用 5 楼 wmxcn2000 的回复:

如果用触发器,一定要保证网络是实时通的,不然第二台机器断网的话,头一台机器的操作就会失败;
可以确保是实时通的,由于我只对oracle_A中的table_A表只拥有查询功能,不具有增删改的权限,所以触发器没有写啊.毕竟只有进行了增删改操作才可以触发更新同步操作.

还请指教.


触发器是写在table_A上的。

#13


引用 11 楼 javaee_sunny 的回复:
Quote: 引用 8 楼 sxq129601 的回复:

Quote: 引用 7 楼 javaee_sunny 的回复:

Quote: 引用 2 楼 sxq129601 的回复:

就一张表吗,搞个stream把
使用stream,不是得对oracle_A也进行设置吗,现在我只拥有一个查询指定表权限的用户,还可以对oracle_A进行其他设置吗.求指点.


这个要配置,只有查询不行,你就用job挺好的呀,如果数据量不大时间点定的短些
在部署测试的过程中,oracle_A的table_A表中,只有一条数据,当时我把job的定时任务设成间隔是1分钟.在运转一段时间之后,电脑接近卡死状态.

我把job任务移除,设成时间间隔为1天,才慢慢好起来.

不清楚,是不是由于时间间隔太多.太耗性能引起的?

存储过程中的同步逻辑,我是这样写的:
(1) 删除oracle_b中的数据;
(2)向oracle_b表中,插入通过远程连接从oracle_a中查询到的数据.


如果只是针对新增、修改、删除操作的数据同步,没有涉及到业务逻辑的。可以在源库的表上建个物化日志,这样就记录了主键信息,然后存储过程针对这个物化日志去操作目标库数据库的表,最后删除物化日志。基本可以实现5秒内跑完。JOB定个10秒都没问题

#14


对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现

#15


引用 12 楼 jdsnhan 的回复:
Quote: 引用 6 楼 javaee_sunny 的回复:

Quote: 引用 5 楼 wmxcn2000 的回复:

如果用触发器,一定要保证网络是实时通的,不然第二台机器断网的话,头一台机器的操作就会失败;
可以确保是实时通的,由于我只对oracle_A中的table_A表只拥有查询功能,不具有增删改的权限,所以触发器没有写啊.毕竟只有进行了增删改操作才可以触发更新同步操作.

还请指教.


触发器是写在table_A上的。
是的,应该是写在table_A上,但是我没有对table_A表进行增删改操作的权限,也不允许赋予给我这样的权限.也正是因为这种原因,我不清楚如何去使用触发器的方式去完成实时同步.

#16


引用 14 楼 sych888 的回复:
对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
是的,我只需对table_B表,进行查询的操作.

#17


引用 14 楼 sych888 的回复:
对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
我在自己本地的数据库和虚拟机中的oracle数据库进行测试,使用同义词可以实现.

我对同义词的理解是,就相当于是一种映射,查询的时候,虽然查的是同义词,但实质是通过远程链接查的源数据.所以本地实质上并没有数据.不知这样理解是否准确.还请赐教.

另外,如果我的理解是正确的,我还想问,当源数据库,数据量小的时候,或许没有多大的问题,但当源数据量数据达到几十万条以上时,采用这种方式,会不会影响性能呢.

#18


引用 17 楼 javaee_sunny 的回复:
Quote: 引用 14 楼 sych888 的回复:

对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
我在自己本地的数据库和虚拟机中的oracle数据库进行测试,使用同义词可以实现.

我对同义词的理解是,就相当于是一种映射,查询的时候,虽然查的是同义词,但实质是通过远程链接查的源数据.所以本地实质上并没有数据.不知这样理解是否准确.还请赐教.

另外,如果我的理解是正确的,我还想问,当源数据库,数据量小的时候,或许没有多大的问题,但当源数据量数据达到几十万条以上时,采用这种方式,会不会影响性能呢.


请看13楼回复的物化日志的东西,我之前公司做过,上亿的表同步每秒可以同步1万条估计没问题。

#19


引用 17 楼 javaee_sunny 的回复:
Quote: 引用 14 楼 sych888 的回复:

对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
我在自己本地的数据库和虚拟机中的oracle数据库进行测试,使用同义词可以实现.

我对同义词的理解是,就相当于是一种映射,查询的时候,虽然查的是同义词,但实质是通过远程链接查的源数据.所以本地实质上并没有数据.不知这样理解是否准确.还请赐教.

另外,如果我的理解是正确的,我还想问,当源数据库,数据量小的时候,或许没有多大的问题,但当源数据量数据达到几十万条以上时,采用这种方式,会不会影响性能呢.

嗯,可以这么理解,本地只有定义,没有数据
不知道你都对这张表做什么业务操作,操作的频率,操作的时间
个人感觉通常情况下,几十万条,甚至上百万条数据,采用DBLINK+同义词,都是不错的办法

若是采用触发器,当源数据库的DML操作比较频繁时,效率影响比较明显

#20


引用 13 楼 sxq129601 的回复:
Quote: 引用 11 楼 javaee_sunny 的回复:

Quote: 引用 8 楼 sxq129601 的回复:

Quote: 引用 7 楼 javaee_sunny 的回复:

Quote: 引用 2 楼 sxq129601 的回复:

就一张表吗,搞个stream把
使用stream,不是得对oracle_A也进行设置吗,现在我只拥有一个查询指定表权限的用户,还可以对oracle_A进行其他设置吗.求指点.


这个要配置,只有查询不行,你就用job挺好的呀,如果数据量不大时间点定的短些
在部署测试的过程中,oracle_A的table_A表中,只有一条数据,当时我把job的定时任务设成间隔是1分钟.在运转一段时间之后,电脑接近卡死状态.

我把job任务移除,设成时间间隔为1天,才慢慢好起来.

不清楚,是不是由于时间间隔太多.太耗性能引起的?

存储过程中的同步逻辑,我是这样写的:
(1) 删除oracle_b中的数据;
(2)向oracle_b表中,插入通过远程连接从oracle_a中查询到的数据.


如果只是针对新增、修改、删除操作的数据同步,没有涉及到业务逻辑的。可以在源库的表上建个物化日志,这样就记录了主键信息,然后存储过程针对这个物化日志去操作目标库数据库的表,最后删除物化日志。基本可以实现5秒内跑完。JOB定个10秒都没问题
目前,我现在拥有的用户只拥有查询的权限,在这种情况下,可以在源库的表上创建物化日志吗?可能问题有点低级,主要是我对物化日志基本没有了解过.

#21


引用 19 楼 sych888 的回复:
Quote: 引用 17 楼 javaee_sunny 的回复:

Quote: 引用 14 楼 sych888 的回复:

对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
我在自己本地的数据库和虚拟机中的oracle数据库进行测试,使用同义词可以实现.

我对同义词的理解是,就相当于是一种映射,查询的时候,虽然查的是同义词,但实质是通过远程链接查的源数据.所以本地实质上并没有数据.不知这样理解是否准确.还请赐教.

另外,如果我的理解是正确的,我还想问,当源数据库,数据量小的时候,或许没有多大的问题,但当源数据量数据达到几十万条以上时,采用这种方式,会不会影响性能呢.

嗯,可以这么理解,本地只有定义,没有数据
不知道你都对这张表做什么业务操作,操作的频率,操作的时间
个人感觉通常情况下,几十万条,甚至上百万条数据,采用DBLINK+同义词,都是不错的办法

若是采用触发器,当源数据库的DML操作比较频繁时,效率影响比较明显
只对table_B表进行查询操作,操作时间主要就是集中在上班时间,另外用户比较少,所以使用频率并不是很高.

#22


引用 21 楼 javaee_sunny 的回复:
Quote: 引用 19 楼 sych888 的回复:

Quote: 引用 17 楼 javaee_sunny 的回复:

Quote: 引用 14 楼 sych888 的回复:

对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
我在自己本地的数据库和虚拟机中的oracle数据库进行测试,使用同义词可以实现.

我对同义词的理解是,就相当于是一种映射,查询的时候,虽然查的是同义词,但实质是通过远程链接查的源数据.所以本地实质上并没有数据.不知这样理解是否准确.还请赐教.

另外,如果我的理解是正确的,我还想问,当源数据库,数据量小的时候,或许没有多大的问题,但当源数据量数据达到几十万条以上时,采用这种方式,会不会影响性能呢.

嗯,可以这么理解,本地只有定义,没有数据
不知道你都对这张表做什么业务操作,操作的频率,操作的时间
个人感觉通常情况下,几十万条,甚至上百万条数据,采用DBLINK+同义词,都是不错的办法

若是采用触发器,当源数据库的DML操作比较频繁时,效率影响比较明显
只对table_B表进行查询操作,操作时间主要就是集中在上班时间,另外用户比较少,所以使用频率并不是很高.

那我觉得DBLINK+同义词挺好
数据实时、又节省空间、效率也不低

#23


引用 22 楼 sych888 的回复:
Quote: 引用 21 楼 javaee_sunny 的回复:

Quote: 引用 19 楼 sych888 的回复:

Quote: 引用 17 楼 javaee_sunny 的回复:

Quote: 引用 14 楼 sych888 的回复:

对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
我在自己本地的数据库和虚拟机中的oracle数据库进行测试,使用同义词可以实现.

我对同义词的理解是,就相当于是一种映射,查询的时候,虽然查的是同义词,但实质是通过远程链接查的源数据.所以本地实质上并没有数据.不知这样理解是否准确.还请赐教.

另外,如果我的理解是正确的,我还想问,当源数据库,数据量小的时候,或许没有多大的问题,但当源数据量数据达到几十万条以上时,采用这种方式,会不会影响性能呢.

嗯,可以这么理解,本地只有定义,没有数据
不知道你都对这张表做什么业务操作,操作的频率,操作的时间
个人感觉通常情况下,几十万条,甚至上百万条数据,采用DBLINK+同义词,都是不错的办法

若是采用触发器,当源数据库的DML操作比较频繁时,效率影响比较明显
只对table_B表进行查询操作,操作时间主要就是集中在上班时间,另外用户比较少,所以使用频率并不是很高.

那我觉得DBLINK+同义词挺好
数据实时、又节省空间、效率也不低
(⊙v⊙)嗯,现在把同义词+DBLINK作为一个备选方案.这些方案走通!开始尝试一下,使用物化日志的方式.

#24


引用 23 楼 javaee_sunny 的回复:
Quote: 引用 22 楼 sych888 的回复:

Quote: 引用 21 楼 javaee_sunny 的回复:

Quote: 引用 19 楼 sych888 的回复:

Quote: 引用 17 楼 javaee_sunny 的回复:

Quote: 引用 14 楼 sych888 的回复:

对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
我在自己本地的数据库和虚拟机中的oracle数据库进行测试,使用同义词可以实现.

我对同义词的理解是,就相当于是一种映射,查询的时候,虽然查的是同义词,但实质是通过远程链接查的源数据.所以本地实质上并没有数据.不知这样理解是否准确.还请赐教.

另外,如果我的理解是正确的,我还想问,当源数据库,数据量小的时候,或许没有多大的问题,但当源数据量数据达到几十万条以上时,采用这种方式,会不会影响性能呢.

嗯,可以这么理解,本地只有定义,没有数据
不知道你都对这张表做什么业务操作,操作的频率,操作的时间
个人感觉通常情况下,几十万条,甚至上百万条数据,采用DBLINK+同义词,都是不错的办法

若是采用触发器,当源数据库的DML操作比较频繁时,效率影响比较明显
只对table_B表进行查询操作,操作时间主要就是集中在上班时间,另外用户比较少,所以使用频率并不是很高.

那我觉得DBLINK+同义词挺好
数据实时、又节省空间、效率也不低
(⊙v⊙)嗯,现在把同义词+DBLINK作为一个备选方案.这些方案走通!开始尝试一下,使用物化日志的方式.


你搞错了物化日志也需要DBLINK+delete+insert操作,不是物化视图。只是说关联增量数据由主键去关联出来,这样速度就很快。不然你两表比对差异数据量大时就会慢

#25


通过DB_LINK在本地建物化视图?

#26


引用 25 楼 cnwz 的回复:
通过DB_LINK在本地建物化视图?
你来个什么意思?是同求吗

#27


是问 通过DB_LINK在本地建物化视图 这个方式是否能满足你的要求。也是一种实现方式吧

#1


用触发器试试

#2


就一张表吗,搞个stream把

#3


引用 2 楼 sxq129601 的回复:
就一张表吗,搞个stream把
对就是一张表.

#4


引用 1 楼 A_A_apan 的回复:
用触发器试试
由于我只对oracle_A中的table_A表拥有查询功能,不就有增删改的权限.所以触发器没有写啊.还请指教.

#5


如果用触发器,一定要保证网络是实时通的,不然第二台机器断网的话,头一台机器的操作就会失败;

#6


引用 5 楼 wmxcn2000 的回复:
如果用触发器,一定要保证网络是实时通的,不然第二台机器断网的话,头一台机器的操作就会失败;
可以确保是实时通的,由于我只对oracle_A中的table_A表只拥有查询功能,不具有增删改的权限,所以触发器没有写啊.毕竟只有进行了增删改操作才可以触发更新同步操作.

还请指教.

#7


引用 2 楼 sxq129601 的回复:
就一张表吗,搞个stream把
使用stream,不是得对oracle_A也进行设置吗,现在我只拥有一个查询指定表权限的用户,还可以对oracle_A进行其他设置吗.求指点.

#8


引用 7 楼 javaee_sunny 的回复:
Quote: 引用 2 楼 sxq129601 的回复:

就一张表吗,搞个stream把
使用stream,不是得对oracle_A也进行设置吗,现在我只拥有一个查询指定表权限的用户,还可以对oracle_A进行其他设置吗.求指点.


这个要配置,只有查询不行,你就用job挺好的呀,如果数据量不大时间点定的短些

#9


引用 6 楼 javaee_sunny 的回复:
可以确保是实时通的,由于我只对oracle_A中的table_A表只拥有查询功能,不具有增删改的权限,所以触发器没有写啊.毕竟只有进行了增删改操作才可以触发更新同步操作.

还请指教.


嗯,按 2# 的思路,配置一个流吧 . Stream

#10


触发器。
gitter

#11


引用 8 楼 sxq129601 的回复:
Quote: 引用 7 楼 javaee_sunny 的回复:

Quote: 引用 2 楼 sxq129601 的回复:

就一张表吗,搞个stream把
使用stream,不是得对oracle_A也进行设置吗,现在我只拥有一个查询指定表权限的用户,还可以对oracle_A进行其他设置吗.求指点.


这个要配置,只有查询不行,你就用job挺好的呀,如果数据量不大时间点定的短些
在部署测试的过程中,oracle_A的table_A表中,只有一条数据,当时我把job的定时任务设成间隔是1分钟.在运转一段时间之后,电脑接近卡死状态.

我把job任务移除,设成时间间隔为1天,才慢慢好起来.

不清楚,是不是由于时间间隔太多.太耗性能引起的?

存储过程中的同步逻辑,我是这样写的:
(1) 删除oracle_b中的数据;
(2)向oracle_b表中,插入通过远程连接从oracle_a中查询到的数据.

#12


引用 6 楼 javaee_sunny 的回复:
Quote: 引用 5 楼 wmxcn2000 的回复:

如果用触发器,一定要保证网络是实时通的,不然第二台机器断网的话,头一台机器的操作就会失败;
可以确保是实时通的,由于我只对oracle_A中的table_A表只拥有查询功能,不具有增删改的权限,所以触发器没有写啊.毕竟只有进行了增删改操作才可以触发更新同步操作.

还请指教.


触发器是写在table_A上的。

#13


引用 11 楼 javaee_sunny 的回复:
Quote: 引用 8 楼 sxq129601 的回复:

Quote: 引用 7 楼 javaee_sunny 的回复:

Quote: 引用 2 楼 sxq129601 的回复:

就一张表吗,搞个stream把
使用stream,不是得对oracle_A也进行设置吗,现在我只拥有一个查询指定表权限的用户,还可以对oracle_A进行其他设置吗.求指点.


这个要配置,只有查询不行,你就用job挺好的呀,如果数据量不大时间点定的短些
在部署测试的过程中,oracle_A的table_A表中,只有一条数据,当时我把job的定时任务设成间隔是1分钟.在运转一段时间之后,电脑接近卡死状态.

我把job任务移除,设成时间间隔为1天,才慢慢好起来.

不清楚,是不是由于时间间隔太多.太耗性能引起的?

存储过程中的同步逻辑,我是这样写的:
(1) 删除oracle_b中的数据;
(2)向oracle_b表中,插入通过远程连接从oracle_a中查询到的数据.


如果只是针对新增、修改、删除操作的数据同步,没有涉及到业务逻辑的。可以在源库的表上建个物化日志,这样就记录了主键信息,然后存储过程针对这个物化日志去操作目标库数据库的表,最后删除物化日志。基本可以实现5秒内跑完。JOB定个10秒都没问题

#14


对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现

#15


引用 12 楼 jdsnhan 的回复:
Quote: 引用 6 楼 javaee_sunny 的回复:

Quote: 引用 5 楼 wmxcn2000 的回复:

如果用触发器,一定要保证网络是实时通的,不然第二台机器断网的话,头一台机器的操作就会失败;
可以确保是实时通的,由于我只对oracle_A中的table_A表只拥有查询功能,不具有增删改的权限,所以触发器没有写啊.毕竟只有进行了增删改操作才可以触发更新同步操作.

还请指教.


触发器是写在table_A上的。
是的,应该是写在table_A上,但是我没有对table_A表进行增删改操作的权限,也不允许赋予给我这样的权限.也正是因为这种原因,我不清楚如何去使用触发器的方式去完成实时同步.

#16


引用 14 楼 sych888 的回复:
对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
是的,我只需对table_B表,进行查询的操作.

#17


引用 14 楼 sych888 的回复:
对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
我在自己本地的数据库和虚拟机中的oracle数据库进行测试,使用同义词可以实现.

我对同义词的理解是,就相当于是一种映射,查询的时候,虽然查的是同义词,但实质是通过远程链接查的源数据.所以本地实质上并没有数据.不知这样理解是否准确.还请赐教.

另外,如果我的理解是正确的,我还想问,当源数据库,数据量小的时候,或许没有多大的问题,但当源数据量数据达到几十万条以上时,采用这种方式,会不会影响性能呢.

#18


引用 17 楼 javaee_sunny 的回复:
Quote: 引用 14 楼 sych888 的回复:

对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
我在自己本地的数据库和虚拟机中的oracle数据库进行测试,使用同义词可以实现.

我对同义词的理解是,就相当于是一种映射,查询的时候,虽然查的是同义词,但实质是通过远程链接查的源数据.所以本地实质上并没有数据.不知这样理解是否准确.还请赐教.

另外,如果我的理解是正确的,我还想问,当源数据库,数据量小的时候,或许没有多大的问题,但当源数据量数据达到几十万条以上时,采用这种方式,会不会影响性能呢.


请看13楼回复的物化日志的东西,我之前公司做过,上亿的表同步每秒可以同步1万条估计没问题。

#19


引用 17 楼 javaee_sunny 的回复:
Quote: 引用 14 楼 sych888 的回复:

对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
我在自己本地的数据库和虚拟机中的oracle数据库进行测试,使用同义词可以实现.

我对同义词的理解是,就相当于是一种映射,查询的时候,虽然查的是同义词,但实质是通过远程链接查的源数据.所以本地实质上并没有数据.不知这样理解是否准确.还请赐教.

另外,如果我的理解是正确的,我还想问,当源数据库,数据量小的时候,或许没有多大的问题,但当源数据量数据达到几十万条以上时,采用这种方式,会不会影响性能呢.

嗯,可以这么理解,本地只有定义,没有数据
不知道你都对这张表做什么业务操作,操作的频率,操作的时间
个人感觉通常情况下,几十万条,甚至上百万条数据,采用DBLINK+同义词,都是不错的办法

若是采用触发器,当源数据库的DML操作比较频繁时,效率影响比较明显

#20


引用 13 楼 sxq129601 的回复:
Quote: 引用 11 楼 javaee_sunny 的回复:

Quote: 引用 8 楼 sxq129601 的回复:

Quote: 引用 7 楼 javaee_sunny 的回复:

Quote: 引用 2 楼 sxq129601 的回复:

就一张表吗,搞个stream把
使用stream,不是得对oracle_A也进行设置吗,现在我只拥有一个查询指定表权限的用户,还可以对oracle_A进行其他设置吗.求指点.


这个要配置,只有查询不行,你就用job挺好的呀,如果数据量不大时间点定的短些
在部署测试的过程中,oracle_A的table_A表中,只有一条数据,当时我把job的定时任务设成间隔是1分钟.在运转一段时间之后,电脑接近卡死状态.

我把job任务移除,设成时间间隔为1天,才慢慢好起来.

不清楚,是不是由于时间间隔太多.太耗性能引起的?

存储过程中的同步逻辑,我是这样写的:
(1) 删除oracle_b中的数据;
(2)向oracle_b表中,插入通过远程连接从oracle_a中查询到的数据.


如果只是针对新增、修改、删除操作的数据同步,没有涉及到业务逻辑的。可以在源库的表上建个物化日志,这样就记录了主键信息,然后存储过程针对这个物化日志去操作目标库数据库的表,最后删除物化日志。基本可以实现5秒内跑完。JOB定个10秒都没问题
目前,我现在拥有的用户只拥有查询的权限,在这种情况下,可以在源库的表上创建物化日志吗?可能问题有点低级,主要是我对物化日志基本没有了解过.

#21


引用 19 楼 sych888 的回复:
Quote: 引用 17 楼 javaee_sunny 的回复:

Quote: 引用 14 楼 sych888 的回复:

对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
我在自己本地的数据库和虚拟机中的oracle数据库进行测试,使用同义词可以实现.

我对同义词的理解是,就相当于是一种映射,查询的时候,虽然查的是同义词,但实质是通过远程链接查的源数据.所以本地实质上并没有数据.不知这样理解是否准确.还请赐教.

另外,如果我的理解是正确的,我还想问,当源数据库,数据量小的时候,或许没有多大的问题,但当源数据量数据达到几十万条以上时,采用这种方式,会不会影响性能呢.

嗯,可以这么理解,本地只有定义,没有数据
不知道你都对这张表做什么业务操作,操作的频率,操作的时间
个人感觉通常情况下,几十万条,甚至上百万条数据,采用DBLINK+同义词,都是不错的办法

若是采用触发器,当源数据库的DML操作比较频繁时,效率影响比较明显
只对table_B表进行查询操作,操作时间主要就是集中在上班时间,另外用户比较少,所以使用频率并不是很高.

#22


引用 21 楼 javaee_sunny 的回复:
Quote: 引用 19 楼 sych888 的回复:

Quote: 引用 17 楼 javaee_sunny 的回复:

Quote: 引用 14 楼 sych888 的回复:

对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
我在自己本地的数据库和虚拟机中的oracle数据库进行测试,使用同义词可以实现.

我对同义词的理解是,就相当于是一种映射,查询的时候,虽然查的是同义词,但实质是通过远程链接查的源数据.所以本地实质上并没有数据.不知这样理解是否准确.还请赐教.

另外,如果我的理解是正确的,我还想问,当源数据库,数据量小的时候,或许没有多大的问题,但当源数据量数据达到几十万条以上时,采用这种方式,会不会影响性能呢.

嗯,可以这么理解,本地只有定义,没有数据
不知道你都对这张表做什么业务操作,操作的频率,操作的时间
个人感觉通常情况下,几十万条,甚至上百万条数据,采用DBLINK+同义词,都是不错的办法

若是采用触发器,当源数据库的DML操作比较频繁时,效率影响比较明显
只对table_B表进行查询操作,操作时间主要就是集中在上班时间,另外用户比较少,所以使用频率并不是很高.

那我觉得DBLINK+同义词挺好
数据实时、又节省空间、效率也不低

#23


引用 22 楼 sych888 的回复:
Quote: 引用 21 楼 javaee_sunny 的回复:

Quote: 引用 19 楼 sych888 的回复:

Quote: 引用 17 楼 javaee_sunny 的回复:

Quote: 引用 14 楼 sych888 的回复:

对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
我在自己本地的数据库和虚拟机中的oracle数据库进行测试,使用同义词可以实现.

我对同义词的理解是,就相当于是一种映射,查询的时候,虽然查的是同义词,但实质是通过远程链接查的源数据.所以本地实质上并没有数据.不知这样理解是否准确.还请赐教.

另外,如果我的理解是正确的,我还想问,当源数据库,数据量小的时候,或许没有多大的问题,但当源数据量数据达到几十万条以上时,采用这种方式,会不会影响性能呢.

嗯,可以这么理解,本地只有定义,没有数据
不知道你都对这张表做什么业务操作,操作的频率,操作的时间
个人感觉通常情况下,几十万条,甚至上百万条数据,采用DBLINK+同义词,都是不错的办法

若是采用触发器,当源数据库的DML操作比较频繁时,效率影响比较明显
只对table_B表进行查询操作,操作时间主要就是集中在上班时间,另外用户比较少,所以使用频率并不是很高.

那我觉得DBLINK+同义词挺好
数据实时、又节省空间、效率也不低
(⊙v⊙)嗯,现在把同义词+DBLINK作为一个备选方案.这些方案走通!开始尝试一下,使用物化日志的方式.

#24


引用 23 楼 javaee_sunny 的回复:
Quote: 引用 22 楼 sych888 的回复:

Quote: 引用 21 楼 javaee_sunny 的回复:

Quote: 引用 19 楼 sych888 的回复:

Quote: 引用 17 楼 javaee_sunny 的回复:

Quote: 引用 14 楼 sych888 的回复:

对table_B表都需要什么操作,如果只需要查询权限可以用DBLINK+同义词实现
我在自己本地的数据库和虚拟机中的oracle数据库进行测试,使用同义词可以实现.

我对同义词的理解是,就相当于是一种映射,查询的时候,虽然查的是同义词,但实质是通过远程链接查的源数据.所以本地实质上并没有数据.不知这样理解是否准确.还请赐教.

另外,如果我的理解是正确的,我还想问,当源数据库,数据量小的时候,或许没有多大的问题,但当源数据量数据达到几十万条以上时,采用这种方式,会不会影响性能呢.

嗯,可以这么理解,本地只有定义,没有数据
不知道你都对这张表做什么业务操作,操作的频率,操作的时间
个人感觉通常情况下,几十万条,甚至上百万条数据,采用DBLINK+同义词,都是不错的办法

若是采用触发器,当源数据库的DML操作比较频繁时,效率影响比较明显
只对table_B表进行查询操作,操作时间主要就是集中在上班时间,另外用户比较少,所以使用频率并不是很高.

那我觉得DBLINK+同义词挺好
数据实时、又节省空间、效率也不低
(⊙v⊙)嗯,现在把同义词+DBLINK作为一个备选方案.这些方案走通!开始尝试一下,使用物化日志的方式.


你搞错了物化日志也需要DBLINK+delete+insert操作,不是物化视图。只是说关联增量数据由主键去关联出来,这样速度就很快。不然你两表比对差异数据量大时就会慢

#25


通过DB_LINK在本地建物化视图?

#26


引用 25 楼 cnwz 的回复:
通过DB_LINK在本地建物化视图?
你来个什么意思?是同求吗

#27


是问 通过DB_LINK在本地建物化视图 这个方式是否能满足你的要求。也是一种实现方式吧