• 締切済み

ODBC経由のDBアクセスによる処理結果の相違

DB2へアクセスして、結果をファイルへ出力処理するモジュールがあるのですが、AS400のバージョンアップなどした後に、ファイル出力が異常に遅くなってしまいました。 原因が分からないので、何かご存知の方はお教えください。 環境 DB2へODBC経由でデータアクセス クライアント側のOS:Windows2000 モジュール SQLFetchとSQLGetDataを使用してレコードを1行ずつファイルに出力 状況 現行4万件程度ならば20秒前後で終了していた処理が、新環境では2時間でも終了しません。 しかし、レスポンスが飛躍的に向上した処理もあるので、原因が特定できません。

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>アクセスプランが変わると、全体的に影響が出るんではないのですか? >一部のテーブルのみが、異常に遅い現象なので困っています。 >しかし、レスポンスが飛躍的に向上した処理もあるので、>原因が特定できません。 全体に影響出てますよね(^^;;; 遅くなったり早くなったり。

momo_right
質問者

お礼

原因が分かりました。 単にODBCのバージョンが古かったみたいです。 回答ありがとうございました。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

アクセスプランがが変わったのでは? DB2ではたまにある話だと。 http://www.db2.jp/siryo/db2online/db2help/index.htm#nltve01

momo_right
質問者

補足

回答ありがとうございます。 これを元に調査をしてみます。ただ、DB2に関してはあまり詳しくないのでちょっと気になるのですが、アクセスプランが変わると、全体的に影響が出るんではないのですか? 一部のテーブルのみが、異常に遅い現象なので困っています。

回答No.1

サーバーのバージョンアップをしただけで、クライアントは旧環境も新環境も Windows2000 で同じということなんでしょうか?

momo_right
質問者

補足

回答ありがとうございます。補足させて頂きます。 クライアント側もNTから2000にバージョンアップしました。 全体的にレスポンスが良くなっているのに、一部のテーブルのみが遅くなっていることに苦悩しています。

関連するQ&A

  • AccessのデータをDBにODBC接続する方法

    Accessに溜まったデータをDBにODBC接続したいのですが、SQLiteかSQLserverにするか迷っています。私自身がDB初心者で、なんとなくこの2つが楽で安心して接続できるとWEBで見たため、この構成にしていますが、メリデメと言いますか、一言でいうとどう違うのか教えていただきたいです。メーカーが違うとか構成が違うのはざっくりとわかっています。 <やりたいこと> 会社のDB情報をCSVでエクスポートして、SQLiteなどDBにインポート。 DBからODBCを通してACCESSで出力。 ACCESSでデータを加工したら保存しDBにPushするイメージです。 WEBで調べてもどっちもいいということを言っていて、判断が付きません。 ちょっと急ぎで探しているため、回答を頂けたら幸いです。

  • ORACLEのDBへODBC経由でデータアクセスしています。

    ORACLEのDBへODBC経由でデータアクセスしています。 実行環境はWindows XP,開発言語はCOBOLです。 コンパイルは問題ないのですが、実行しますと、 動的SQLの使い方が間違っていますというようなメッセージが 出力されて異常終了します。(ちなみにカーソルオープンのところで終了) 下記のような動的SQLのコーディングですが、どこが問題なのでしょうか? 宜しくお願いします。 01 SQL-CSR0-DB21. 03 FILLER PIC X(35) VALUE 'SELECT M.*,ROWIDTOCHAR(M.ROWID) '. 03 FILLER PIC X(35) VALUE ' FROM DB21 M '. 03 FILLER PIC X(35) VALUE ' WHERE M.BCODE = ?   '. 78 SQL-CSR0-LEN VALUE 105.           (中略)   INITIALIZE DYNSTMT. MOVE SQL-CSR0-DB21 TO DYNSTMT-ARR. MOVE SQL-CSR0-LEN TO DYNSTMT-LEN. EXEC SQL PREPARE STMT1 FROM :DYNSTMT END-EXEC. EXEC SQL DECLARE CSR0_TN_DB21 CURSOR FOR STMT1 END-EXEC. EXEC SQL OPEN CSR0_TN_DB21 USING :BCODE_HST END-EXEC.

  • odbc接続処理が遅い

    vb.netにてプログラムを作成して使用しており、DBはpostgresqlをodbc接続にて使用しております。 ある端末で処理が極端に遅く、デバッグにて検証したところ、DB処理で時間がかかっていることがわかりました。 それに伴い同端末で別システムのoracleへのodbc接続も同じ現象となっている状況です。 この端末ではpostgresqlのodbcドライバの入れ替えを行ったことがあり、その頃から遅くなったようです。 また、別の全く同じ環境の端末では特に問題ない処理速度で稼働しております。 odbcドライバの入れ替えは何度か行っておりますが改善されません。 改善方法をご存じの方はおられますでしょうか?

  • Access2000のODBCで困っています

    Access2000(Windows)でBtrieveデータベースからODBCをつかって、 DoCmd.TransferDatabase acImport, "ODBC", "ODBC;DSN=Btrieve", acTable, "BtrieveTable名", "AccessTable名", False で、インポートすると1つのテーブルだけでレコード数が135,000程度、ファイルサイズが30MB程度(最適化直後)になってしまいます。時間も(マシンやネットワークの環境によりますが)10分近くかかってしまいます。 実際このテーブルの中で必要なレコード数は500程度なので、まるまるインポートし ないで必要なだけにして、時間とファイルサイズを稼ぎたいのですが、何か方法があるのでしょうか? いったんリンクしてから SELECT INTO や INSERT INTO すれば10秒もかからないでできます。 しかし、BtrieveTable名が毎月変わっていくので、お手上げ状態になり、上の方法を思いついたのです。 もしもこんな条件でリンクの設定ができればベストなのですが、ODBCソフトがメラント社のDatadirectというものでVBAからの設定が可能なのかどうかもわかりません。 よろしくご教授願います。

  • PerlとWin32::ODBCを使ってDBにアクセスするときに出るエラー

    こんばんわ。最近、Perlを使い始めたばかりの初心者です。解決方法がわからないので、教えて下さい。 PerlとWin32::ODBCを使ってDBにアクセスするプログラムを組んでいるます。DB接続まではうまくいくのですが、それ以降に以下のようなエラーがでます。モジュールが足りないようなのですが、どのようにして解決すればよいかわかりません。以下にエラーとコードを記入します。 コード: #!/usr/local/bin/perl $DSN = "DSN=DB1;UID=kaki388"; use Win32::ODBC; if (!($0 = new Win32::ODBC($DSN))){ print Win32::ODBC::Error(); print "失敗"; exit(); } print "成功"; $sql = "SELECT * FROM tbl1"; $0->run("$sql"); $0->sql("$sql"); @fn = $0->FieldNames(); while($0->FetchRow()){ undef %Data; %Data = $0->DataHash(); print "$Data{$fn[$i]}<BR>\n"; } $0->Close; エラーコード: 2004/08/26(11:49:14) W-SV 127.0.0.1 [80] E200042 "Can't locate object method "run" via package "Win32::ODBC=HASH(0x275020)" (perhaps you forgot to load "Win32::ODBC=HASH(0x275020)"?) at odbc.cgi line 11. " よろしくお願い致します。

    • ベストアンサー
    • Perl
  • キャッシュ処理でDBへのアクセスを軽減

    キャッシュ処理でDBへのアクセスを軽減 お世話になっております。ちょっとしたシステムを作りレンタルサーバーへアップしようとしているのですが、表題のように、「キャッシュ処理でDBへのアクセスを軽減できるか?」といった旨の連絡をサーバ会社からいただきました。 http://○○○/~と、アクセスされたときDBを参照しDB内のデータを掲載するといった仕組みなのですが(これまで何度も同じような仕組みを作ってきている)、今回、「キャッシュ処理でDBへのアクセスを軽減できるか?」といった連絡を受け、自分の行ってきたものが誤っているのか?と皆さまのご意見を伺いたく投稿した次第です。 もちろん、テーブルの構成などによっても負荷は違ってくるかと想像出来ますが、「アクセスされたときDBを参照しDB内のデータを掲載するといった仕組み」といった内容程度しか伝えていないにも関わらずなので・・ また、この表題にあるキャッシュ処理でDBへのアクセスを軽減する・・ということを実現させるには、htmlファイルなど静的ファイルを作って・・という形になるのでしょうか? お忙しいなか恐縮ですが、アドバイスなどご意見を頂戴出来れば幸いです。 宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • AccessからODBC経由でのSQLServerへの接続

    Access(2002)からSQLServer2000(8.0 Developer Edition)へODBC経由で接続にいってテーブルを参照したのですが読み取り専用でデータの変更、レコードの追加・削除等ができません。 データの変更等ができるようにしたいのですが、どうすればよいのでしょうか? 接続するときのユーザーは接続先のデータベースに対してオーナー権限を持っています。また、DSNはシステムDSN、ファイルDSNでそれぞれ作り接続を試してみましたが両方とも読み取り専用で開いてしまいました。 ちなみにPHPでODBC接続してINSERTするプログラムを作り動かしたところ問題なく動きました。 宜しくお願い致します。

  • 同時多数のDB(ODBC-Access)アクセスでOS(Win9x)ダウン

    CGIでODBC経由でAccessDBにアクセスするアプリを作っています。 複数クライアント(5-6台以上)から同時にアクセスするとOSがダウンしてしまいます。 この現象が出るのはWin9x系でWinNT系では発生していません。 どうやらDBオープン時にかなりのリソースを消費していて、リクエストがほぼ同時に 発生するとリソースを食いつぶしてOS(Win9x)がダウンしてしまうようです。 何か回避策はないでしょうか? 環境は OS: Win95,Win98SE Apache: 1.3.14 Perl: ActivePerl522+JPerl です。 プログラムの処理は、Win32:ODBCを使用して各CGIソースごとに、 開始時にDBのコネクションをオープン、終了時にクローズしています。 # DBコネクションを持続させて各CGIで使いまわしをすれば解決できる # かな?と考えていますが、はたしてそれで解決できるか? # またそれが可能なのかが分かりません。 以上、よろしくお願いします。m(_ _)m

  • ODBCでDB2に接続する時に必要なもの

    ODBCを使用して、PC(windows)から、AS400(OS/400)のデータベース(DB2)にアクセスすることを考えています。やりたいことは、データベースからあるデータを抽出して、PC上のファイルに格納することです。(データベースの更新は考えていません) 上記の前提で、PCからODBCによる接続を行うときに必要となるものは、何でしょうか。 (PC側とAS400側とでそれぞれ必要なものを教えて下さい。ODBC用のドライバが、それぞれ必要なのかなとは、思っていますが、未経験の為、その辺がよくわかりません。又、その必要なものは、DB2(PC側の場合はVB等の開発ツール)を購入した時、標準で提供されるものなのでしょうか。それとも、別途購入しないといけないものなのでしょうか。)

  • MySQL、Accessを利用したDBの設計

    会社で現在の作業をシステム化し、将来的にはマーケティング処理も行う目的でMySQLを導入し、インタフェースをAccessにしてDB設計する方針になり、多少経験があるわたしが担当することになってしまいました。今、必死でMySQLを調べているのですが、基本的な理解ができていません。助けてください!! 1.MySQLとAccessを使うには会わせてODBC、MDACのインストールも必要のようですが、サーバ/クライアントのどちらに載せればいいのですか?他に必要なソフト(ミドル)ウェアはありますか? 2.MySQLの起動とありますが、サーバが立ち上がっている間自動で動作しているものではないのですか?(DBにアクセスする前にサーバに行ってMySQLを起動し、終わったら終了させるということですか?) 3.サーバ上のDBをクライアント側のAccessで操作するには、DBのアクセス権等何をどう設定する必要がありますか? 4.何十万件ものデータ処理をAccessで耐えられますか? 5.現在Access上にあるデータはテーブル毎にODBCにエクスポートするようですがクエリ(SQLソース)、リレーションシップ等はどう移植すればいいのですか?移植で注意すること(文字コード等)とかありますか? Access2002、MySQL3.23.51、phpMyAdmin2.2.6、WindowsXPを使ってます。 MySQL解説書には上記のようなことには触れていないのでわけがわかりません。ながくてばかばかしい質問かもしれませんが教えてください。よろしくお願いします。

専門家に質問してみよう