0

我们有两个 oracle 服务器,ola并且olb.

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

虽然orcl有一个login_by拥有很多表的用户,但每个表都有一个主键。

现在,您可以olbola.

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

现在我们要将这些数据从 导入olbola。我们已经将用户的数据login_by导出dmpolb. 但我们不能将其导入dmpola因为ola具有相同的架构(具有相同的用户、表),导入将失败。

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

BTW,ora并且orb不能通过网络互相访问。


更新(我做了什么):

1 导出数据olb

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 login_byola中的用户有相同的表。

2 对于名为“table1 ,inola it may contain a record withid=1 , and the same tabletable1 inolb may contain a record with the sameid=1 id”的同一个表where the,主键是主键。

4

1 回答 1

0

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

我会:

  1. 将 dmp 文件导入新模式,例如clone,在ola实例上。例如imp clone/xxxxxx@orcl fromuser=login_by touser=clone file=c:\olb.dmp
  2. 授予 SELECT 对所有clone将所有表login_by.
  3. 作为login_by,查询新行clone并将它们插入到login_by表中。
  4. 冲洗并重复其他实例。

#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 可能匹配,您可以使用 aMERGE以便更新具有相同 id 的行并插入新行。

于 2013-07-23T06:53:22.983 回答