マイクロソフトの Access でデータベースに矛盾があるとメッセージダイアログが出力されることがあります。実際に出力されましたのでその備忘録です。
スポンサーリンク
データベースが矛盾状態
Access データベースを開こうとすると、以下のように矛盾状態があるといってデータベースを開くことができなくなることがあります。この状態では Excel から VBA による接続が失敗しますので、それをきっかけに気づくことが多いかと思います。
この警告が発生したファイルがあるのは、Access がインストールされていない Windows Server 2008R2 です。必要があれば、Windows7 / Access 2007 or 2010 がインストールされた端末から共有されたこのファイルを開いています。
回復の実行以外の選択肢はありませんので、OK を押して回復します。
その他の方法によるリカバリの可能性もあるかと思いますので、ファイル自体はバックアップしておくと良いでしょう
回復の実行
回復の実行が正常に終了すると以下のダイアログが出力されます。幸い回復処理に失敗したことはありません。運がよいだけかもしれませんが。
データベースは破損する
「 最適化と修復を使用してデータベース ファイルの問題を予防および修復する 」 によると、データベースが破損する原因が以下のように記載されています。
データベース ファイルは破損することがある
特定の状況で、データベース ファイルが破損することがあります。データベース ファイルをネットワーク上で共有し、複数のユーザーが並行して直接操作する場合、そのファイルには破損のリスクが若干あります。ユーザーがメモ型フィールドのデータを頻繁に編集する場合、破損のリスクはやや大きくなり、リスクは時間と共に大きくなっていきます。このリスクは、[ データベースの最適化/修復 ] コマンドを使用することで抑えることができます。
今回出力されたメッセージはデータベースが矛盾しているというものでしたので破損とは違うのかもしれませんが、ネットワーク上に共有して使用している状態ですので、これが原因の可能性が高いと思っています。
最近は、このデータベースの破損が度々発生しています。しかし、アプリケーションを変更するのは大変なので都度データベースの回復を実行しています。
Access 使うならバックアップは最低限必要
いつまでも回復処理が成功するとは限りませんので、バックアップは最低限必要です。前述のリンクには以下のように Access ファイルを使うポイント記載されています。基本的なことから抑えておく必要があります。
ネットワークで共有して使うことはやめましょうということのようです。残念です。
- 必ずバックアップを作成する 修復処理中に、破損したテーブルから一部のデータが切り捨てられる場合があります。このデータは、バックアップから復元できることがあります。日常的なバックアップ処理に加えて [データベースの最適化/修復] コマンドを使用する前には、バックアップを作成してください。バックアップは、[データベースのバックアップ] コマンドで作成できます。
- Microsoft Office ボタン をクリックし、[管理] をポイントします。次に、[このデータベースの管理] の [データベースのバックアップ] をクリックします。
- 最適化と修復を自動化する ネットワーク上で複数のユーザーが単一のデータベース ファイルを共有する場合を除き、最適化と修復を自動で行うようにデータベースを設定します。
- システム修復のエラー テーブルに注意する 破損したデータベース ファイルの中に、Access が修復できないオブジェクトがある場合、該当するオブジェクトが MSysCompactErrors というテーブルに記録されます。エラーがあった場合、MSysCompactErrors テーブルがデータシート ビューで開きます。データベースが破損する前に作成したデータベース バックアップがある場合、修復後のデータベースにバックアップからインポートする必要があるオブジェクトを、MSysCompactErrors テーブルから判断できます。
- データベースへの排他的アクセスを使用して [データベースの最適化/修復] コマンドを使用する データベースを使用しているユーザーが単一の場合は、該当セクションの残りの手順をスキップして、そのまま「データベースを最適化および修復する」の手順に移ることができます。最適化と修復の操作を行うときには、他のユーザーの操作に影響を及ぼす可能性があるため、データベース ファイルに対する排他的アクセスが必要です。最適化と修復の操作を実行する予定を他のユーザーに通知し、その間はデータベースの使用を控えてもらうようにします。データベースの使用を控えてもらう時間をユーザーに伝えます。最適化と修復の操作を定期的に実行している場合は、処理に要した時間を記録しておきます。そうすることで、必要な時間を的確に予測でき、データベースの使用を控えてもらう時間をユーザーに指示できます。
- 最適化と修復の操作を実行できる十分なアクセス許可を取得する 以前のバージョンのデータベース ファイルを使用している場合、ワークグループに属していると、データベースの最適化と修復を実行できないことがあります。十分な権限がない場合にデータベースの最適化と修復を行うには、ワークグループ管理者に問い合わせてください。
Pingback: [ Access-VBA ] データベースを最適化する ( DBEngine.CompactDatabase ) – 勉強ダイエット