可能重复:
What is the fastest way to insert data into an Oracle table?
表有2500万条记录。我需要在此表中添加新列数据类型是日期,并将数据从同一表下的旧列复制到此新列中,但旧列具有timestamp数据类型。我正在做以下步骤,你能告诉我任何其他方式,我可以做到这一点。当我运行以下查询时,运行6或7个小时,然后我必须杀死它。数据库是oracle。
alter table ofr_ft rename to ofr_ft_bkup;
CREATE TABLE ofr_ft (
all old columns,
age DATE NOT NULL,
CONSTRAINT ofr_ft_pk
PRIMARY KEY (ofr_ft_id)
);
INSERT INTO ofr_ft
(old coumns,
age)
(values from old columns,
cast(date_last_chng as date)
FROM ofr_ft_bkup);
COMMIT;
答案 0 :(得分:4)
为什么要创建新表?
alter table mytable add (newcolumn date);
update mytable set newcolumn = oldcolumn;
alter table mytable drop (oldcolumn);
如果更新不起作用,因为回滚段太小,那样的东西应该可以解决问题:
alter table mytable add (newcolumn date);
begin
loop
update mytable set newcolumn = oldcolumn
where oldcolumn is not null
and newcolumn is null
and rownum<=10000;
exit when sql%rowcount=0;
commit;
end loop;
end;
/
alter table mytable drop (oldcolumn);
答案 1 :(得分:0)
首先禁用密钥,执行插入,然后在之后启用密钥通常会更快。
另外,调查不在交易中是否更快。