大数据移动


11

我想将数十亿行从schema1.table1移到新的schema2.table2,其中table2是table1的重构行。因此,它们的表结构是不同的。table1和table2都已分区,但table2为空。这两种模式都在同一个oracle数据库中。执行此数据迁移的性能有效方式是什么?您只想在最后执行提交还是选择增量提交?也就是说,假设完成了耗时数小时的99%的工作后,数据迁移失败。现在回滚吗?如果执行增量提交,如何处理失败?

Answers:


8

INSERT APPEND与之并行NOLOGGING将是这样做的方式,然后与所有NOLOGGING操作一样,在完成操作后立即进行备份。首先将索引标记为不可用,禁用约束,更改表,执行操作,然后重新启用约束等。

Append使Oracle总是抢占当前高水位线以上的可用空间,因此它在重新利用段中的空间时效率不高,但是避免了摆弄空闲列表和UNDO开销。如果出于任何原因必须重新开始TRUNCATE,请不要DELETE

至于增量提交,将取决于数据的分段方式,您能否轻松地说一次移动一个月的价值(例如,分区方案在源和目标上是否相同)?因为请记住,如果您需要满足某些条件,那显然会拖慢您的速度。测试以确保该操作不会在逻辑上失败(例如,源和目标中的数据类型不兼容),然后分配足够的资源并在一次事务中进行操作。祝好运!


我知道使用在线重新定义会很慢,但是dbms_redef可能甚至不支持上述情况?
约翰

3

如果分区方案相同(表1中的分区a的数据进入表2中的分区a,等等),那么我将参加多个会话,并让每个会话将其数据附加到其“自己的”分区中。这样可以防止很多锁定,并具有最佳速度。根据硬件的不同,您可以将HBA卡填满直到其卡住。每个分区的提交(假设每个分区有多行)将不是问题,我肯定会这样做。假设应用程序在迁移期间已关闭,那么回退很简单:在再次尝试之前,请勿更改应用程序并截断table2的分区,至少对于那些在第二次运行之前应用程序已更改数据的部分而言。

我希望这有帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.