繁体   English   中英

导入Oracle数据转储并覆盖现有数据

[英]Import Oracle data dump and overwrite existing data

我有一个oracle dmp文件,我需要将数据导入表中。 转储中的数据包含新行和少量更新行。 我正在使用import命令和IGNORE = Y,所以它很好地导入了所有新行。 但是它不会导入/覆盖现有行(它显示了违反唯一键约束的警告)。 是否有一些选项可以使导入使用新数据更新现有行?

否。如果您使用的是数据泵,则可以使用TABLE_EXISTS_ACTION=TRUNCATE选项删除所有现有行并从转储文件中导入所有内容,但是当您要更新现有行并将任何行不保留在新文件中时,即而不是删除它们(我认为,因为您只提到更新,尽管尚不清楚),这可能不合适。 而且由于转储文件来自旧的exp工具,而不是来自expdp ,无论如何,除非您可以重新导出数据,否则。

如果确实要删除转储中没有的现有行,则可以在导入之前截断所有受影响的表。 但是,这将是你不得不去实现自己单独的步骤,其不是imp为你会做; 而且表格会暂时空着,因此您必须要停机。

另外,您也可以导入新的登台表(在不同的架构中,因为imp也不支持重命名),然后使用这些表将新数据merge到实际表中。 那可能是破坏性最小的方法。 但是,您仍然必须设计和编写所有merge语句。 没有内置的方法可以自动执行此操作。

您可以将其导入到临时表中,然后通过加入临时表来进行记录检查。

使用impdp选项REMAP_TABLE将现有文件加载到临时表中。

impdp .... REMAP_TABLE=TMP_TABLE_NAME

加载完成后,在temp表的现有表上运行MERGE语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM