Access 2002 以降の破損したデータベースをトラブルシューティングおよび修復する方法

文書翻訳 文書翻訳
文書番号: 283849 - 対象製品
難易度 : 低。シングル ユーザー コンピュータのユーザー インターフェイスに関する知識が必要です。

この資料は Microsoft Access データベース (.mdb) についてのみ記述したものです。

Microsoft Access 97 については、次の資料を参照してください。279334
Microsoft Access 2000 については、次の資料を参照してください。209137
すべて展開する | すべて折りたたむ

目次

概要

Access データベース ファイルは、Access 内部の原因で破損する場合と、外部の原因で破損する場合があります。データベースの破損の度合いには、特定のレコードに #Deleted と表示されるものから、データベース内のオブジェクトのいずれかを開くことができないもの、データベースを Access でまったく開くことができないものまであります。Microsoft Access データベース ファイルの最適化と修復を行う場合、Microsoft Access の最適化ユーティリティと修復ユーティリティが役立ちます。この資料ではこの Access ユーティリティについて説明し、破損したデータベースの修復を行う際の代替案を示します。また、データベースの破損原因に関する情報も提供します。

: Microsoft Access で使用されるデータベース エンジンである Microsoft Jet は、ファイル共有型のデータベース システムです。Microsoft Jet をマルチユーザー環境で使用すると、複数のクライアント プロセスによって、ファイルの読み取り、書き込み、およびロック操作が共有データベース上で行われます。複数のクライアント プロセスによって読み取りと書き込みが同一のデータベースに対して行われ、Jet ではトランザクション ログが使用されない (SQL Server などの高機能なデータベース システムではトランザクション ログが使用されます) ため、データベースの破損を確実に防止することは不可能です。マルチユーザー環境で 365 日 24 時間稼動するデータベース システムが必要な場合は、マイクロソフトではクライアント/サーバー型のデータベース システム (永続的なトランザクションをサポートする Microsoft SQL Server などのデータベース システム) の利用を推奨しています。

詳細

この資料で説明する手順を使用することで、通常、破損したデータベース ファイルを修復できますが、データの保全を期すために、マイクロソフトではできる限り頻繁にデータベース ファイルのバックアップ コピーを取ることを推奨しています。

最適化ユーティリティと修復ユーティリティについて

データベースの最適化

データベースを最適化すると、オブジェクトやレコードの削除によって生じたデータベース内の使用されていない領域が、最適化プロセスによって再度使用できるようになります。この操作では、データベースを新規作成し、古いデータベース内の各オブジェクトが新しいデータベースにコピーされます。新規データベースではなく元のデータベース名に対してデータベースの最適化を選択すると、最適化プロセスによって一時データベースが作成され、すべてのオブジェクトが元のデータベースから一時データベースにエクスポートされて、元のデータベースが削除されます。その後、一時データベースの名前が元のデータベースの名前に変更されます。

最適化プロセスで実行される動作の一覧を次に示します。
  • テーブルのページを再編成し、隣接したデータベース ページに配置します。これにより、データベース内での断片化が解消されるため、パフォーマンスが向上します。
  • オブジェクトとレコードの削除によって生じた使用されていない領域を解放して再利用できるようにします。オブジェクトやレコードがデータベースから削除されると、それらによって占有されていた領域は、データベースへの新規追加用に使用可能としてマークされますが、データベースを最適化するまではデータベースのサイズは小さくなりません。頻繁にオブジェクトやレコードを追加、削除、または更新するデータベースの場合は、最適化を頻繁に行うことをお勧めします。
  • オートナンバー型のフィールドの増分をリセットします。これにより、次に割り当てられる値は残っているレコードの最大値より 1 大きい値になります。たとえば、データベースのすべてのレコードが削除された場合、データベースの最適化後に追加される次のレコードでは、オートナンバー型のフィールドが 1 になります。残っているレコードのオートナンバー型のフィールドの最大値が 50 だった場合、データベース最適化後に追加される次のレコードでは、オートナンバー型フィールドの値が 51 になります。この場合、50 を超える値を持つレコードが以前に追加されていても、最適化前に削除されていた場合は、結果は同じになることに注意してください。
  • クエリ最適化プロセスで使用されるテーブルの統計を再生成します。この統計は、時間の経過に伴い最近の状況に即したものではなくなります。これは通常、トランザクションがロールバックされた場合や、データベースが正しく閉じられなかった場合 (停電や Microsoft Jet を使用するプログラムが変更を完全に終了する前にコンピュータの電源がオフにされたことなどが原因です) に発生します。
  • クエリが次回実行されるときに、すべてのクエリが再コンパイルされるようにフラグを設定します。これは、データベースの統計が変更され、以前にコンパイルされたクエリのクエリ プランが正確でなくなる可能性がある場合に重要です。
データベースの修復

修復ユーティリティでは、データベース内のテーブル、クエリ、およびインデックスのみの修復が試行されます。破損したフォーム、レポート、マクロ、モジュールなどは修復されません。

最適化ユーティリティと修復ユーティリティを実行する前の確認事項

最適化ユーティリティと修復ユーティリティを実行する前に、以下の事項を確認します。
  • 元の Access データベースと最適化後の Access データベース用に、十分な空き領域がハード ディスクにあることを確認します。つまり、現在の Access データベースのサイズの 2 倍以上の空き領域がドライブに必要です。空き領域を作成する必要がある場合は、ドライブから不要なファイルを削除するか、可能であれば空き領域の多いドライブに Access データベースを移動します。
  • [開く/実行] および [排他で開く] の両方のアクセス許可が、対象の Access データベースに必要です。そのデータベースの所有者の場合は、これらのアクセス許可を必ず設定します。データベースの所有者ではない場合は、所有者に連絡して、これらのアクセス許可を取得できるかどうかを確認してください。
  • 他のユーザーが、対象の Access データベースを開いていないことを確認します。
  • Access データベースが読み取りのみのネットワーク共有に置かれていないこと、また、ファイル属性が読み取りのみに設定されていないことを確認します。

破損したデータベースの修復の手順

