2011-06-24 18 views
1

25万件のレコードをコピーする可能性の重複:
What is the fastest way to insert data into an Oracle table?は、Oracle内の別のテーブルにあるテーブルから

表25万件のレコードを持っています。私は新しい列のデータ型を追加する必要がありますこのテーブルの日付は、同じテーブルの古い列からこの新しい列にデータをコピーしますが、古い列はタイムスタンプのデータ型を持っています。私は次のステップを踏んでいます。あなたが私がそれをやることができる他の方法を教えてもらえますか?私はfollwingクエリを実行するときにそれは6または7時間を実行していると私はそれを殺す必要があります。データベースはオラクルです。

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

OracleがSQL Serverの統合サービスと同等のを持っています - つまり、データをインポートするためのパッケージの作成を可能にするプログラム? –

答えて

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); 
関連する問題