破損した Jet 4.0 データベースの Access 2000 でのトラブルシューティングと修復の方法


難易度 : 低。シングル ユーザー コンピュータのユーザー インターフェイスに関する知識が必要です。


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


Microsoft Access 2002 または Access 2003 については、次の資料を参照してください。
283849

概要


環境的な要因により、データベース ファイルが破損した状態になることがあります。データベース破損の現象には、特定のレコードに "#Deleted" と表示されるものから、データベースのオブジェクトを開くことができない、Access でまったくファイルを開くことができないというものまであります。Microsoft Access の最適化ユーティリティと修復ユーティリティは、Microsoft Access 2000 データベース ファイルの回復と最適化に使用できる便利なツールです。この資料では、この Access 2000 ユーティリティについて説明した後、破損したデータベースを修復するその他の方法を示します。また、破損の原因に関する情報も提供します。

詳細


この資料で説明する手順を使用することで、通常、破損したデータベース ファイルを修復できますが、データを確実に保護するために、データベース ファイルのバックアップ コピーをできるだけ頻繁に作成してください。

最適化ユーティリティと修復ユーティリティ

最適化ユーティリティは、既存のデータベースにある空の領域を取り除きます。この作業は、新たなデータベースを作成し、古いデータベース内の各オブジェクトを新しいデータベースにコピーすることによって行われます。最適化後のデータベースを新しいデータベースではなく元のデータベース名で保存するように指定すると、一時的なデータベースが作成され、すべてのオブジェクトが元のデータベースから一時データベースにエクスポートされます。その後、元のデータベースが削除され、一時データベースの名前が元のデータベースの名前に変更されます。


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


最適化ユーティリティで実行される動作の一覧を次に示します。
  • テーブルのページを再編成して、各ページが隣接するデータベースのページ内に存在するようにします。


    これにより、データベース全体にわたってテーブルの断片化が解消されるため、パフォーマンスが向上します。
  • オブジェクトとレコードの削除によってできた未使用の領域を再利用できるようにします。


    オブジェクトやレコードがデータベースから削除されると、それらによって占有されていた領域は、データベースへの新規追加に使用可能とマークされます。しかし、データベースを最適化するまでデータベースのサイズは小さくなりません。オブジェクトやレコードの追加、削除、または更新が頻繁に行われるデータベースは、頻繁に最適化する必要があります。
  • オートナンバー型フィールドの増分をリセットし、次に割り当てられる値が既存のレコードの最大値に 1 を加えた値となるようにします。


    たとえば、データベースのレコードがすべて削除された場合、データベースの最適化後に追加される次のレコードでは、オートナンバー型フィールドの値は 1 になります。最適化の結果、データベースに残された最大のオートナンバー型の値が 50 の場合、次のレコードを追加するときの値は 51 になります。このことは、以前に 50 より大きい値を持つレコードが追加され、そのレコードが最適化の前に削除された場合にも当てはまります。
  • クエリの最適化処理で使用されるテーブル統計を生成し直します。


    これらの統計は、時間の経過に伴って古くなっている可能性があります。一般にこうした状況は、トランザクションをロールバックした場合や、停電、またはコンピュータの電源を切る前に Microsoft Jet を使用したプログラムを完全に終了しなかったためにデータベースが正常に閉じられなかった場合に発生します。
  • 次回のクエリ実行時に再コンパイルされるように、すべてのクエリにフラグを設定します。


    これが重要なのは、データベース統計は変化する可能性があり、以前にコンパイルしたクエリのクエリ プランは正確でなくなっている場合があるためです。

最適化ユーティリティと修復ユーティリティの実行に関する重要なガイドライン

最適化ユーティリティと修復ユーティリティをデータベースに対して実行するには、次の条件が満たされている必要があります。
  • データベース内のすべてのテーブルに対して [構造の変更] または [管理者] のセキュリティ権限を持つアカウントでログオンする必要があります。
  • Microsoft Access 2000 のユーザー インターフェイスを使用し、同じファイルを使用してデータベースを最適化する場合であっても、元のデータベースと最適化したデータベースの両方を格納できる十分なディスク容量が必要です。


    修復または最適化されたデータベースは、最適化ユーティリティの処理が成功した場合にのみ元のデータベースの名前に変更されます。
  • 対象のデータベースを開いている他のユーザーは、データベースを閉じる必要があります。


    データベースを最適化するときは、処理中に他のユーザーがデータベースにアクセスすることや、データベースを変更することがないように、Microsoft Jet で排他的にデータベースを開く必要があります。

