こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

投稿日時 - 2007-08-23 19:07:42

QNo.3280214

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&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_manual/index.html

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

投稿日時 - 2007-08-26 21:18:45

ANo.2

こんにちは。


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

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

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

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

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

投稿日時 - 2007-08-25 08:12:12

ANo.1

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

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

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

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

投稿日時 - 2007-08-24 08:23:54

あなたにオススメの質問