在Oracle中将数据从CLOB列批量复制到VARCHAR2列的有效方法是什么

时间:2018-07-20 17:57:56

标签: sql oracle ddl

我有一个表TEST,其中有4100万条记录。

此表中有两个我感兴趣的主要列:

  • CLOB类型的消息
  • VARCHAR2(2048)类型的MESSAGE_C

表Test使用名为PART_DATE的分区列进行范围分区,其中一个分区有一天的数据。

我尝试使用以下方法完成工作:

ALTER TABLE TEST ADD MESSAGE_C VARCHAR2(2048);
UPDATE TEST SET MESSAGE_C = MESSAGE;
COMMIT;
ALTER TABLE TEST DROP COLUMN MESSAGE;
ALTER TABLE TEST RENAME COLUMN MESSAGE_C TO MESSAGE;

但是我在步骤2停留了大约4个小时。我们的DBA表示,由于进行了全表扫描,因此被阻止了。

有人可以告诉我吗

  1. 完成这项工作的更好/更有效的方法是什么?
  2. 是否会在更新查询帮助的where子句中使用PART_DATE字段?

1 个答案:

答案 0 :(得分:2)

考虑使用INSERT INTO SELECT快速创建具有新名称的新表,然后在创建表后添加索引,删除旧表,并将新表重命名为旧名称。

这是DML操作,因此它将显着提高速度,并且不会因服务器日志记录设置而变慢。

最近我已经使用这种方法来更改具有5亿条记录的表。