ACC2002:如何修復和排解受損 Access 2002 資料庫的疑難

文章翻譯 文章翻譯
文章編號: 283849 - 檢視此文章適用的產品。
本文曾發行於 CHT283849
初學者:需要知道如何在單一使用者的電腦上操作使用者介面。

本文只適用於 Microsoft Access 資料庫 (.mdb)。

全部展開 | 全部摺疊

在此頁中

結論

無論在 Access 的內部和外部,都可能發生幾項事件,足以損毀您的資料庫檔案。受到損毀的資料庫,其癥狀小自某些記錄出現 #Deleted 的字眼,大至無法開啟資料庫的其中一個物件,或者無法在 Access 開啟該資料庫檔案都是。Microsoft Access 的「壓縮及修復」公用程式可以幫助您嘗試最佳化 Microsoft Access 2002 資料庫檔案的功能,或者修復損毀的 Microsoft Access 2002 資料庫檔案。本文將說明這個 Access 2002 公用程式,並且提供其他的方法,讓您修復損毀的資料庫,同時也將告訴您資料庫損毀的導因。

注意:Microsoft Jet 是 Microsoft Access 所用的資料庫引擎,它是一個檔案共用資料庫系統。當 Microsoft Jet 用在多使用者環境時,會有好幾個用戶端處理程序在共用的資料庫進行檔案讀取、寫入和鎖定作業。由於多個用戶端處理程序是讀取和寫入同一個資料庫,而且 Jet 並不使用交易記錄 (像 SQL Server 這種更進階的資料庫系統就會使用),因此不可能有效防止任何及所有的資料庫損毀狀況。如果您需要資料庫系統一天 24 小時,一週七天,不斷的在多使用者環境下執行,Microsoft 建議您使用一個真正支援長久交易的主從架構資料庫系統,如 Microsoft SQL Server。

其他相關資訊

雖然本文所提的步驟,通常都可以順利將損毀的資料庫檔案復原,但為了保護資料起見,Microsoft 還是建議您三不五時地將資料庫檔案備份。

壓縮及修復公用程式的說明



壓縮資料庫

當您壓縮資料庫時,壓縮處理程序會重新取得資料庫中由物件以及記錄刪除作業所建立的未使用空間。其方法是建立新的目的地資料庫,以及將舊資料庫中的每一個物件,複製到新資料庫當中。如果您選擇將資料庫壓縮到原始資料庫名稱,而不是新資料庫,那麼壓縮處理程序會建立一個暫時資料庫,將所有物件從原始資料庫匯出到暫時資料庫,然後移除原始資料庫,接著再將暫時資料庫重新改成原始資料庫的名稱。

下面是壓縮處理程序所要執行之動作的清單:
  • 重組網頁表,讓它們與資料庫網頁相鄰。此舉會將效能提升,因為資料表不再分割成片段,散落在資料庫中。
  • 它會重新取得由物件及記錄刪除作業所建立的未使用空間。當您從資料庫刪除物件或記錄時,它們所佔用的空間,就會針對新加入資料庫的物件標示為可以使用。但是除非您壓縮資料庫,否則資料庫大小是不會減少的。如果資料庫經常加入、刪除和更新物件和記錄,壓縮的頻率也要相對提高。
  • 這個作業會重新設定遞增的 [自動編號] 欄位,讓下一個配置的值,比現有記錄中的最高值再高出 1。比方說,如果資料庫中所有的記錄已被刪除,那麼在壓縮資料庫之後,再加入下一筆記錄時,[自動編號] 欄位的值就是 1。如果資料庫中現有的最高 [自動編號] 值是 50,那麼在壓縮資料庫之後,再加入下一筆記錄時,[自動編號] 欄位的值就是 51。請注意,即使之前加入過含有高於 50 筆的記錄,但只要在壓縮之前被刪除,都可以套用這個解釋。
  • 它會重新產生查詢最佳化處理程序所用的資料表統計資料。這些統計資料可能會過期。如果交易被復原,或者如果因為意外停電,或是因為正在使用 Microsoft Jet 的程式將更改動作完全結束之前,電腦就被關機,而使資料庫沒有妥善關閉,這時候就會發生這種情況。
  • 這會將所有的查詢都設定旗標,以便在下次執行查詢時重新編譯。這一點相當重要,因為資料庫統計資料可能會改變,因此之前編譯的查詢當中,查詢計劃不見得正確。
修復資料庫

修復處理程序只會嘗試修復資料庫中的資料表、查詢和索引,而不會嘗試修復損毀的表單、報告、巨集或模組。