破損したデータベースの回復

以下は、破損したデータベースを修復する際に使用できる一般的な手順をまとめたものです。
  1. 最新版の Microsoft Jet Service Pack をインストールします。


    これにより、最新の不具合修正を Microsoft Jet に確実に反映できます。
    Jet 4.0 の最新の Service Pack をダウンロードする方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    239114 [HOWTO] Microsoft Jet 4.0 データベース エンジン用の最新の Service Pack の入手方法
    ネットワーク環境で作業している場合は、最新の Microsoft Jet Service Pack をすべてのクライアント コンピュータにインストールする必要があります。ネットワーク ファイル サーバーには、Microsoft Jet を使用するアプリケーションが 1 つ以上実行されているサーバーを除き、Microsoft Jet Service Pack をインストールする必要はありません。
  2. 破損しているデータベース (.mdb) ファイルのコピーをバックアップとして作成します。
  3. .ldb ファイルが存在する場合は削除します。このファイルは、対応する .mdb ファイルを閉じてから削除する必要があります。


    .ldb ファイルは共有データベースでどのレコードがどのユーザーによってロックされているかを特定するために使用されます。データベースが共有モードで開かれると、.ldb ファイルが対応するデータベース (.mdb ファイル) と同じ名前で作成されます。たとえば、C:\Msoffice\Access フォルダにある Northwind.mdb サンプル データベースを共有モードで開くと、Northwind.ldb というファイルが同じフォルダに自動的に作成されます。最後のユーザーがデータベースを終了すると .ldb ファイルは自動的に削除されます。ただし、次の 2 つの例外があります。


    • 最後のユーザーが、.mdb ファイルが入ったフォルダを削除するアクセス許可を持っていない場合
    • データベースが破損している場合
    .ldb ファイルには、データベースを開いているユーザーの一覧が含まれています。


    トラブルシューティングでデータベース破損の原因を特定するとき、状況によっては、データベースにログインしているユーザーの確認が必要になることがあります。Access 2000 の Microsoft Visual Basic for Applications では、特定のデータベースにログインしているユーザーの一覧を出力することができます。
    この方法およびサンプル コードの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    198755 [HOWTO] Access 2000 でデータベースにログインしているユーザーをチェックする方法
  4. 次の手順に従って、最適化ユーティリティと修復ユーティリティを実行します。
    1. データベースが開いている場合は、閉じます。
    2. [ツール] メニューの [データベース ユーティリティ] をポイントし、[最適化/修復] をクリックします。
    3. [最適化元データベース] ダイアログ ボックスで、最適化するファイルをクリックし、[最適化] をクリックします。
    4. [最適化先データベース] ダイアログ ボックスで、最適化後のファイル名を入力し、[保存] をクリックします。


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


    インポート ウィザードでデータ アクセス ページをインポートすることはできません。代わりに、既存のデータ アクセス ページを新規データベースで開く必要があります。これを行うには、次の手順を実行します。
    1. データベース ウィンドウで、[オブジェクト] の [ページ] をクリックします。
    2. [新規作成] をクリックします。
    3. [データ アクセス ページの新規作成] ダイアログ ボックスで、[既存の Web ページ] をクリックし、[OK] をクリックします。
  6. テーブルに破損箇所があり、上記の手順で修復できなかった場合は、次の手順を実行します。


    1. Microsoft Access 2000 で、テーブルを (区切り記号付き) テキスト ファイルにエクスポートします。詳細については、Microsoft Access ヘルプで "区切り記号付きテキスト" を検索し、表示されるトピックの「データシートを区切り記号付きまたは固定長テキスト ファイルにエクスポートする」を参照してください。
    2. このテーブルに関するリレーションシップをすべて削除した後、テーブルをデータベースから削除します。
    3. データベースを最適化します。
    4. テーブルとリレーションシップを作成し直し、以前の状態にします。
    5. メモ帳などのテキスト エディタを使用すれば、テキスト ファイルに不適切または疑わしいデータがないかどうかを調べ、該当するレコードを削除することができます。ファイルをテキスト ファイル形式で上書き保存します。
    6. 保存したテキスト ファイルを、新しく作成したテーブルにインポートします。詳細については、Microsoft Access ヘルプで "区切り記号付きテキスト" を検索し、表示されるトピックの「区切り記号付きテキスト ファイルや固定長テキスト ファイルをインポートまたはリンクする」を参照してください。
    7. 修復できずに削除したレコードを入力し直します。
  7. フォームまたはレポートが破損している場合は、フォームまたはレポート自体が破損しているか、フォームまたはレポート上の 1 つ以上のコントロールが破損しています。破損したフォームまたはレポートを削除した後、データベースのバックアップ コピーから該当するフォームまたはレポートをインポートします。または、以下のいずれかの方法を使用します。
    • フォームまたはレポート自体が破損している場合は、新たなフォームまたはレポートを作成し、元のフォームまたはレポートからコントロールをコピーします。
    • フォームまたはレポートのコントロールが破損している場合は、新たなフォームまたはレポートを作成し、新規のフォームまたはレポート上にコントロールを作成し直します。破損しているコントロールを特定することはできないため、すべてのコントロールを作成し直す必要があります。
  8. マクロまたはモジュールが破損している場合は、マクロまたはモジュール自体が破損しているか、マクロまたはモジュールの内容が破損しています。破損したマクロまたはモジュールを削除した後、データベースのバックアップ コピーから該当するマクロまたはモジュールをインポートします。または、以下のいずれかの方法を使用します。
    • マクロまたはモジュール自体が破損している場合は、新たなマクロまたはモジュールを作成し、元のマクロまたはモジュールの内容をコピーします。
    • モジュールに埋め込まれている ASCII 以外の文字が破損の原因になっていることがあります。破損しているモジュールをテキスト ファイルとして保存し、不適切または疑わしいデータを削除してから、テキスト ファイルを新しいモジュールに貼り付けて再読み込みします。
    • マクロまたはモジュールの内容が破損している場合は、新たなマクロまたはモジュールを作成し、元のマクロまたはモジュールの内容を作成し直します。
