我们有两个oracle服务器,ola
和olb
。
它们都在win server 2003上运行,安装了相同的oracle 11.2g,并且具有相同的oracle服务orcl
。
虽然orcl
拥有相同的用户login_by
,但是每个表都有一个主键。
到目前为止,您可以将olb
视为ola
的克隆(副本)。
现在login_by
的表已插入到数据日志中。 ola
和olb
中的数据不同。
现在我们要将这些数据从olb
导入ola
。我们已将用户login_by
的数据导出到dmp
中的olb
文件。但我们无法在dmp
中导入此ola
,因为ola
具有相同的架构(具有相同的用户,表),导入将失败。
然后我想知道是否还有其他想法?
BTW,ora
和orb
无法通过网络互相访问。
更新(我所做的):
从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`是主键。
答案 0 :(得分:0)
首先,我建议您切换到expdp
和impdp
,而不是exp
和imp
。
我会:
clone
实例上的ola
。例如imp clone/xxxxxx@orcl fromuser=login_by touser=clone file=c:\olb.dmp
clone
表格上的SELECT授予login_by
。login_by
,从clone
查询新行并将其插入login_by
表格。如何完成#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的行并插入新行。