2013-07-23 135 views
0

相同的模式合并数据,我们有两个Oracle服务器,olaolb如何与甲骨文

他们都赢Server 2003上运行,安装相同的Oracle11.2克,并且具有相同的Oracle服务orcl

尽管orcl拥有拥有大量表的相同用户login_by,但每个表都有一个主键。

现在,您可以看到olb作为ola的克隆(副本)。

现在login_by的表已经插入到数据日志中。数据在olaolb中有所不同。

现在我们想将这些数据导入从olbola。我们已将用户login_by的数据导出到olb中的dmp文件中。但是我们不能在ola中导入这个dmp,因为ola具有相同的模式(具有相同的用户,表),导入将失败。

然后我想知道是否还有其他想法?

顺便说一句,oraorb可以不通过网络互相访问。


更新(我做了什么):从olb

1导出数据:

exp login_by/[email protected] file=c:\olb.dmp 

2导入数据到ola

imp login_by/[email protected] fromuser=login_by touser=login_by file=c:\olb.dmp 

这将失败怎么一回事,因为两个原因:

1 OLA用户login_by具有相同的表。

2对于命名为“相同的表table1 ,in OLA it may contain a record with ID = 1 , and the same table table1的in OLB may contain a record with the same ID = 1个where the id`是主键。

+0

有什么错误? – Ravi

+0

您可以将所有数据从login_by复制到olb中不存在的olb中的某个新表。然后将它导入ola? –

+0

我发表了这篇文章。 – hguser

回答

0

首先,我建议您切换到expdpimpdp而不是expimp

我想:

  1. 导入dmp文件到一个新的模式,例如clone,在ola实例上。例如imp clone/[email protected] fromuser=login_by touser=clone file=c:\olb.dmp
  2. 上的所有 clone表来 login_by
  3. 授予SELECT。
  4. 作为login_by,从clone查询新行,并将其插入到login_by表。
  5. 冲洗并重复其他情况。

#3如何完成取决于所涉及的数据量以及确定目标表中尚不存在哪些行的难易程度。

例如,你可能只是做一个简单的INSERT INTO login_by.thetable SELECT * FROM clone.thetable WHERE id IN (SELECT id FROM clone.thetable MINUS SELECT id FROM login_by.thetable);

或者,如果IDS可以匹配,你可以使用一个MERGE,使具有相同id行都将被更新,新行会被插入。

+0

事实上,我们在这里有14个oracle服务器,而我们试图将所有数据复制到第一个服务器'ola'。 – hguser

+0

已更新的答案。 –

+0

谢谢,我会试一试。 – hguser