以下は、破損したデータベースを修復する際に使用できる一般的な手順をまとめたものです。
  1. 破損しているデータベース ファイル (.mdb ファイル) のコピーを作成して、バックアップを用意します。
  2. .ldb ファイルが存在する場合は削除します。このファイルは、対応する .mdb ファイルを閉じてから削除する必要があります。

    .ldb ファイルは共有データベースでロックされているレコードとロックしているユーザーを特定するために使用されます。データベースが共有モードで開かれると、.ldb ファイルが対応するデータベース (.mdb ファイル) と同じ名前で作成されます。たとえば、C:\Msoffice\Access フォルダにある Northwind.mdb サンプル データベースを共有モードで開くと、Northwind.ldb というファイルが同じフォルダに自動的に作成されます。最後のユーザーがデータベースを終了すると .ldb ファイルは自動的に削除されます。ただし、例外が 2 つあります。最後のユーザーが、.mdb ファイルを含むフォルダに対して削除権限を持っていない場合と、データベースが破損している場合です。.ldb ファイルには、データベースを開いているユーザーの一覧が含まれています。
  3. 最適化ユーティリティを実行します。これを行うには、次の手順を実行します。
    1. データベースが開いている場合は、閉じます。
    2. [ツール] メニューの [データベース ユーティリティ] をポイントし、[最適化/修復] をクリックします。
    3. [最適化元データベース] ダイアログ ボックスで、最適化するファイルをクリックし、[最適化] をクリックします。
    4. [最適化先データベース] ダイアログ ボックスで、最適化後のファイル名を入力し、[保存] をクリックします。

      修復が成功しなかった場合は、それを示すメッセージが表示されます。これは、テーブル、クエリ、またはインデックスに重大な損傷が生じているために修正不可能であることを意味します。
  4. ここまでの手順で、破損したデータベースが回復できない場合は、新規のデータベースを作成して、古いデータベースから新しいデータベースへ、オブジェクトを 1 つずつインポートします。次にリレーションシップを再作成します。この方法により、データベース内の破損したシステム テーブルの問題が解決されます。

    : インポート ウィザードでデータ アクセス ページをインポートすることはできません。既存のデータ アクセス ページは新規データベースで開きます。これを行うには、次の手順を実行します。
    1. データベース ウィンドウで、[オブジェクト] タブの [ページ] をクリックします。
    2. [新規作成] をクリックします。
    3. [新しいデータ アクセス ページ] ダイアログ ボックスで、[既存の Web ページ] をクリックし、[OK] をクリックします。
    4. [Web ページの場所] ウィンドウで、データ アクセス ページの場所を指定します。
  5. テーブルに破損箇所があり、上記の手順で修復できなかった場合は、次の手順を実行します。
    1. Access で、問題のテーブルを区切り記号付きテキスト ファイルにエクスポートします。この詳細については、Microsoft Access のヘルプで、「データまたはデータベース オブジェクトをエクスポートする」を参照してください。
    2. このテーブルに関するリレーションシップをすべて削除した後、テーブルをデータベースから削除します。
    3. データベースを最適化します。
    4. テーブルとリレーションシップを再作成し、以前の状態にします。
    5. メモ帳を使用して、テキスト ファイルで不良または疑わしいデータがないかどうかを調べ、該当するレコードを削除します。ファイルをテキスト ファイル形式で上書き保存します。
    6. テキスト ファイルを新規に再作成したテーブルに再度インポートします。詳細については、Microsoft Access のヘルプで "区切り記号付き" を検索し、「データおよびオブジェクトをインポートまたはリンクする」を参照してください。Access 2003 の場合は、「データまたはオブジェクトのインポートとリンク」の「データおよびオブジェクトをインポートまたはリンクする」を参照してください。
    7. 強制的に削除されたレコードを再作成します。
  6. 破損がフォームまたはレポートに生じている場合、破損箇所はフォームまたはレポート自体にあるか、フォームまたはレポート上の 1 つまたは複数のコントロールにあります。該当するフォームまたはレポートを削除してデータベースのバックアップ コピーからインポートするか、以下のいずれかの方法を使用します。
    • 破損がフォームまたはレポート自体にある場合は、新たなフォームまたはレポートを作成し、元のフォームまたはレポートからコントロールをコピーします。
    • 破損がフォームまたはレポートのコントロールにある場合は、新たなフォームまたはレポートを作成し、新規のフォームまたはレポート上にコントロールを作成し直します。破損しているコントロールを見分ける方法はありません。すべてのコントロールを作成し直すことをお勧めします。
  7. 破損がマクロまたはモジュールに生じている場合、破損箇所はマクロまたはモジュール自体にあるか、マクロまたはモジュールの内容にあります。マクロまたはモジュールを削除してデータベースのバックアップ コピーからインポートするか、以下のいずれかの方法を使用します。
    • 破損がマクロまたはモジュール自体にある場合は、新たなマクロまたはモジュールを作成し、元のマクロまたはモジュールの内容をコピーします。
    • 破損には、モジュールに埋め込まれている ASCII 以外の文字が関与していることがあります。該当するモジュールをテキスト ファイルとして保存し、不良または疑わしいデータを削除してから、テキスト ファイルを新しいモジュールに貼り付けて再読み込みします。
    • 破損がマクロまたはモジュールの内容にある場合は、新たなマクロまたはモジュールを作成し、元のマクロまたはモジュールの内容を作成し直します。
これまでの手順でデータベースが修復できない場合は、データベースが修復できないほど破損していると考えられます。その場合は、最新のバックアップ データベースから復元するか、データベースを作成し直します。

最終的な代替案として、Microsoft Access データベースの修復サービスを提供するコンサルタントに相談する方法もあります。これは特化されたサービスのため、Microsoft Access の "Third Party and User Groups" インターネット ニュースグループに投稿してコンサルタントを探す方法が、最も効果的です。このニュースグループのアドレスは、次のとおりです。
microsoft.public.access.3rdpartyusrgrp
Microsoft Access のインターネット ニュースグループについての関連情報は、以下の「サポート技術情報」 (Microsoft Knowledge Base) を参照してください。 関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
287756 データベースの最適化後オートナンバー型のフィールドがリセットされない

