• 締切済み

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分くらい掛かります。何か処理速度を早くなる良い方法はありませんか?  お知恵をお貸し下さい。宜しくお願い致します。

みんなの回答

回答No.3

「vb6」っていうのがよく分らないですね。管理者権限とかが使えないってことでしょうか? 以下は、オーソドックスな方法です。 「SQL*Loader」 http://www.thinkit.co.jp/free/article/0707/9/7/ 「Oracle Migration Workbench」 http://otndnld.oracle.co.jp/easy/access/shift_manual/index.html

参考URL:
http://otn.oracle.co.jp/software/tech/migration/
  • SUPER-NEO
  • ベストアンサー率38% (706/1857)
回答No.2

こんにちは。 パフォーマンス向上についてですが、質問者さんとして「遅い」と 感じられるボトルネックの箇所はどこにあると思いますか? (それがわかってしまったら質問しないでしょうけど) 例えば、データ移行の方法1つを見ても方法は沢山あります。 質問者さんのようにバッチプログラムを作って移行する方法は、 その1つに過ぎません。 劇的に向上を図りたいのであれば、ローダを使ったり、 トランザクションなどを上手に使うべきです。 現行の方法を採用するのであれば、早くする方法として、 Oracle データベースの移行先に定義されたインデックスを すべて削除し、その状態にinsertを発行するというものです。 このとき、トランザクションで実行し、例えば、10000件ごとに コミットをする、というようなやりかたをすれば早くなります。 動作の原理については、インデックスが無い状態ですので、 1件insertされたときに、インデックスへの書き込みが無い、 というのと、トランザクションを使用することによって、 表領域への書き込み頻度の低下、ということで向上が見込まれます。 あとは、あまり触れたくはありませんが、ミドルウェアの選択です。 VB6 からだと oo4o を使うのが最も効果的(?)らしいですが、 何を使って接続されていますか?

回答No.1

アクセスの追加クエリを作ってみてはいかがでしょうか? まず、oracleのテーブルに対し、リンクテーブルを作った mdbファイルを用意します。 コピー元のmdbファイルにて クエリ作成でテーブルをaccessのテーブル名 クエリ種類を追加クエリに。 追加先の指定でリンクテーブルを作ったmdbファイルを指定し、 追加したいテーブル名を指定します。 30000回ループさせるよりは速いと思うんですが・・・。 お試しください。

関連するQ&A