我有一个存在于两个数据库中的表X.一个DB是源,另一个是目标。
是否有一种简单的方法可以导出表X,然后运行导入,将MERGE记录放入表中而不覆盖(删除)记录?
例如:
源表有记录(第一列是PK)
1 | ABC
2 | DEF
3 | GHI
目标表:
1 | DSF
3 | GHI
4 | TPZ
运行完毕后,我期待着这个:
1 | ABC
2 | DEF
3 | GHI
4 | TPZ
我认为我读到的一个解决方案是导出并导入到临时表中,然后编写一个脚本来合并导入数据库中的行。在我尝试这条路线之前,我想知道Oracle中是否还有其他选项。
答案 0 :(得分:1)
根据您拥有的行数,可以使用Data Pump导出目标表的内容,然后将该转储文件导入源表。它不是最有效的方法,但如果您使用少量行,它可能是最直接的方法。初始导出类似于:
expdp [USER]/[PASS]@[DATABASE] schemas=[SCHEMA] tables=[TARGET] directory=[DIRECTORY] dumpfile=[FILE].dmp logfile=[LOG].log
使用相同的转储文件,您可以像这样导入它:
impdp [USER]/[PASS]@[DATABASE] schemas=[SCHEMA] tables=[TARGET] DIRECTORYtables=[TARGET] directory=[DIRECTORY] dumpfile=[FILE].dmp TABLE_EXISTS_ACTION=APPEND logfile=[LOG].log
使用APPEND标志应允许您加载Source表中尚未包含的所有行。