.mdb ファイルの破損の原因

.mdb ファイルが破損する主な原因 3 つを以下に示します。
  • 書き込み操作の中断
  • ネットワーク ハードウェアの障害
  • 他のプログラムによって .mdb ファイルが開かれて保存された

書き込み操作の中断

Access を終了する場合は、[ファイル] メニューの [終了] または [閉じる] をクリックして正しく終了する必要があります。Access が異常終了したときにデータベースが開かれており、データが書き込まれると、Jet データベース エンジンによってそのデータベースは破損の疑いがある、または破損しているとマークされることがあります。Windows を終了せずにコンピュータの電源をオフにした場合や停電した場合にも、この現象が発生することがあります。これ以外にも、Access はシャットダウンされずにデータベースが開かれている間に、Jet によるディスクへのデータの書き込みが妨害される場合があります。この状況は、ネットワークでデータの衝突が発生した場合や、ディスク ドライブが機能していない場合などに発生します。このような処理の中断が発生すると、Jet によってそのデータベースは破損の可能性があるとマークされます。

Jet によって書き込み操作が開始されるとフラグが設定され、書き込み処理が完了するとそのフラグがリセットされます。書き込み操作が中断されると、そのフラグは設定されたままとなります。そのデータベースを再度開こうとすると、Jet によってそのフラグが設定されていることが判別され、そのデータベースが破損しているという報告が行われます。ほとんどの場合、そのデータベース内のデータは実際には破損していませんが、そのフラグが設定されていると、Jet では破損の可能性があるとして扱われます。このような場合、通常そのデータベースの最適化や修復 (またはその両方) を行うと、データベースが復元できます。ファイルが破損の疑いがあるとしてマークされる原因となったユーザーとワークステーションを特定するには、複数の方法があります。Access の Visual Basic for Applications を使用すると、特定のデータベースに記録されたユーザーの一覧を出力できます。
208449 インターネットで利用可能な Microsoft Access ニュースグループ
この方法の詳細については、この資料にある「ファイルが破損の疑いがあるとしてマークされる原因となっているユーザーとワークステーションを特定する方法」を参照してください。

ネットワーク ハードウェアの障害

Jet データベース エンジンとは無関係に破損が生じる場合があります。たとえば、ネットワーク ハードウェアの障害によって、ファイルが破損する可能性があります。データベースが配置されているコンピュータとデータベースを開いているコンピュータ間のハードウェア チェーン上にある 1 つ以上のリンクが原因となっている場合があります。これにはネットワーク インターフェイス カード、ネットワーク ケーブル、ルーター、およびハブが含まれており、この他のデバイスが使用されていることもあります。

ハードウェアが破損の原因になっている場合は、通常、最適化、修復、または Jetcomp を使用しても、.mdb ファイルを復元できません。ハードウェアによる破損は、通常、原因となっているハードウェアを修理するか交換するまで繰り返し発生します。

他のプログラムによって .mdb ファイルが開かれて保存された

他のプログラムによって開かれてから保存された .mdb ファイルを回復する方法はありません。たとえば、.mdb ファイルを Microsoft Word で開いて保存することができますが、これを行うと、バックアップ コピーから回復する以外の方法では、.mdb ファイルは回復できなくなります。誤って .mdb ファイルを他のアプリケーションで開いてしまった場合は、保存しないでください。.mdb ファイルを他のアプリケーションで開く理由はまったくありません。これを行っても、ランダムな一連の文字列が表示されるのみです。

ファイルが破損の疑いがあるとしてマークされる原因となっているユーザーとワークステーションを特定する方法

データベース破損の原因を特定するためのトラブルシューティングを実行するときに、どのユーザーがデータベースにログインしているかを確認する必要がある場合があります。Access 2002 または Access 2003 では Microsoft Visual Basic for Applications を使用して、特定のデータベースにログインしているユーザーの一覧にアクセスできます。
これを実行する方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
285822 [ACC2003] Access 2002 または Access 2003 で、データベースにログオンしているユーザーを Microsoft Jet UserRoster で調べる方法

