大数据移动

Joh*_*ohn 12 oracle

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

Gai*_*ius 9

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

Append 会导致 Oracle 始终获取当前高水位线以上的空闲空间,因此在重用段中的空间方面效率不高,但它避免了摆弄空闲列表和 UNDO 开销。如果您出于任何原因必须重新开始TRUNCATE,请不要DELETE

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


小智 3

如果分区方案相同(表 1 中的分区 a 的数据转到表 2 中的分区 a 等),那么我将进行多个会话,并让每个会话将其数据附加到其“自己的”分区中。这可以防止大量锁定并具有最佳速度。根据硬件的不同,您可以将 HBA 卡填充到其颈部。每个分区的提交 - 假设每个分区多于几行 - 不会成为问题,我当然会这样做。假设应用程序在迁移期间关闭,回退很简单:在重试之前不要更改应用程序并截断 table2 的分区,至少对于应用程序在第二次运行之前更改数据的部分。

我希望这有帮助