- ベストアンサー
膨大なデータの有効な移行方法は?(Oracle10g)
現在1000万件近くデータがあるテーブルをパフォーマンス向上のため、パーティション化することを考えています。 環境は、Oracle10gです。 一旦、パーティション・テーブルを作成した後、データを移行する必要がありますが、 その方法に以下を考えました。 ・Accessのクエリを使って「追加」 ・ObjectBrowserでInsert文を出力し、それでInsert 膨大な件数ですので、どちらにしろ時間がかかります。 どちらかというと、後者のほうがいいのかなぁと思いましたが…。 もしこれ以外に有効な方法(10gに用意されているツール等)がありましたら、ご教授願えませんでしょうか?
- みんなの回答 (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 に膨大な時間がかかってしまう恐れがあります。
その他の回答 (1)
- ASD3213244
- ベストアンサー率11% (3/26)
insert into 移行先 select 項目名 from 移行元 のインサート文ではダメなの? テーブル名が同じなら create table 移行元_wk as select * from 移行元 のようにして退避しておくとか。 DBの外に出してしまうといろいろと面倒くさいので、私はパーティション化するときはそのようにしています。
お礼
試しにwhereでデータを限定して実行したところ、 数分で終了しました。 下手に外に出すよりこのほうがいいのですね。 ありがとうございました。
お礼
この方法で考えようと思います。 ありがとうございました。