从oracle中的一个表复制2500万条记录到另一个表

时间:2011-06-24 06:23:40

标签: database oracle

  

可能重复:
  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;

2 个答案:

答案 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)

首先禁用密钥,执行插入,然后在之后启用密钥通常会更快。

另外,调查不在交易中是否更快。