● Access2000・ファイルサーバに配置したmdbファイルへの同時アクセスにおいて、mdbファイル破損を激減させるサーバ側のレジストリ設定(Access2000昔からの既知の問題の解決)

※Windows98では発生しない問題かもしれません。Win2000以降では必ず対策します。
※また、Windows98では、リンクテーブルが遅くなる問題も起こりにくいです。

~以下、本文です。~

ネットワーク越しのmdbファイル共有時のmdb破損を防ぐには、ファイルサーバ側でレジストリの「Oplocks」の設定を「無効」にします。

クライアント用とサーバ用、それぞれ、その設定内容が異なるので少しご注意ください。

(a)mdbに数台の同時アクセスがあるのにそのmdbをバックアップした時
(b)テーブルに対して多数の一括置換や全件ループ処理などをしたとき
 (数台かのクライアントが同時アクセスしているときに。)
(c)通常時に同時アクセスの数が増えたとき(本当の理由は不明)
などなど。
  
  
このTipsは、Windows2000 Serverをファイルサーバにしたときのレジストリ設定ですが、Windows2000 Serverやもしかしたらそれ以降でも使えるかもしれません。未検証ですので各自、バックアップを取ったうえで自己責任でお試しください。

なお、また、純粋なサーバOSだけではなく、XPやWin2000のクライアント用OSのパソコンを、一時的にサーバとして使う場合も「サーバ」としてみなせますので、同様の処理をします。こちらの場合も、それ以降のOS・・・Vista、7、8系、10でも使えるかもしれません。(こちらも未検証ですので自己責任でチェックしてみてください)

では、やり方をご説明します。

以下の内容の4つの「reg」拡張子のファイルを作って、状況に応じて、必要に応じて、その中のどれかをダブルクリックして実行するだけです。(「reg」拡張子にするときに「ほんとにいい?」的なメッセージが出ますがかまわずOKします。)
  
  
(イ)「EnableOplocks_値0_Win2k_XP_サーバとしての設定_Oplocks無効.reg」の内容

  
  
(ロ)「OplocksDisabled_値1_Win2k_XP_クライアントとしての設定_Oplocks無効.reg」の内容

  
  
(ハ)「EnableOplocks_値1_Win2k_XP_サーバとしての設定_Oplocks有効_デフォ値.reg」の内容

  
  
(二)「OplocksDisabled_値0_Win2k_XP_クライアントとしての設定_Oplocks有効_デフォ値.reg」の内容

  
  
基本的には、サーバ上でだけで(イ)の、
「EnableOplocks_値0_Win2k_XP_サーバとしての設定_Oplocks無効.reg」
だけをダブルクリックすればよいです。

他の3つのファイルは使いません。
設定は サーバ側だけでよく、クライアント側のほうは 基本的には不要です。

どの側も、使っているOSがサーバOSでもクライアントOSでもどちらであっても、「実質」の「サーバ側」と「実質」の「クライアント側」・・・という形で見て、基本としては「実質のサーバ側」だけに設定します。
それだけで治らなかったら「実質のクライアント側」にも設定をしてみます。

ダブルクリックするとこの場合も「本当にいいか?」みたいに聞かれるのでそのままOKして進めます。
できたら必ずパソコンを再起動します。

なお、「サーバ」、とは、クライアント用OSを使っていても限定的なファイルサーバとして使っているならそれは「サーバ」とみなせますので、そのマシン上で(イ)の「EnableOplocks_値0_Win2k_XP_サーバとしての設定_Oplocks無効.reg」をWクリックで実行します。

ひとまず以上ですが、ただ、心配だったり、(イ)だけではmdb破損が解消されないなら、一応、サーバ・クライアント、すべてのPCで、
「EnableOplocks_値0_Win2k_XP_サーバとしての設定_Oplocks無効.reg」
「OplocksDisabled_値1_Win2k_XP_クライアントとしての設定_Oplocks無効」
の2つをWクリック、PC再起動をします。

Oplock有効(デフォ)に戻すには、
「EnableOplocks_値1_Win2k_XP_サーバとしての設定_Oplocks有効_デフォ値.reg」
「OplocksDisabled_値0_Win2k_XP_クライアントとしての設定_Oplocks有効_デフォ値.reg」
の2つをWクリック、PC再起動すればOKです。
  
  
もちろん、これだけではmdb破損がゼロにはならないかもしれません。
(なるかもしれないし、検証はしていません。)

ですので、データの編集をするときはできるだけ、「いったん、サーバからクライアント側mdbの一時テーブルに目的のレコードを吸い込んでおいてから、編集、サーバへ上書き」、という方法を取ります。

連結フォームでのレコード共有での編集、という仕様をできるだけ減らすということです。
連結フォームの場合は、閲覧だけにする、ということです。
連結フォームを作ること自体は、Accessの工数を減らすための大きなメリットなので、作ることはOKです。
ただ、それを閲覧中心にする、ということです。
特に頻繁に書き換えられるテーブルは閲覧中心にします。

といっても、レコード単位で多くの従業員が共有する、という自体は、事務用途に限っては、実は、意外と多くないと思います。

それは、各お客様には「担当者」が決まっていることが多いので、「他の担当者が勝手に自分のデータを書き換える」、ということはあまり発生はしないからです。他の担当者が自分が公休のときに接客してくれたなら、それは「レコード追加」されることが多いでしょうし。
また、本人が公休ならそもそもレコード共有も起こらない場合が多いはずです。

そうじゃない業種の場合ももちろんあるかとは思いますが、「実際に複数の人が1つのレコードを同時編集する局面」が1日の間や1時間の間に頻度が多いか少ないかで判断して、多そうだったり、増えそうなら、絶対に連結フォームは閲覧のみとします。

当方では、これで数十万件のテーブルを持ったmdbをいくつか同時に扱う感じで、10数年以上 一度も、同時アクセスによってmdbファイルが壊れたことはありません。
もちろん、絶対とは言い切れませんが、試す意味はあると思います。

なお、プロの方からみれば、「それは邪道。こっちでトラブルが起こる」ということもあるかもしれませんので、(当方では調子よく動くのですが)その場合はごめんなさい。
  
  

※関連記事

Access2000・100MbpsLAN Pentium3 の「ネットワーク越しのリンクテーブル」の開く速度が遅いときの対処法(Access2000のときからあった既知の問題)

Access2000・mdbの動作速度をネットワーク越し利用でも速くする方法~結構重要~:★ ダミーテーブルの連結フォームを非表示で常時開いておく

100MbpsLAN Pentium3 でクエリが遅い場合の対処方法(データベース自体が遅い場合にもチェックしてみます。)

Access2000・mdbファイルが壊れる場面と回避方法・解決方法

Access2000・100MbpsLANのファイルサーバに配置したmdbファイルへの同時アクセスにおいて、mdbファイル破損を激減させるサーバ側のレジストリ設定(Access2000昔からの既知の問題の解決)

Excelが遅くなる場合の対処法~Accessや他のソフトからデータを貼付けした時

  
  

Access2000VBA・Excel2000VBA独学~VBAプログラミングとはどんなプログラミング方式なのか?(簡易版)

Access2000VBA・Excel2000VBA独学~用語:VBAプログラミングでの「オブジェクト」 について

ExcelでもAccessでも、顧客台帳(顧客マスタ)を作るときのヒント(できるだけ細かくしてしまう)