在執行壓縮及修復公用程式之前,必須具備哪些條件



在您對資料庫執行壓縮及修復公用程式之前,務必先符合下列幾個條件:
  • 硬碟上必須具備足夠的可用儲存空間,來存放原始和壓縮版的 Access 資料庫。換句話說,您必須具備足夠的可用儲存空間,至少是該磁碟機上 Access 資料庫的兩倍。如果還需要釋放部分空間,請從磁碟機刪除任何不要的檔案,可能的話,也可以將 Access 資料庫移到可用空間較大的磁碟機。
  • 您對 Access 資料庫必須具備開啟/執行權限和獨佔開啟權限。如果您擁有資料庫,請務必設定這些權限。如果沒有擁有資料庫,請聯絡其擁有者,看看您是否具備這些權限。
  • 請確定沒有使用者將 Access 資料庫保持在開啟狀態。
  • 請確定 Access 資料庫不在唯讀網路共用區,或者將它的檔案屬性設為唯讀。

修復受損毀資料庫的步驟



下列步驟是可用來嘗試修復受損資料庫常用的方法;
  1. 將損毀的資料庫 (.mdb) 檔建立一份副本留底。
  2. 刪除 .ldb 檔 (如果有的話)。在刪除 .ldb 檔之前,必須先關閉對應的 .mdb 檔。

    .ldb 檔可以判定哪些記錄被鎖定在共用資料庫中,以及被誰鎖定。如果資料庫對外開放讓大家共用,.ldb 檔就會以對應之資料庫 (.mdb) 的相同名稱建立。比方說,如果您開啟位於 C:\MsOffice\Access 資料夾的 Northwind.mdb 範本資料庫供大家共用,電腦便會自動在同一個資料夾中建立 Northwind.ldb。如果前一個使用者結束資料庫時,發生兩個例外狀況 (當前一個使用者沒有刪除權限可以刪除含有 .mdb 檔的資料夾,或者資料夾損毀),.ldb 檔便會自動刪除。.ldb 檔會列出哪些使用者將資料庫保持在開啟狀態。
  3. 執行壓縮及修復公用程式。其步驟如下:
    1. 如果資料庫已經開啟,請將它關閉。
    2. [工具] 功能表指向 [資料庫公用程式],然後再按一下 [壓縮及修復資料庫]
    3. [從哪裡壓縮資料庫] 對話方塊中,選取您要壓縮的檔案,然後再按一下 [壓縮]
    4. [壓縮資料庫成為] 對話方塊中,輸入新的檔名,然後再按一下 [儲存]

      如果壓縮和修復不成,就會收到一則訊息通知您。換句話說,就是損毀過於嚴重,無法修正。
  4. 如果前述步驟無法將損毀的資料庫復原,請另外建立新的資料庫,將物件從舊資料庫一一匯入新資料庫當中,然後再重建關係。這項技術可以解決資料庫中受損系統資料表的問題。

    注意:您不可以用「匯入精靈」匯入資料頁,只能開啟新資料庫當中現有的資料頁。其執行下列步驟:
    1. 在 [資料庫] 視窗按一下 [物件] 下方的 [網頁]
    2. 按一下 [新增]
    3. [新增資料頁] 對話方塊按一下 [現存的網頁],然後再按一下 [確定]
    4. 在 [尋找網頁] 視窗中,瀏覽到該資料存取頁的位置。
  5. 如果損毀的地方是在資料表中,而且前述步驟沒有將它復原,請嚐試下列步驟:
    1. 在 Microsoft Access 2002 中,將該資料表匯出到 ASCII (分隔的文字) 檔。有關本主題的詳細資訊,請在〈Microsoft Access 說明索引〉尋找「delimit」這個字,然後檢視〈匯出資料或資料庫物件〉(Export data or database objects) 這個主題。
    2. 刪除與此資料表有關的任何關係,然後再從資料庫中刪除該資料表。
    3. 壓縮資料庫。
    4. 重新建立該資料表以及它所擁有的任何關係。
    5. 使用文書處理器檢查 ASCII 檔,看看有沒有怪異或不良的資料,然後移除那些記錄。接著再將該檔以 ASCII 文字檔案格式儲存起來。
    6. 將這個 ASCII 檔重新匯入到剛剛重建的資料表。其他有關本主題的詳細資訊,請在〈Microsoft Access 說明索引〉尋找「delimit」這個字,然後檢視〈匯入或連結資料和物件〉(Import or link data and objects) 這個主題。
    7. 重新輸入您被迫刪除的記錄。
  6. 如果是表單或報告受損,則損毀部份可能是表單或報告本身,也可能是在表單或報告上的一或多個控制項內。您可以刪除表單或報告,將它從資料庫的備份副本匯入,或者使用下列一個選項:
    • 如果損毀部份是在表單或報告本身,請另外建立一個新的表單或報告,然後從原始表單或報告複製控制項。
    • 如果損毀部份是在表單或報告的控制項內,請建立一個新的表單或報告,然後在新的表單或報告上,重新建立這些控制項。由於您無法得知哪些控制項受損,因此最好能夠重建所有的控制項。
  7. 如果是巨集或模組受損,則損毀部份可能是巨集或模組本身,也可能在巨集或模組的內容當中。您可以刪除巨集或模組,將它從資料庫的備份副本匯入,或者使用下列一個選項:
    • 如果損毀部份是巨集或模組本身,請另外建立新的巨集或模組,然後複製原始巨集或模組的內容。
    • 損毀部份可能會涉及模組內嵌的非 ASCII 字元。請將模組儲存為文字檔,移除任何不良或奇怪的資料,然後將文字檔重新載入到新的模組當中。
    • 如果損毀部份是在巨集或模組的內容當中,則必須建立新的巨集或模組,然後重新建立原始巨集或模組的內容。
