在同一数据库上进行快速数据迁移

时间:2016-12-20 17:21:31

标签: oracle database-migration

我试图找到一种方法从同一个数据库中的两个表执行迁移。此迁移应尽可能快,以尽量减少停机时间。

举一个例子,假设我有一个像这样的人员表:

  

person_table - > (身份证,姓名,地址)

所以一个人作为身份证,姓名和地址。我的系统将包含数百万个人注册表,并决定应该对人员表进行分区。为此,我创建了一个新表:

  

partitioned_person_table - >(ID,姓名,地址,partition_time)

现在这个表将包含一个名为partition_time的额外列。这是此表的分区键,因为这是一个范围分区(每小时一个分区)。

最后,我需要找到一种方法将所有信息从 person_table 移动到具有最佳性能的 partitioned_person_table

  • 我可以尝试的第一件事就是简单地创建一个语句:

    INSERT INTO partitioned_person_table(id,name,address,partition_time)   SELECT id,name,address,CURRENT_TIMESTAMP FROM person_table;

问题在于,当涉及到数百万个注册表时,这可能会变得非常慢(临时表空间也可能无法处理所有这些信息)

  • 我的第二种方法是使用 EXCHANGE PARTITION 方法。不幸的是,我不能这样做,因为这些表包含不同的列号。

有没有其他方法可以实现最佳性能(减少停机时间)?

谢谢。

1 个答案:

答案 0 :(得分:1)

如果您可以使用该状态,所有当前记录都将位于一个分区中(并且您的INSERT方法建议),您可能只有

1)将新列partition_time添加为NULL或可能metadata default only - 必需12c

2)通过在线重新定义(如果没有维护窗口,表离线)或者使用交换分区,将表切换到分区表。