破損を防ぐための手順

データベースの破損を防ぐ方法を以下に示します。
  • データベースの書き込み中に電源の供給が停止しないようにします。データベース書き込み中に電源供給が停止すると、データベースは破損の疑いがある状態になります。
  • ネットワーク接続が切断されないようにします。
  • 停電、手動による電源オフ、タスク マネージャによるアプリケーションの終了などにより、Microsoft Jet 接続が異常終了しないようにします。
  • プログラミングする際には、開いた DAO や ADO オブジェクトはすべて閉じるようにします。これには、Recordset、QueryDef、TableDef、Database オブジェクトなどがあります。
  • 致命的なシステム エラーが発生すると、ほとんどの場合異常終了します。データベースで致命的なエラーが発生する傾向がある場合は、データベースを開いたり修復したりできなくなる前にエラーを解決する必要があります。 上記の手順を実行する方法および使用可能なサンプル コードについての関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    285822 [ACC2003] Access 2002 または Access 2003 で、データベースにログオンしているユーザーを Microsoft Jet UserRoster で調べる方法
    致命的なシステム エラーの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    294301 Microsoft Windows 2000 環境で発生する Access 2002 の致命的なシステム エラーのトラブルシューティング方法
  • データベースを頻繁に最適化します。
  • Microsoft Windows 95 のクライアントで IPX/SPX を使用している場合は、ネットワーク上に Jet データベースが配置されている Microsoft Windows NT Server で IPX を実行しないでください。その代わりに、Windows NT Server で TCP/IP を実行し、Windows 95 クライアントで IPX と TCP/IP の 2 つのプロトコル スタックを実行するようにします (IPX/SPX を使用して Windows NT から Windows NT へ通信する場合や、Novell を使用してクライアントへ通信する場合には問題は発生しません)。
  • ループ処理の中で、開く処理と閉じる処理を大量に行うことを避けます (40,000 回を超えて、連続で開く処理と閉じる処理を行うと破損する場合があります)。

変換済みデータベースに関する注意事項

Access 2002 より前のバージョンの Access では、データベースを現在のバージョンに変換する際にエラーがあると、影響のあったオブジェクトを特定して、重要な破損の可能性について知る簡単な方法はありません。

Microsoft Access 2002 以降では、Access ファイルを変換する際にエラーが発生すると、変換エラー テーブルを開いて、これらのエラーの概要を表示することができます。変換エラー テーブルには、次の列が含まれます。

オブジェクトの種類 : エラーが発生したデータベース オブジェクトの種類、または特定の種類のオブジェクトに固有のエラーではない場合は "データベース"。

オブジェクト名 : エラーが発生したオブジェクトの名前。ただし、変換中にコンパイル エラーが発生した場合、エラーを含むモジュールの名前は指定されません。

エラーの説明 : 説明が必要な場合は、Shift キーを押しながら F2 キーを押すと、エラーの詳しい説明が表示されます。

関連情報

データベースの修復の詳細については、[ヘルプ] メニューの [Microsoft Access ヘルプ] (または [Microsoft Office Access ヘルプ]) をクリックします。次に、Office アシスタントまたはアンサー ウィザードに修復と入力し、[検索] (または [検索の開始]) をクリックして表示されるトピックを参照してください。 以前のバージョンの Access でのデータベースのトラブルシューティングの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
209137 破損した Jet 4.0 データベースの Access 2000 でのトラブルシューティングと修復の方法
279334 破損した Jet 3.5 データベースの修復方法
109953 [AC97] 破壊したデータベースの修復方法
284152 [ACC2002] Windows Me 環境でエラー発生時のトラブルシューティング

プロパティ

文書番号: 283849 - 最終更新日: 2006年10月19日 - リビジョン: 6.2
この資料は以下の製品について記述したものです。
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
キーワード:?
kbcorrupt kbtshoot kbhowto KB283849
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com