mdbへの複数ユーザからのアクセスについてお教えください

解決


  2005-09-24 04:24:30  No: 125677

vbで使うデーターベースとしてaccessを使用していますが、複数のユーザが同時にアクセスした特も正常に動作するのでしょうか?
MDBは共有モードでロックしないとし、レコードレベルでロックして開くの設定にしています。
同一レコードに対し複数人が同時に処理しようとした場合、エラーとなるとおもうのですが、複数人がそれぞれ異なるレコードに処理しようとした場合はOKなのでしょうか?
また、accessて何人ぐらい同時アクセスかのうなのでしょうか?
どなたかご存知であればお教え願います


魔界の仮面弁士  2005-09-24 07:20:46  No: 125678

まずはじめに。

以下の回答では、「Access」を(dbではなく)アプリケーション名の方の意味で使っています。
なので、データベースエンジンの仕様の話では、あえてJetという呼び方をしています。
# 最近のAccessは、mdb専用ではなく、SQL Server/MSDEにも対応していますからね。

> 複数のユーザが同時にアクセスした特も正常に動作するのでしょうか?
Jetにもマルチユーザー向けの機能は実装されていますので、
この問いに対しては「Yes」と答えておきます。
実際、Microsoft PRESSの ISBN4-7561-2189-6(Jetプログラマーズガイド)にも、
LAN上でのマルチユーザー使用に関して、いろいろと解説されているぐらいですし。

しかし(既にご存知だとは思いますが)、Jetというデータベースエンジンは、
『ファイル共有型データベース』です。その仕組み上、ネットワーク上に
mdbを配置した形での運用には、あまり向かないというのが一般的な見解でしょう。
http://www.naboki.net/access/achell/achell_02.html
その点から言えば「No」であるとも言えます。

YesとNo。曖昧な答えで恐縮ですが、個人的には、LAN上の共有フォルダに
配置しての「複数PCからの同時接続」についてはお奨めしていません。
「同一PCからの複数接続」での運用であれば問題は少ないかな、という程度です。
同時更新が頻繁に起こりえるなら、MSDE等に移行した方が無難でしょう。

なお、ネットワーク環境における注意点として、下記も読んでおいてください。
http://support.microsoft.com/kb/303528/JA/#XSLTH3236121122120121120120

また、上記に関連した物として、下記も紹介しておきます。
http://www.users.gr.jp/blogs/fullmoon/archive/2004/11/25/6267.aspx

> レコードレベルでロックして開くの設定にしています。
念のために書いておきますが、Access 2003 の VBA から
  SetOption "Use Row Level Locking", True
を実行したり、あるいはAccessのオプション画面にて
[レコードレベルでロックして開く]を設定したとしても、
その設定が VB からの接続時に反映されるとは限りませんので、
その点は注意してください。

VBからそのロック設定を行うには、ADODB.Connectionにて
  Con.Provider = "Microsoft.JET.OLEDB.4.0"
  Con.Properties("Jet OLEDB:Database Locking Mode").Value = 1
  Con.Open "C:\db1.mdb"
のように設定する事になります。0がページロック、1が行ロックです。
# この設定は、Open後には変更できません。

また、ADODB.Recordsetオブジェクトに対しては、
  RS.Properties("Jet OLEDB:Locking Granularity").Value = 2
にてセットする事になります。1がページロック、2が行ロックです。
# Jet OLEDB:Database Locking Modeとは設定値が異なるので要注意。

> 同一レコードに対し複数人が同時に処理しようとした場合、エラーとなるとおもうのですが、
Jetのリファレンスには、エラーコード表も載っていますね。
3186や3260なら、リードロックデータへの更新エラーだとか、
3197なら、更新済みデータへのアクセスエラーだとか。

> 複数人がそれぞれ異なるレコードに処理しようとした場合はOKなのでしょうか?
やってみると分かるかと思いますが、同時更新に関する排他制御自体は備わっています。
が、キャッシュ更新のタイミングの問題も有りますから、非同期書き込みが行われないように
するなど、確認しておく点が幾つかあります。下記の資料を完読しておいてください。
http://www.canalian.com/workshop/access/JetCache.html

> また、accessて何人ぐらい同時アクセスかのうなのでしょうか?
# Accessへのアクセス……奇妙に聞こえますね。(汗)

同時にmdbを開くという行為自体、できる限り避けた方が良いのですけれどね…。
なので、これについては無回答とさせてください。(^^;)

一応、Jetの仕様という点からみれば、mdbファイルへの同時アクセスの上限は
最大で255ユーザーまでとされています。が、参照専用ならばともかく、データの
更新がある事も考えれば、このユーザー数は無理があるようにも思います。
限界については、実機で耐久動作検証を行って、御自身で判断してください。


  2005-09-25 11:00:52  No: 125679

まったくの同時タイミングで書き込み処理等が生じる可能性は低い利用方法ですので、サーバ/クライアントの方法で開発を実施していましたが、念のためMSDEに移行しました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加