- PR -

MDBファイルはADO.NETでのアクセスでも壊れやすい?

投稿者投稿内容
LoveDevice1973
会議室デビュー日: 2003/05/29
投稿数: 8
お住まい・勤務地: 東京都
投稿日時: 2006-10-13 10:24
 さかもとさん、R・田中一郎さん、こんにちは。

引用:

さかもとさんの書き込み (2006-10-12 22:51) より:

・DBMSのインストールなどへ難しいことを書かなくて良い
・Office製品が入っているPCならすぐに利用可能(バージョンによりますが)
・初心者にも簡単にメンテナンスが可能(バックアップもコピー&ペーストでよいし)



 Accessの解説本でも、MSDEに触れているのは結構あるんですよね。

 もちろん「壊れるから」ではなくて「データ量が増えてきたら」や「将来SQL Serverに移行するなら」といった趣旨なのかも知れませんが。

 SQL Server 2005 Express Editionもファイルのコピペでイケるので楽ですね。

引用:

R・田中一郎さんの書き込み (2006-10-13 01:22) より:

既存のシステムで既にアクセスを使っている環境をメンテしてますが、オートナンバー型で値が重複するのはよくありますし、最適化、リペアしないとアクセスできなくなるなどの症状が出たりしますね。



 オートナンバー型で値が重複するんですか!? かなりの不運が重なって…とかなら解らないでもないですけど、にわかには信じがたいですね

 プロの方々ならではの「事実」なのかもしれませんね。

[ メッセージ編集済み 編集者: LoveDevice1973 編集日時 2006-10-13 11:01 ]
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2006-10-13 12:48
JET エンジンの対抗馬としては、MSDE や SQL Server 2005 Express Edition よりも SQL Server Everywhere Edition が有力かもしれません。

従来の SQL Server がインストールをおこなってサービスとして稼動させなければいけなかったのに対して、Everywhere Edition では、エンジンが単なる DLL に収まっているということらしいです。SQL Server が JET(MDB) や SQLite のように使えるというのはうれしいですね。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-10-13 12:59
引用:

LoveDevice1973さんの書き込み (2006-10-13 10:24) より:

引用:

R・田中一郎さんの書き込み (2006-10-13 01:22) より:

既存のシステムで既にアクセスを使っている環境をメンテしてますが、オートナンバー型で値が重複するのはよくありますし、最適化、リペアしないとアクセスできなくなるなどの症状が出たりしますね。



 オートナンバー型で値が重複するんですか!? かなりの不運が重なって…とかなら解らないでもないですけど、にわかには信じがたいですね

 プロの方々ならではの「事実」なのかもしれませんね。


ちょっと誤解を招く表現だったかもしれません。
実際には、1234 まで振ったものに追加する際に 1235 とならずに、この前の数値を振ろうとしてキーの重複エラーになると言う現象ですね。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2006-10-13 17:31
MDB ファイルの共有も Oracle も SQL Server も、例えばサーバ(1)に対してクライアント(N)が接続するような構成を考えた場合、クライアントが 要求を投げて、サーバ上のデータに対して抽出したり並べ替えたり書き込んだりするという構造自体には、変りは無いように見えます。
しかし、SQL を受け取って実際にデータをあれこれするプログラムがどこにあるのかを考えてみると、違いがハッキリするんじゃないでしょうか。

Oracle などの場合、SQL を受け取って処理するプログラム(いわゆる DBMS)はサーバ上で動いていますので、例えば 10 万件のレコードから 1 件だけを抽出するような問い合わせの場合、クライアントに対しては 1 件分のデータだけを返してあげれば良いので効率が良いですよね。また、複数のクライアントからの要求についても、DBMS が整合性を考えながらよろしく取り計らってくれます。競合する要求については、待たせておいたり拒否したりする事もありますが、それによってデータがおかしくなる事を防いでくれているわけです。

しかし Jet データベースエンジンは、各クライアント上でアプリケーションの一部として動作していますから、抽出や並べ替えを行うためには少なくともインデックス、もしかすると全ての表データを一旦クライアント側に持ってこないといけませんし、各クライアント上のエンジン同士はそれぞれが無関係ですから、そこそこのロックメカニズムはあるにしても、同時更新等で壊れないのが逆に不思議です。
オートナンバーにしても、単一のプロセスが発番しているわけではないので、読み書きのタイミングによっては重複する可能性もあるかも知れませんね。

