プロが教えるわが家の防犯対策術!

環境 vb6、access2000、oracle10g、OS:WinXP Pro

accessの中にある30,000件のレコードをvb6でoracle10gに日常的にinsertしようと考えてます。(ボタンクリック時etc)

insert into 『oracleのテーブル名』
select * from 『accessのテーブル名』

とは記述できないと思うのですが、30,000回 loop→insertさせると
15分くらい掛かります。何か処理速度を早くなる良い方法はありませんか?  お知恵をお貸し下さい。宜しくお願い致します。

A 回答 (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_ma …

参考URL:http://otn.oracle.co.jp/software/tech/migration/
    • good
    • 0

こんにちは。




パフォーマンス向上についてですが、質問者さんとして「遅い」と
感じられるボトルネックの箇所はどこにあると思いますか?
(それがわかってしまったら質問しないでしょうけど)

例えば、データ移行の方法1つを見ても方法は沢山あります。
質問者さんのようにバッチプログラムを作って移行する方法は、
その1つに過ぎません。

劇的に向上を図りたいのであれば、ローダを使ったり、
トランザクションなどを上手に使うべきです。
現行の方法を採用するのであれば、早くする方法として、
Oracle データベースの移行先に定義されたインデックスを
すべて削除し、その状態にinsertを発行するというものです。
このとき、トランザクションで実行し、例えば、10000件ごとに
コミットをする、というようなやりかたをすれば早くなります。

動作の原理については、インデックスが無い状態ですので、
1件insertされたときに、インデックスへの書き込みが無い、
というのと、トランザクションを使用することによって、
表領域への書き込み頻度の低下、ということで向上が見込まれます。

あとは、あまり触れたくはありませんが、ミドルウェアの選択です。
VB6 からだと oo4o を使うのが最も効果的(?)らしいですが、
何を使って接続されていますか?
    • good
    • 0

アクセスの追加クエリを作ってみてはいかがでしょうか?



まず、oracleのテーブルに対し、リンクテーブルを作った
mdbファイルを用意します。

コピー元のmdbファイルにて
クエリ作成でテーブルをaccessのテーブル名
クエリ種類を追加クエリに。
追加先の指定でリンクテーブルを作ったmdbファイルを指定し、
追加したいテーブル名を指定します。

30000回ループさせるよりは速いと思うんですが・・・。
お試しください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す