- 締切済み
accessのロック
以前も質問したことがあるのですが、再度質問させていただきます。 Accessのロックについてです。 Windows2003Sever + Microsoft SQL ServerのマシンにあるMDBファイルを置いてあります。 これに社内LANでつながっているwindowsXP+access2000マシン10数台が それぞれWindows2003サーバマシンのmdbファイルのテーブルにリンクしているmdbファイル持っていて日々データの閲覧と更新をしています。 その際時々Access2000が以下のような以下のようなWindowメッセージを出します。 「現在ロックされているので、更新できませんでした。」 この件で困っております。 いくつか、わかっていることがあります。 ◎Windows2003Serverのこのmdbにアクセスしている人が多い時にこのメッセージが出るわけではない。使用者が2人でも出るときがある。 ◎同じフィールドへの同時書き込みの場合は他のユーザによって変更されています。。。のようなメッセージが出るので同時書き込みの問題ではなさそうだ。 ◎ロックがかかった場合、接続ユーザーみんなが開いているmdbを閉じて再度開くとロックは解除されている。 ここで質問なのですが、 ・ロックはなぜかかるのでしょうか? ・ロックの回避方法はありますか? 以上、どうかよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- gungnir7
- ベストアンサー率43% (1124/2579)
なるほど、少々ややこしいことになっているようですね。 >正確に言うと「現在ロックされているので、更新できませんでした。」 >という表示を出してロックがかかることはありませんでした ここの表現が曖昧なのですが、更新ができてしまっているということですか? 更新ができていなければ、それはロックがかかっているので正常です。 ロックがかからないということは更新できてしまい、 トランザクションの処理がザルということで、これはこれで問題なのですが・・・ >接続ユーザーみんなが開いているmdbを閉じて再度開くとロックは解除されている これはデッドロックが発生しているかもしれませんね。 ロックのかけ方が悪い可能性もあります。 詳細はソフトを作っているところに連絡してテストしてもらって下さい。
- gungnir7
- ベストアンサー率43% (1124/2579)
運用者ですか。それとも開発者ですか? 以下の回答は運用側に絞ったものになります。 ロックはアクセスが開いている間にかかるものではなく トランザクションの開始から終了までかかるものです。 トランザクションの開始と終了は開発側でコードします。 ロックを回避するのは設計側からみれば非常に危険に映ります。 更新者が更新した積もりなのに別な人が直後に更新していたら 重大な不手際が生ずる恐れがあるからです。
補足
お返事ありがとうございます。 開発に関わった運用者です。 元々Serverに置いてあるmdbはwindowsXP proマシンに置いていましたが、利用者が多くなったため、他の人にWindows2003serverの環境を構築してもらい、現在の形になっております。 以前の環境ではロックがかかることはありませんでした。 正確に言うと「現在ロックされているので、更新できませんでした。」という表示を出してロックがかかることはありませんでした。 元のmdb自体は特別なAccessVBAが動いているわけではありません。 ただテーブルがあるだけです。 接続している側も、開いたときに自分のデータが開く、 顧客の姓を入力したときに同様のデータがあるかどうか探しに行くというAccessVBAプログラムが動いているのみで特別はことはしておりません。この検索部分はServerに移動する前から動いていたものです。 Serverに移動してからこのような現象が起きるようになりましたので、ロックがかかるのはなぜかその理由を調べたいのです。
補足
お返事ありがとうございます。 >ここの表現が曖昧なのですが、更新ができてしまっているということですか? >更新ができていなければ、それはロックがかかっているので正常です。 更新は出来ていません。 >これはデッドロックが発生しているかもしれませんね。 >ロックのかけ方が悪い可能性もあります。 >詳細はソフトを作っているところに連絡してテストしてもらって下さい。 そもそもプログラムでロックをかけるようなことはしていませんので困っております。なぜ時々ロックがかかるのかがわかっておりません。 接続ユーザーたちが同じフィールドを修正すれば「他のユーザーの更新を反映しますか?」というような表示が出るので同時書き込みでロックがかかっているわけではありません。