これまでの手順でデータベースを修復できない場合は、破損状況が深刻でデータベースを修復できない可能性があります。その場合は、最新のバックアップ データベースを復元するか、データベースを作成し直します。


最終的な手段として、Microsoft Access データベースの修復サービスを提供するコンサルタントに相談する方法もあります。これは特化されたサービスのため、コンサルタントを見つけるには、Microsoft Access の "Third Party and User Groups" インターネット ニュースグループに投稿するのが最も効果的です。このニュースグループのアドレスは、次のとおりです。
microsoft.public.access.3rdpartyusrgrp
Microsoft Access インターネット ニュースグループの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
150057 [ACC] インターネットで利用可能な Microsoft Access ニュースグループ

.mdb ファイルの破損の一般的な原因

Access または Jet の .mdb ファイルの破損には、4 つの主要な原因があります。

書き込み操作の割り込みにより、破損またはその疑いがあるとしてデータベースがマークされている

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


Jet によって書き込み操作が開始されるとフラグが設定され、書き込み操作が完了するとそのフラグがリセットされます。書き込み操作が中断されると、このフラグが設定されたままとなります。データベースを再度開くとき、Jet によってフラグが設定されていると判断され、データベースが破損していると報告されます。ほとんどの場合、実際にはデータベースのデータは破損していませんが、このフラグが設定されていると Jet では破損の可能性があるものとして扱われます。このような場合、データベースの最適化や修復 (またはその両方) を実行することで、通常はデータベースを復元することができます。ファイルに破損の疑いがあるとマークされる原因となったユーザーやワークステーションを特定する方法があります。Jet でファイルが疑わしいとマークされる原因となったユーザー、ワークステーション、またはその両方を特定するには、この資料の「ファイルが疑わしいとマークされる原因になっているユーザーやワークステーションを判別する方法」を参照してください。

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

この場合、ファイルの破損と Jet データベース エンジンとは無関係です。外部の何らかの原因によって、ファイルが文字どおり破損しています。データベースが配置されているコンピュータとデータベースを開いているコンピュータ間に存在する一連のハードウェア上にある 1 つ以上のリンクが原因となる場合があります。これにはネットワーク インターフェイス カード、ネットワーク ケーブル、ルーター、およびハブが含まれますが、それ以外のデバイスが原因になることもあります。


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

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

