如何在oracle中将数据与相同的模式合并

时间:2013-07-23 03:15:05

标签: oracle

我们有两个oracle服务器,olaolb

它们都在win server 2003上运行,安装了相同的oracle 11.2g,并且具有相同的oracle服务orcl

虽然orcl拥有相同的用户login_by,但是每个表都有一个主键。

到目前为止,您可以将olb视为ola的克隆(副本)。

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

现在我们要将这些数据从olb导入ola。我们已将用户login_by的数据导出到dmp中的olb文件。但我们无法在dmp中导入此ola,因为ola具有相同的架构(具有相同的用户,表),导入将失败。

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

BTW,oraorb无法通过网络互相访问。


更新(我所做的):

olb导出1个数据:

exp login_by/000000@orcl file=c:\olb.dmp

2将数据导入ola

imp login_by/000000@orcl 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`是主键。

1 个答案:

答案 0 :(得分:0)

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

我会:

  1. 将dmp文件导入新架构,例如clone实例上的ola。例如imp clone/xxxxxx@orcl fromuser=login_by touser=clone file=c:\olb.dmp
  2. 将所有clone表格上的SELECT授予login_by
  3. 作为login_by,从clone查询新行并将其插入login_by表格。
  4. 冲洗并重复其他情况。
  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);

    或者,如果ID可能匹配,您可以使用MERGE,以便更新具有相同ID的行并插入新行。