Access2003でメモリ不足になります

このQ&Aのポイント
  • 4つのAccess2003のMDBを同時に立ち上げると、3時間後にメモリ使用量が500MBになり、動作が遅くなります。
  • 書き込み処理を行うとメモリの蓄積が発生しやすく、フォーカスを別のMDBに移すとメモリの解放が行われず、メモリの蓄積が発生します。
  • Access2003からOracle9.2へのODBC接続を利用していますが、以前のAccess97時代に比べてメモリ使用量が増えました。
回答を見る
  • ベストアンサー

Access2003でメモリ不足になります。

 Access2003をクライアントに、Oracle9iをDBサーバとして2層クライアントサーバシステムを会社で運用しています。しかし、Access2003のMDBを4つ同時に立ち上げて業務を行うためか、3時間でメモリ使用量が500MBになります。端末の物理メモリ容量は512MBのため、3時間で動作がとても緩慢になってしまいます。  MDBからDBサーバへのアクセス作業を行ううちに、メモリが完全に解放されずに残るケースがあり、それが蓄積されているようです。データベースへの参照(SELECT)よりも、書き込み処理(INSERT, UPDATE,DELETE)を行った後に使用メモリの蓄積が発生しやすいです。  また、フォームの開閉時よりも、別のMDBにフォーカスを移すと、メモリの解放が行われず、メモリの蓄積が発生しているようです。複数のMDBを起動している場合、一番最後のMDBを終了させるとメモリ使用量が元に戻ります。  背景としましては、最近、会社の基幹システムを刷新しました。刷新したといっても、ソースコードは変更せずに、Oracle7.2 Server/Access97で動作していたクライアントサーバシステムを、Oracle9.2 Server/Access2003に変更し、その変更に伴い動作がおかしくなる部分を修正しただけです。  MDBを複数立ち上げなくてはならないのは、とても基幹システムの規模が保守につぐ保守で大きくなってしまったため、MDBを機能単位で分割しているからです。  Access2003からOracle9.2へのアクセスはODBCを利用しています。クライアントのOSはWindows2000Professional sp4、サーバOSはWindowsServer2003、Oracle9.2はStandard Editionです。  Access97時代にはこれほどのメモリ使用量にはならず、現在はお昼休みに全てのMDBをいったん終了してから再度使用する運用でなんとか切り抜けています。  どなたか解決のヒントをご教授いただければ幸いです。

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

  • ベストアンサー
回答No.3

Access 2003 + IME 2003 の環境でメモリリークが発生することがあるらしいですが、Access が「応答なし」になったりはしませんか?

参考URL:
http://support.microsoft.com/default.aspx?scid=kb;ja;884086&Product=acc2003
jouji117
質問者

お礼

ありがとうございます! さっそく試してみます。

その他の回答 (2)

回答No.2

Nothingは万能ではないですので、多様しても効果は無いです。 Nothingによってメモリーの解放はされますがそれはわずかであり 大本のアクセスが使用しているメモリーはそう簡単に減るものではないです。 (おそらくDB周りの操作で使われたオブジェクト開放にNothingを使われているのだと思われます) 膨大にリークするということは、それ以外の部分に コーティングの改善が必要かと思います。

回答No.1

アクセス97とアクセス2000ではかなり内部仕様が違ってきますんで なんともいえませんが おそらソースの手直しをしないと 現状の問題解決にはならないかと思います。 つまり、ソースのコンバートはアクセス97互換であってアクセス2000に最適化されては動かないのが普通。 アクセス97はどのようなコーティングをされているのかは不明ですが、メモリー関係の処理をちゃんとすれば 問題ないはず・・・(参考書などのサンプルを流用したもはよくリークしますよ)。

jouji117
質問者

お礼

早速のご回答ありがとうございます。 Access97からAccess2003にコンバートする際は、いったんAccess200形式にコンバートし、それをさらにAccess2002-2003形式に変換しました。Access2000以上ではコードの記述がかなりシビアになっているので、その不具合部分を中心に修正を行いました。 メモリの開放についてはNothingを必ず入れているので問題はないと思っていたのですが。。。

