什么是将数据从 CLOB 列批量复制到 Oracle 中的 VARCHAR2 列的有效方法
What is an efficient way to bulk copy data from a CLOB column to a VARCHAR2 column in Oracle
我有一个 table 测试,其中有超过 4100 万条记录。
我对这个 table 中的两个主要专栏感兴趣:
- CLOB 类型的消息
- MESSAGE_C 类型为 VARCHAR2(2048)
table 测试使用名为 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 说,这是由于完全 table 扫描造成的阻塞。
谁能告诉我:
- 完成此任务的 better/more 有效方法是什么?
- 在更新查询的 where 子句中使用 PART_DATE 字段会有帮助吗?
考虑使用 INSERT INTO SELECT 以新名称动态创建新的 table,然后在创建 table 后添加索引,删除旧的 table,并将新 table 重命名为旧名称。
这是一个 DML 操作,因此速度会明显加快,并且不会因服务器日志记录设置而减慢。
我最近使用这种方法来更改 table 有 5 亿条记录。
我有一个 table 测试,其中有超过 4100 万条记录。
我对这个 table 中的两个主要专栏感兴趣:
- CLOB 类型的消息
- MESSAGE_C 类型为 VARCHAR2(2048)
table 测试使用名为 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 说,这是由于完全 table 扫描造成的阻塞。
谁能告诉我:
- 完成此任务的 better/more 有效方法是什么?
- 在更新查询的 where 子句中使用 PART_DATE 字段会有帮助吗?
考虑使用 INSERT INTO SELECT 以新名称动态创建新的 table,然后在创建 table 后添加索引,删除旧的 table,并将新 table 重命名为旧名称。
这是一个 DML 操作,因此速度会明显加快,并且不会因服务器日志记录设置而减慢。
我最近使用这种方法来更改 table 有 5 亿条记录。