【发布时间】:2015-03-24 08:41:50
【问题描述】:
我正在尝试从一个 oracle 数据库迁移到另一个。 我的 Select Query 非常复杂,它返回大约 2000 万条记录。 当我尝试执行时:
insert into xxx
select a, b, c, bla blaa
from yyy join zzz join ttt etc
大约需要 20 小时。
有什么不同的迁移方式吗? 你能给我什么建议吗?
感谢您的建议。
编辑: 我创建一个新表,如
create table XYZ as select a, b, c, bla blaa from yyy join zzz join ttt etc
大约需要 2 分钟。
现在我正在尝试从 XYZ 插入到我的原始表中。
还剩 15 分钟,继续:)
我会通知你的:)
【问题讨论】:
-
导出为转储(使用EXPDP)并将其导入新数据库。这是最快的方式。
-
@Grcn,以防万一,您确定这是两个数据库,而不是同一个数据库中的两个模式。如果是,那么按照建议,使用
EXPDP导出表,并使用IMPDP导入目标数据库架构中的表。 -
基于您的本地表创建速度很快,为了进一步的诊断目的,您现在可以尝试在目标数据库中插入一个没有任何约束或索引的新的、完全空的表,看看需要多长时间。如果这也很快,请尝试从新的目标数据库表插入到您的实际目标表中,看看它是如何执行的。如果它很快,那么你有一点神秘 - 如果它很慢,那么问题根本不在于在远程表中运行单个插入,而可能是目标表上的索引、约束、触发器、物化视图等.
-
在您插入目标表时,其他进程是否正在使用目标表,他们需要修改它还是只是读取它?
-
我很高兴我建议的解决方案对您有用,如果您通过评论对我的回答给出状态,那就太好了。谢谢。
标签: sql oracle insert migration