関連するQ&A

  • MS-Accessとメモリの関係

    Accessのデータベースを使用しています。 データ本体(1GB程度)はサーバにおいてクライアントは10MB程度の重さで使用しています。PCのメモリは4GBです。 (その他のクライアントでは4GBでさくさく動いてます) で、 その運用時に、同時に開いた大したことのない小さなエクセルをプリントするときに「メモリ不足でプリントできない」というアラートが出てプリントができないときがあります。 Accessからのプリントでもこのアラートが出るときもあります。 ここで疑問なのですが、Accessで多くのページというかレコードにアクセスした場合、キャッシュのようなものがクライアント側に残るものなのでしょうか? そのために長時間Accessを使ってるとキャッシュが蓄積されてしまいメモリ不足、となるのでしょうか? でも、LANを切ればデータは一切表示されないわけで、キャッシュなど無いような気もするのですが。ではなぜメモリ不足になるのでしょう。 また、その解消方法は? ご教授よろしくお願いいたします。

  • Accessでは力不足?

    現在、仕事で個人データを取り扱っています。 Accessで作成したデータベースをWindows2000Serner (ファイルサーバー)におき複数(10名以上)のクライアント (Win98・WinMe・Win2000)で使用しています。 使用する際、各クライアントは直接サーバーのAccessファイルを開いています。 データのファイルサイズは3メガバイト強で、メインのレコード数が1300程度、 それからリレーションを組んだテーブルが複数個あります。 データは随時各クライアントが更新しています。 この状態でAccessを使用していると、動作が非常に遅かったりする 場合があります。また、開けない場合もあります。全く使用できないほど 動作が遅いわけではありませんが、ちょっと不便です。 こういった環境ではAccessを使用することは適していないのでしょうか? また、もっと賢いAccessの使いかたがあるのでしょうか?

  • Accessエラー 「メモリ不足のため、・・・」

    Accessエラー 「メモリ不足のため、・・・」 Access2003を使用しています。 レポート作成中に上書き保存や、プレビューで見ようとすると、再起動するになります。 再度、そのレポートをデザインで見ようとしても、以下のエラーが出て、開けることが出来なくなり、 初めから作り直しになります。 「メモリ不足のため、この操作を完了できません。不要なアプリケーションを 終了し、再度実行して下さい。」 WindowsVista を使用しています。 なぜでしょうか? よろしくお願い致します。 最適化したり、新しいmdbにインポートしてしてみましたが、同じです。

  • MS Accessが時間と共に重くなる

    MS Accessでシステムを構築したのですが、同じ画面を使い続けるとパフォーマンスが悪くなります。 <システムの構成> ファイルサーバにテーブルを持つmdbファイル(サーバmdb)を置き、 各PCに置かれた、フォーム、レポート、クエリ、VBAを持つmdb(クライアントmdb)から接続します。 各PCのクライアントmdbのフォームを何時間か使い続けていると、サーバからデータを取得するのが遅くなります。 (調べてみると並び替え(order by)が主な原因のようです。参考までに遅くなった時のデータ取得件数は2万件程でした。) ただし遅くなっても、1度フォームを閉じて開き直すと、同じデータでも再び速くなります。 どうすれば速くなるかは別途考えなければいけませんが、そもそも何が原因なのでしょうか。 ・朝(使い始め)は速い ・同じフォームをずっと使い続けるとデータ取得が遅くなる ・フォームを閉じて開き直すと再び速くなる メモリが関係してそうな気がしますが、MS Accessではこういうことは起こるもの(仕様)なのでしょうか。原因が知りたいのですが、何か情報はないでしょうか。

  • すぐにメモリ不足に陥ってしまいます。

    こんにちは。 会社のコンピュータが最近、すぐにメモリ不足になってしまいます。起動してすぐの状態でも、ちょっと作業するとそうなってしまい、困っています。しょっちゅう再起動かけているのですが、ひどいときには再起動直後にメモリ不足になってしまうこともあります。はっきりいってすごくイライラします。社内で相談したところ、メモリを解放してくれるフリーソフトがあるから、それをダウンロードしてみてはどうか、といわれたので早速いくつか試してみたのですが、あまり変化はありません。Cドライブの最適化もマメにかけているのですが。 最近使用しているのはAccess2000と、インターネットくらいです。イラストレーターやフラッシュも入っていますが、Access2000と同時には使用していません。 どうしたらメモリ不足になることなく、Access2000を快適に使用できるでしょうか。何かいい方法をご存知の方、もしくはオススメのメモリ解放のソフトをご存知の方は回答よろしくお願いします。 OSはWindows98、メモリは128MBです(元々は64MBだったものを増設しました)。

  • MS Accessを共有した際にファイルが壊れるのを回避する方法

    ちょっとしたツールをAccessで開発したいのですが、 Accessファイルを共有するとファイルが頻繁に壊れると伺いました。 そこで以下のような回避策を考えてみたのですが、 効果はありますでしょうか。 これでは、あまり意味がないとか、他に注意したほうが良い点等ありましたら、アドバイスいただければと思います。 なお、ツールは、50名位が使用(同時アクセスは3名~4名程度)予定で、 サーバ上にメインのmdbファイル(以下「サーバmdb」)を、各クライアントにもそれと連携するmdbファイル(以下「クライアントmdb」)を置くことを想定しています。 (1) データは全てサーバmdbで保持する。クライアントmdbには、入力用のフォームと、サーバmdbから取得したデータを一時的に保持するテンポラリのテーブルを持つ。 (2) クライアントmdbからサーバmdbにアクセスし、必要なデータをクライアントmdbにインポートする。 (3) クライアントmdbで、取り込んでデータをもとに、データの追加・修正を行い、当該データをサーバの所定のディレクトリにCSVで出力する (4) サーバmdbは、日次で、所定のディレクトに配置された、クライアントmdbから出力されたファイルを読み込み、データを更新する (5) (4)の読込み・更新作業中は、クライアントmdbからサーバmdbにはアクセスしない(外部ファイルで制御) 以上です。 要は、クライアントmdbが、直接サーバmdbを更新しないようにし、参照のみにするということです。 よろしくお願いします。

  • VB6とOracleについて

    VB6でプログラミングをしております。 今まで、データベースはAccessを使用しておりました。 サーバーにAccessのデータ(mdb)を入れておくと クライアントは全てこのサーバーのmdbを読み書き しております。 この度、Oracle Database 10g XE(無料)に以降する事になりました。 今までの感覚で行くと、サーバーにのみOracleをインストール すれば良いと考えております。が、この考えは合っているのでしょうか? 各クライアントにもインストールが必要なのでしょうか? よろしくお願い致します。

  • Access2007でldbファイルが消えず困っています。

    Access2007でldbファイルが消えず困っています。 環境 OSはXP(SP2) … サーバ/クライアント共 Office2007Pro … サーバにはインストールしてません SQL server2000 ウィルスバスター2011 Pc-Anywhere クラサバの環境で、サーバ側にデータを、クライアント側にはプログラムを配置しています。 5台のクライアントからサーバのデータを更新しています。 (サーバはデータ.mdbを、クライアントはプログラム.accdb) 困っているのは、何らかのタイミングでldbファイル(mdbを起動したときに勝手に立ち上がるもの)が消えなり、サーバの電源を入れ直して、ldbファイルを削除しない限り、システムが機能しなくなることです。 一応、データを書き込んでいるときは、ldbが発生し、書き込みが終わるとldbが消える動作をきちんとしていることを確認しています。が、何らかのタイミングでldbが消えないことがあるんです。 本来はaccess2000で作成したものでしたが、マシンの入れ替えに伴いaccess2007に変更しました。 access2000の時は排他ロックなど掛かったことはなかったんですが2007に切り替えた途端、この有様です。 元々は、データ.mdbはデータ.accdbだったんですが、頻繁にロック(読取専用)が掛かるので、苦肉の策でデータ側のみ2003形式にダウンさせました。そうしたところ、ロックが掛かる回数は激減しましたが、それでも1日に1・2回程度は排他ロックが掛かり、サーバの電源入れ直し、ldbファイルの削除をしている状況です。 原因がはっきりせず困っております。 システムが機能しなくなるのは、業務がストップしてしまうことなので、とても焦っております。 Accessに詳しい方、良いお知恵を拝借願います。 ※ mdbの名称は仮称です。

  • アクセス97のメモリ不足について

    長文ですみません。以前、アクセス97で作成した画面入力、帳票出力系のデータベース管理システムをWinNTにて使用しておりました。機器更新にあたり、Win2000搭載のパソコンにアクセス97をインストールし、システムを移行して起動テストを行いましたが、画面入力を行いその画面を印刷する機能を試したところ、アクセス97からのメッセージで『メモリ不足のため、表示を更新できません。不要なアプリケーションを終了して、再度実行してください。』とメッセージが出力され、入力画面もバグってしまいました。常駐しているアプリで、重いものはありません。メモリ拡張などの操作は可能でしょうか?また、アクセス97とWin2000の相性などもあるのでしょうか?なにか対策をご存知の方がいらっしゃいましたら、アドバイスお願い致します。

  • AccessのデータをSQLServerで

    SQLServerについては知識がないので、基本的な質問かもしれませんがお願いします。 現在、社内のシステムはAccess2003で通しています。 中小企業なのでクライアント数も15(全クライアントにAccessをインストール済み)ほどで、データ量は全部のmdbファイルで2GB程度です。 ただAccessではスタンドアロンになりがちで、複数のクライアントからの同時アクセスによるデータ更新ができにくい状況です。これについては、本来はやりたくないのですがmdbファイルを複数に分散したりして逃げています。(できれば1つのmdbファイルが理想です) また、mdbファイルの大きさやクライアントのPCスペックにもよると思いますが、Accessでの操作性がよくない(重い)です。 このような状況から考えて、自社のWindowsServer2003にSQLServer2005を導入の予定でいます。 そこで一番聞きたい質問なのですが、 「Accessで構築したmdbファイルを、SQLServerにデータを移すのみで問題はないのでしょうか」 どこへ移すのかとか、それができたとして、クライアントは今後どこから自社のシステムへアクセスしたらよいのかはまだ知識がないためまったくわかりません。。 ただ、SQLServerについての基本的なことはおさえておくつもりです。 なお、SQLServer2005を導入するのならば、無償版(Express)があるそうなのでそれで様子を見て、いろいろ不足するようでしたら上位版を考えています。

専門家に質問してみよう