如果上述步驟無法修復資料庫,很可能就是資料庫受損過重,無法修復。如果是這樣,最好能夠還原前一個備份資料庫,或者重建資料庫。

最後一個方法是,有的顧問會提供 Microsoft Access 資料庫修復服務。由於這是相當專門的服務,因此尋找顧問最有效的方法,是在 Microsoft Access 的〈Third Party and User Groups〉網際網路新聞群組當中,發佈一則訊息,下面就是新聞群組位址:
microsoft.public.access.3rdpartyusrgrp
其他有關 Microsoft Access 網際網路新聞群組的詳細資訊,請參閱下面這篇 Microsoft Knowledge Base 的文章:
208449 ACC2000:Microsoft Access Newsgroups Available on the Internet

.mdb 檔案損毀的導因有哪些?



導致 .mdb 檔損毀的原因主要有下列三種:
  • 寫入作業中斷
  • 網路硬體錯誤
  • 在另一個程式開啟和儲存 .mdb 檔

寫入作業中斷



請記住,結束 Access 時,一定要在 [檔案] 功能表上按一下 [結束][關閉],妥善的結束它。如果 Access 異常關閉時,資料庫是在開啟狀態,或者正在寫入資料,Jet 資料庫引擎可能會將資料庫標示為可疑/已經損毀。如果突然斷電,或者您以手動方式關機時,但沒有先結束 Windows,就有可能發生這種狀況。還有其他情況是,雖然沒有關閉 Access,但在開啟狀態下將資料寫入磁碟時,仍然會干涉到 Jet。比方說,當網路發生資料衝突或者當磁碟機故障時,就會發生這種狀況。如果發生上述任何一種中斷情形,Jet 也許會指出該資料庫有損毀的可能。

當 Jet 開始進行寫入作業時,它會設定旗標,等作業完成時再重設旗標。如果寫入作業中斷時,旗標仍然保持在設定狀態。當您再次開啟這個資料庫時,Jet 會判定該旗標已經設定,然後報告它已經損毀。在大部份的情況下,資料庫中的資料不見得真的損毀,但設定旗標還是會警告 Jet 可能已經損毀。如果是這樣,通常只要壓縮或修復資料庫 (或雙管齊下),就可以還原資料庫了。還好,我們還有辦法判斷哪一個使用者和工作站要負責將檔案標示為可疑檔案。您只要在 Access 2002 使用 Microsoft Visual Basic for Applications,就可以輸出一份登入特定資料庫的使用者清單。 如需有關如何執行,以及可以使用之範例程式碼的相關資訊,請按一下下面的文章編號,檢視 Microsoft Knowledge Base 中的文章:
285822 HOW TO:Determine Who Is Logged onto a Database by Using Microsoft Jet UserRoster in Access 2002.
有關其做法的詳細資訊,請參閱本文後面的「如何判斷哪些使用者/工作站使檔案標示為可疑檔案」一節。

網路硬體錯誤



有時候,即使不牽涉到 Jet 資料庫引擎,也有可能發生損毀的情形。比方說,網路硬體錯誤可能會導致檔案損毀。原因可能是資料庫常駐的電腦以及將資料庫保持在開啟狀態的電腦之間,硬體鏈結中的一或多個鏈結所導致。這份清單包含 (但不限於) 網路介面卡、網路纜線、路由器及集線器。