LoveDevice1973
会議室デビュー日: 2003/05/29
投稿数: 8
お住まい・勤務地: 東京都
投稿日時: 2006-10-15 12:00
引用:

R・田中一郎さんの書き込み (2006-10-13 12:59) より:

実際には、1234 まで振ったものに追加する際に 1235 とならずに、この前の数値を振ろうとしてキーの重複エラーになると言う現象ですね。



引用:

きくちゃんさんの書き込み (2006-10-13 17:31) より:

しかし Jet データベースエンジンは、各クライアント上でアプリケーションの一部として動作していますから、抽出や並べ替えを行うためには少なくともインデックス、もしかすると全ての表データを一旦クライアント側に持ってこないといけませんし、各クライアント上のエンジン同士はそれぞれが無関係ですから、そこそこのロックメカニズムはあるにしても、同時更新等で壊れないのが逆に不思議です。
オートナンバーにしても、単一のプロセスが発番しているわけではないので、読み書きのタイミングによっては重複する可能性もあるかも知れませんね。



 複数のパソコン(クライアント)がMDBファイルを開くと、コピーがクライアント側に生成されるようなイメージですかね(ファイルの中身を全部持ってくるので開くときに時間がかかる)。

 で、別々のパソコンで同時に書き込みをしようとして、タイミング的に後になった方が結果として同じオートナンバーを書こうとしてしまう…。それなら納得です。

 最終的にMDBファイルに残るデータとしてはオートナンバーが重複しなさそうなのには少し安心しました。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-10-16 00:47
引用:

LoveDevice1973さんの書き込み (2006-10-15 12:00) より:

 複数のパソコン(クライアント)がMDBファイルを開くと、コピーがクライアント側に生成されるようなイメージですかね(ファイルの中身を全部持ってくるので開くときに時間がかかる)。


ちょっと違いますね。

以前にも言いましたが、データストア・エンジン・データアクセス関連のオブジェクトと分けて考えてみて下さい。

データストアに相応する mdb ファイルは一箇所にあります。
一方で、データベースエンジンである jet は各クライアントにあります。
当然、jet がデータを検索したり更新するためには、データストアに対して何らかの処理をすることになるということです。

全てをコピーするわけではありません。

引用:

LoveDevice1973さんの書き込み (2006-10-15 12:00) より:

 で、別々のパソコンで同時に書き込みをしようとして、タイミング的に後になった方が結果として同オートナンバーを書こうとしてしまう…。それなら納得です。


番号が狂う理由はわかりませんが、システムが持つ隠しテーブルに、テーブル名とオートナンバーフィールド名と、どこまでの番号が振られたのかを記録していたと思います。

で、この値が狂ってしまうために、上記のようなことになるのだと思います。
_________________
R・田中一郎 -  R.Tanaka.Ichiro’s Blog
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2006-10-16 09:11
LoveDevice1973さん、お早うございます。

引用:

 複数のパソコン(クライアント)がMDBファイルを開くと、コピーがクライアント側に生成されるようなイメージですかね(ファイルの中身を全部持ってくるので開くときに時間がかかる)。


例えば、order by field1 として並べ替えを行う場合、field1 列がインデックス化されていなければ、field1 列に格納されているデータを全レコード舐めて、比較する処理が必要になります。それが、ネットワーク越しに行われるわけです。
LoveDevice1973
会議室デビュー日: 2003/05/29
投稿数: 8
お住まい・勤務地: 東京都
投稿日時: 2006-10-19 20:25
 こんばんわ。お返事が遅くなりました。

引用:

R・田中一郎さんの書き込み (2006-10-16 00:47) より:

全てをコピーするわけではありません。




 全てをコピーしてから使っているワケではないんですね。

 どの本に書いてあったか探してみましたが見つからないので、別の意図の解説を誤解してしまったのかも知れません。

引用:

きくちゃんさんの書き込み (2006-10-16 09:11) より:

例えば、order by field1 として並べ替えを行う場合、field1 列がインデックス化されていなければ、field1 列に格納されているデータを全レコード舐めて、比較する処理が必要になります。それが、ネットワーク越しに行われるわけです。




 なんか凄く納得した気がします。集計とかのマクロを走らせるとタスクマネージャのネットワークタブのグラフがグワッと上がりました。

 Accessにしてもまだまだ勉強不足のようです (T-T)

 これからもトンチンカンな質問をさせていただくかも知れませんが、今後ともよろしくお願いいたします。

スキルアップ/キャリアアップ(JOB@IT)