如何将两个Oracle合并成一个

时间:2023-01-04 11:17:43
前提:
之前公司A实施了一套系统,后来分到子公司B,B也实施了同一套系统,从A的数据库还原的。
A\B各自连接自己的数据库,现在想合并成一套系统一套数据库。
系统功能和数据库结构都是一样的,两个库的表结构、存储过程、视图等完全一样。
两个库里的每个表都有主键。
表很多,大约200个左右。
想实现效果:
将两个库的数据合并到一个库中。
不重复的数据:B库中存在,A库不存在的数据直接移到A库。
重复的数据:A、B库都存在的(可通过主键识别,主要是在B实施前创建的数据,可能会在B中修改),可以列出来选择由B替换A或者,只保留A的。
请问:
有没有什么工具可以实现?如果没有现成的工具,自己实现有没有好的思路?

11 个解决方案

#1


为什么要合并到一起?可以在一台服务器上建两个schema来区分吧。

#2


写代码实现,不会太复杂,动态拼接merge语句就行。

#3


将B环境的数据先恢复到A数据库的一个新用户下
然后写个存储过程来根据需要的业务逻辑处理数据

利用数据字段找出表名字段名,以及主键所属字段,写好异常处理。正式处理前先测试几遍,做好备份

#4


引用 1 楼 zbdzjx 的回复:
为什么要合并到一起?可以在一台服务器上建两个schema来区分吧。

两个厂区合并成1个了,需要数据共享和业务共享,不能各用各的了,现在实际就是一个厂了。

#5


引用 3 楼 wildwave 的回复:
将B环境的数据先恢复到A数据库的一个新用户下
然后写个存储过程来根据需要的业务逻辑处理数据

利用数据字段找出表名字段名,以及主键所属字段,写好异常处理。正式处理前先测试几遍,做好备份

完全自己写一个读取、识别和插入程序来实现合并吗?另外,数据库很大,备份差不多得10个多G吧,每个表每条数据对比吗?

#6


引用 2 楼 LHDZ_BJ 的回复:
写代码实现,不会太复杂,动态拼接merge语句就行。

其实之前一直计划用Stream同步,这样双方的数据实时一致,后来可能是各人能力问题,虽然配成功了,但很不稳定。索性各用各的,最后再合并一次了。

#7


用streams同步,那得是双向的,双向同步会比较麻烦,弄不好会出现问题。还有streams本来问题就多些,现在oracle的同步主打产品是ogg。
其实,个人认为你把系统合并成一个更合适,如果有停机窗口的话,这个量级的数据还是不太难的,而且不会用太久时间。不过,如果实现合并,还是要写代码。

#8


引用 4 楼 gwqwyh 的回复:
Quote: 引用 1 楼 zbdzjx 的回复:

为什么要合并到一起?可以在一台服务器上建两个schema来区分吧。

两个厂区合并成1个了,需要数据共享和业务共享,不能各用各的了,现在实际就是一个厂了。

噢,是这样子啊。
主要是怕单号会重复,可能A厂有001这张单子,B厂也有001这张单子,单号是主键,而且两张单子内容不同。最终会合并成什么内容??

#9


该回复于2016-01-04 08:30:45被管理员删除

#10


引用 8 楼 zbdzjx 的回复:
Quote: 引用 4 楼 gwqwyh 的回复:

Quote: 引用 1 楼 zbdzjx 的回复:

为什么要合并到一起?可以在一台服务器上建两个schema来区分吧。

两个厂区合并成1个了,需要数据共享和业务共享,不能各用各的了,现在实际就是一个厂了。

噢,是这样子啊。
主要是怕单号会重复,可能A厂有001这张单子,B厂也有001这张单子,单号是主键,而且两张单子内容不同。最终会合并成什么内容??

最终强行选择一个即可。我们不是单据,对数据要求没那么严格。

#11


谢谢各位,看来只能自己写代码了。本来以为有类似的工具可用。

#1


为什么要合并到一起?可以在一台服务器上建两个schema来区分吧。

#2


写代码实现,不会太复杂,动态拼接merge语句就行。

#3


将B环境的数据先恢复到A数据库的一个新用户下
然后写个存储过程来根据需要的业务逻辑处理数据

利用数据字段找出表名字段名,以及主键所属字段,写好异常处理。正式处理前先测试几遍,做好备份

#4


引用 1 楼 zbdzjx 的回复:
为什么要合并到一起?可以在一台服务器上建两个schema来区分吧。

两个厂区合并成1个了,需要数据共享和业务共享,不能各用各的了,现在实际就是一个厂了。

#5


引用 3 楼 wildwave 的回复:
将B环境的数据先恢复到A数据库的一个新用户下
然后写个存储过程来根据需要的业务逻辑处理数据

利用数据字段找出表名字段名,以及主键所属字段,写好异常处理。正式处理前先测试几遍,做好备份

完全自己写一个读取、识别和插入程序来实现合并吗?另外,数据库很大,备份差不多得10个多G吧,每个表每条数据对比吗?

#6


引用 2 楼 LHDZ_BJ 的回复:
写代码实现,不会太复杂,动态拼接merge语句就行。

其实之前一直计划用Stream同步,这样双方的数据实时一致,后来可能是各人能力问题,虽然配成功了,但很不稳定。索性各用各的,最后再合并一次了。

#7


用streams同步,那得是双向的,双向同步会比较麻烦,弄不好会出现问题。还有streams本来问题就多些,现在oracle的同步主打产品是ogg。
其实,个人认为你把系统合并成一个更合适,如果有停机窗口的话,这个量级的数据还是不太难的,而且不会用太久时间。不过,如果实现合并,还是要写代码。

#8


引用 4 楼 gwqwyh 的回复:
Quote: 引用 1 楼 zbdzjx 的回复:

为什么要合并到一起?可以在一台服务器上建两个schema来区分吧。

两个厂区合并成1个了,需要数据共享和业务共享,不能各用各的了,现在实际就是一个厂了。

噢,是这样子啊。
主要是怕单号会重复,可能A厂有001这张单子,B厂也有001这张单子,单号是主键,而且两张单子内容不同。最终会合并成什么内容??

#9


该回复于2016-01-04 08:30:45被管理员删除

#10


引用 8 楼 zbdzjx 的回复:
Quote: 引用 4 楼 gwqwyh 的回复:

Quote: 引用 1 楼 zbdzjx 的回复:

为什么要合并到一起?可以在一台服务器上建两个schema来区分吧。

两个厂区合并成1个了,需要数据共享和业务共享,不能各用各的了,现在实际就是一个厂了。

噢,是这样子啊。
主要是怕单号会重复,可能A厂有001这张单子,B厂也有001这张单子,单号是主键,而且两张单子内容不同。最终会合并成什么内容??

最终强行选择一个即可。我们不是单据,对数据要求没那么严格。

#11


谢谢各位,看来只能自己写代码了。本来以为有类似的工具可用。