硬體損毀通常是從無法藉由使用壓縮、修復或 Jetcomp 來還原的 .mdb 檔看出。硬體損毀通常會週而復始的出現,直到問題所在的硬體被修復或換掉為止。

在另一個程式開啟和儲存 .mdb 檔



以另一個程式開啟再儲存的 .mdb 檔是無法復原的。比方說,您可以在 Microsoft Word 開啟和儲存 .mdb 檔,但是一旦這麼做之後,.mdb 檔就永遠無法復原,除非是從備份副本復原。如果您不慎在另一個應用程式中開啟 .mdb 檔,千萬不要儲存它。其實,在另一個應用程式開啟 .mdb 檔根本毫無意義可言,因為即使開啟了,也只能看到一系列好像隨機存在的字元。

防止損毀的步驟



下面是防止資料庫損毀的步驟:
  • 在進行資料庫寫入作業時,要避免斷電情形發生。在進行資料庫寫入作業時斷電,很可能會使資料庫變成可疑狀態。
  • 避免中止網路連線。
  • 避免 Microsoft Jet 連線異常終止,如斷電、手動關機以及讓工作管理員關閉應用程式等。
  • 在設計程式時,關閉所有您開啟的 DAO 和 ADO 物件。例如,RecordsetQueryDefTableDefDatabase 物件都是。
  • 嚴重的系統錯誤幾乎都是異常終止的導因。如果您的資料庫很容易出現嚴重錯誤,最好在資料庫損毀過重,無法開啟或復原之前,先將錯誤解決掉。 如需嚴重系統錯誤的詳細資訊,請按一下下面的文章編號,檢視 Microsoft Knowledge Base 中的文章:
    294301 ACC2002:How to Troubleshoot Fatal System Errors in Access 2002 Running on Microsoft Windows 2000
    284152 ACC2002:如何在 Windows Millennium 上的 Access 2002 中排解嚴重的系統錯誤
  • 經常壓縮資料庫。
  • 不要在網路上 Jet 資料庫所在的 Microsoft Windows NT Server 上 (用戶端是採用 IPX/SPX 的 Microsoft Windows 95) 執行 IPX。請在 Windows NT Server 上執行 TCP-IP,而在 Win95 用戶端上執行 IPX 和 TCP-IP 的雙重通訊協定堆疊 (Windows NT 對採用 IPX/SPX 的 Windows NT 不會產生這個問題發生,Novell 對任何用戶端也不會)。
  • 避免在迴圈中有大量的開啟關閉作業 (連續超過 40,000 個開啟關閉作業,可能會導致損毀)。

轉換的資料庫須知



在 Access 2002 之前的 Access 版本當中,如果您將資料庫轉換為目前版本時發生錯誤,是很難判斷哪些物件受到影響,也難判斷哪些物件可能含有可看出的損毀狀況。

如果 Microsoft Access 2002 在轉換 Access 檔時發生錯誤,您可以用新的 Access 檔開啟轉換錯誤表,來檢視這些錯誤的彙總。轉換錯誤表含有下列幾欄:

物件類型。Access 發生錯誤所在的資料庫物件類型,如果 Access 所遇到的並非某一類物件專屬的錯誤,則為「資料庫」。

物件名稱。Access 發生錯誤所在的物件名稱。如果 Access 在轉換時發生編譯錯誤,但是,卻沒有指定包含錯誤之模組的名稱。

錯誤描述:必要的話,可以按 SHIFT+F2,檢視整個錯誤描述。

?考

其他有關修復資料庫的詳細資訊,請按一下 [說明] 功能表上的 [Microsoft Access 說明],在 Office 小幫手或解答精靈中輸入 repairing,然後按一下 [搜尋],檢視該主題。

有關排解舊版 Access 資料庫的疑難,請按一下下面的文章編號,查看 Microsoft Knowledge Base 中的文章:
209137 ACC2000:如何修復損壞的資料庫
279334 ACC97:How to Repair a Damaged Jet 3.5 Database
109953 ACC:如何修復已損毀的資料庫
304408 ACC2002:How to Shut Down a Custom Access Application Remotely


本文件是根據 Microsoft Knowledge Base 文件編號 Q283849 翻譯的。若要參考原始英文文件內容,請至以下網址:

http://support.microsoft.com/support/kb/articles/Q283/8/49.asp

屬性

文章編號: 283849 - 上次校閱: 2003年11月12日 - 版次: 1.0
這篇文章中的資訊適用於:
  • Microsoft Access 2002 Standard Edition
關鍵字:?
kbhowto kbdta KB283849
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

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