• ベストアンサー

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

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

  • Oracle
  • 回答数2
  • ありがとう数5

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

  • ベストアンサー
  • 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

  • Oracle10gから8iへのデータ移行について

    Oracle10g(10.1.0.2)のデータをOracle8i(8.1.6)へ移行する方法を教えていただけないでしょうか? Oracle8iからOracle10gのデータベースへアクセスして,そこでエクスポートすればいいのでしょうか?その方法もいろいろ試しているのですが,解決には至っておりません。 よろしくお願いします。

  • Oracle10gのDBからデータを抜き出したい

    Oracle10gのテーブルに登録されているデータをある条件で 抜き出しテキストデータを作成したいのですが、簡単な方法はありますでしょうか。SQLコマンドも初心者レベルですので、 良い方法を教えてください。よろしくお願いします。

  • oracle10g update件数の取得方法

    oracle10g update件数の取得方法 pl sql(stored procedure)で複数のupdate文を適用します。update後にupdateしたレコード件数をログテーブルにinsertしたいのですが、updateしたレコード件数を取得する方法はありますか?

  • 異なるOracleサーバ上のテーブルを結合する方法

    異なるOracleサーバ上のテーブルを結合する方法 IPアドレスが異なるOracleのテーブルを結合して出力したいのですが可能でしょうか?2つのテーブルをローカルにダウンロードして結合表示するとパフォーマンスが悪いので、2つのサーバから直接データをダウンロードしたいのです。2つのOracleサーバは読み取り権限しか与えられておらず、SELECT文ぐらいしか使えません。 Oracle 10G Windows 2003 Server

  • Oracle10gで1つのSQLで複数回同じテーブルを結合する場合のパ

    Oracle10gで1つのSQLで複数回同じテーブルを結合する場合のパフォーマンス向上 Oracleで1つのSQL内で同じテーブルを2回以上結合すると結果出力にかかる時間が非常に遅くなります。 例: SELECT * FROM A, B b1, B b2 WHERE a.id = b1.id AND a.id = b2.id (テーブルBを2回結合している) こういう場合にパフォーマンスを落とさない方法はありますか?テンポラリテーブルでテーブルBのレプリカを作成して使用するというのはなしです。あくまで1つのSQLで結果出力できることを前提にパフォーマンスを向上する方法を教えてください。

  • ObjectBrowserを利用してACCESSデータの取り込み

    はじめまして。お世話になります 環境:oracle10g、ObjectBrowser 実行したいこと: ACCESSのmdbファイルのテーブルをoracleに移したいです。 データに関しては別の方法で可能なのですが テーブル定義の移行がうまくいかずに悩んでいます ObjectBrowserのインポート機能では移すことはできないのでしょうか? mdb、mdeで試してみましたがうまくいきませんでした。 ログにはエラーとして IMP-00037: キャラクタ・セット・マーカーが不明です とでます。 ご存知の方ご教授お願いします。

  • VistaでOracle10gのODBCに接続

     初めまして。Harupondeです。 現在、物凄く困っていることがあります。 今回下記の環境にとあるシステムを移行することになりました。 ********************************** OS:WindowsVistaBusiness DBServer:Oracle10g ********************************** しかし、VistaにOracle10gをインストールすることは出来たの ですが、administrator以外のユーザーだとSQLplusとOBJECTBROWSERと ODBCにも接続できない状況です。 何か方法はありませんか? ユーザの希望では、PowerUserで動かしたいとのことで、 admin権限を与えることは不可能です。 因みに、移行前の環境は下記の通りです。 ********************************** OS:WindowsXPProfessional DBServer:Oracle9i **********************************  よろしくお願いします。

  • 【Oracle】Countの方法

    現在、Oracle8.1.7で開発をしております。 データの件数を数えたいのですが、やりたいことが複雑なので、うまくいきません。 以下のようなテーブルがあったとします。 テーブルA 商品名 ID 検査  A   1  ○  A   2  △  A   3  ×  B   4  -  B   1  ○  B   2  ○  B   3  △  C   1  ○  D   1  △ 商品名と、IDがキーとなっています。 商品名に対して、IDは複数存在しますが、 いくつあるかはわかりません。 このとき、1つでも『×』が存在したら、 その商品名は『×』として数えたいのです。 優先順位としては、  ×>△>○>- です。 ちなみに、上記のような場合には、 ×:1商品(A) △:2商品(B・D) ○:1商品(C) としたいのです。 データの件数が多いので、何かよい方法があったら 教えて下さいm(_ _)m

  • accessのデータをoracleへinsertする方法

    環境 vb6、access2000、oracle10g、OS:WinXP Pro accessの中にある30,000件のレコードをvb6でoracle10gに日常的にinsertしようと考えてます。(ボタンクリック時etc) insert into 『oracleのテーブル名』 select * from 『accessのテーブル名』 とは記述できないと思うのですが、30,000回 loop→insertさせると 15分くらい掛かります。何か処理速度を早くなる良い方法はありませんか?  お知恵をお貸し下さい。宜しくお願い致します。

  • 大量のバイナリーデータ(約50GB)をRDB:OracleまたはDB2で扱うには?

    スキャナーで取込んだ大量のバイナリーデータ(約50GB)をRDB:Oracleまたは、DB2で1個のテーブルとして扱いたいのですが、普通のテキスト文字、数字とは異なり、LOB(Large Object)と呼ばれるデータ構造ですので、列を分けて専用のtable spaceに置く?予定ですが、過去にこういった膨大なバイナリデータを扱った事例は、存在するのでしょうか? その際の容量制限や、パフォーマンスは? どうなんでしょうか? 今後、ますます増える傾向にあると思いますが、いかがでしょうか?