我试图找到一种方法从同一个数据库中的两个表执行迁移。此迁移应尽可能快,以尽量减少停机时间。
举一个例子,假设我有一个像这样的人员表:
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;
问题在于,当涉及到数百万个注册表时,这可能会变得非常慢(临时表空间也可能无法处理所有这些信息)
有没有其他方法可以实现最佳性能(减少停机时间)?
谢谢。
答案 0 :(得分:1)
如果您可以使用该状态,所有当前记录都将位于一个分区中(并且您的INSERT方法建议),您可能只有
1)将新列partition_time
添加为NULL或可能metadata default only - 必需12c
2)通过在线重新定义(如果没有维护窗口,表离线)或者使用交换分区,将表切换到分区表。