他のプログラムで開いて保存された .mdb ファイルを回復する方法はありません。たとえば、.mdb ファイルを Microsoft Word で開いて保存することができます (.mdb ファイルを他のアプリケーションで開いても拡張文字が表示されるだけで意味がありません)。この方法でファイルを保存した場合、Access でその .mdb ファイルを開くときに、データベース パスワードを要求するプロンプトが表示されます。この現象は、Access でデータベース パスワードを設定していないファイルでも発生します。こうした状況でパスワードのプロンプトが表示されるのは、Access でファイルを開く際に確認される最初のバイト範囲がデータベース パスワードの格納場所であるためです。そのバイト範囲に破損したデータが含まれているファイルは、パスワードで保護されているものとして扱われます。この場合、パスワード プロンプトを回避できたとしても、バイナリ構造にスクランブルがかかっていて (暗号化されていて) Access で読み取ることができないため、やはりデータベースを回復することはできません。この場合の唯一の解決方法として、ファイルのバックアップ コピーを回復する必要があります。
この問題の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
243895 [ACC2000] 設定していないデータベース パスワードを要求される

Jet データベース エンジンのバージョンの不一致

環境で複数のバージョンの Jet データベース エンジンを実行している場合にも、Access データベースが破損することがあります。Jet のバージョンによって書き込みの方法が異なるため、そのことがデータベース破損の原因になる可能性があります。

ファイルが疑わしいとマークされる原因になっているユーザーやワークステーションを判別する方法

トラブルシューティングでデータベース破損の原因を特定するとき、状況によっては、データベースにログインしているユーザーの確認が必要になることがあります。Access 2000 の Microsoft Visual Basic for Applications では、特定のデータベースにログインしているユーザーの一覧を出力することができます。


この方法およびサンプル コードの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
198755 [HOWTO] Access 2000 でデータベースにログインしているユーザーをチェックする方法

破損を防ぐために使用できる方法

  • データベースの書き込み中に電源の供給が停止しないようにします。データベース書き込み中に電源の供給が停止すると、データベースは破損の疑いがある状態になります。
  • ネットワーク接続が切断されないようにします。
  • 停電、手動による電源オフ、タスク マネージャによるアプリケーションの終了などによって Microsoft Jet の接続が異常終了しないようにします。
  • プログラミングでは、開いた DAO や ADO のオブジェクトはすべて閉じるようにします。このようなオブジェクトには、Recordset オブジェクト、QueryDef オブジェクト、TableDef オブジェクト、Database オブジェクトなどがあります。

  • 致命的なシステム エラーはそのほとんどが異常終了の原因になります。データベースで致命的なエラーが頻繁に発生する場合は、データベースを開いたり修復したりできなくなる前にエラーを解決する必要があります。
    致命的なシステム エラーの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    208488 [ACC2000] Access 2000 でのページ フォールトのトラブルシューティング方法
  • データベースを頻繁に最適化します。
  • Microsoft Windows 95 ベースのクライアントで IPX/SPX を使用している場合は、Jet データベースが配置されているネットワーク上の Microsoft Windows NT ベースのサーバーで IPX を実行しないでください。代わりに、Windows NT サーバーで TCP/IP を実行し、Windows 95 クライアントで IPX と TCP/IP のデュアル プロトコル スタックを実行するようにします (IPX/SPX を使用して Windows NT から Windows NT へ通信する場合や、Novell を使用してクライアントへ通信する場合には問題は発生しません)。
  • データベースを開いて閉じる操作をループ処理によって 40,000 回から 1,000,000 回以上連続して繰り返すことは避けます。
  • データベース ファイルにアクセスするすべてのクライアント コンピュータに、最新の Microsoft Jet Service Pack がインストールされていることを確認します。

関連情報


データベースの修復の詳細については、[ヘルプ] メニューの [Microsoft Access ヘルプ] をクリックし、Office アシスタントまたはアンサー ウィザードに「修復」と入力し、[検索] をクリックして、表示されるトピックを参照してください。


破損したデータベースの修復に利用できるダウンロード可能なユーティリティの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
273956 [ACC2000] ダウンロード センターで入手可能な Jet 最適化ユーティリティ
以前のバージョンの Access でのデータベースのトラブルシューティングについての関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
279334 [ACC97] 破損した Jet 3.5 データベースの修復方法
109953 [AC97] 破壊したデータベースの修復方法

関連情報


この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 209137 (最終更新日 2004-07-28) を基に作成したものです。