• ベストアンサー

膨大なデータの有効な移行方法は?(Oracle10g)

現在1000万件近くデータがあるテーブルをパフォーマンス向上のため、パーティション化することを考えています。 環境は、Oracle10gです。 一旦、パーティション・テーブルを作成した後、データを移行する必要がありますが、 その方法に以下を考えました。  ・Accessのクエリを使って「追加」  ・ObjectBrowserでInsert文を出力し、それでInsert 膨大な件数ですので、どちらにしろ時間がかかります。 どちらかというと、後者のほうがいいのかなぁと思いましたが…。 もしこれ以外に有効な方法(10gに用意されているツール等)がありましたら、ご教授願えませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.2

一番簡単な方法は、邪魔になる参照制約を無効にして、 rename emp to emp_bak; create table emp ( ...... ) partition by ... ( ...... ); insert into emp select * from emp_bak; drop table emp_bak; 最後に、emp 表に索引や制約を付けて完了! っていうところでしょうか。 insert の前に索引を付けてしまうと、データ件数が多い場合、insert に膨大な時間がかかってしまう恐れがあります。

kyt1112
質問者

お礼

この方法で考えようと思います。 ありがとうございました。

その他の回答 (1)

回答No.1

insert into 移行先 select 項目名 from 移行元 のインサート文ではダメなの? テーブル名が同じなら create table 移行元_wk as select * from 移行元 のようにして退避しておくとか。 DBの外に出してしまうといろいろと面倒くさいので、私はパーティション化するときはそのようにしています。

kyt1112
質問者

お礼

試しにwhereでデータを限定して実行したところ、 数分で終了しました。 下手に外に出すよりこのほうがいいのですね。 ありがとうございました。

関連するQ&A