設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

209137-ACC2000:如何診斷/修復(fù)損壞的 Jet 4.0 數(shù)據(jù)庫

1970-1-1 08:00| 發(fā)布者: 微軟| 查看: 3728| 評論: 0

版權(quán):微軟
原文地址:
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;209137

建議閱讀微軟原文, 以保證是最新最準確的KB版本及最新更新!!

如果原文無法鏈接,可閱讀下面轉(zhuǎn)貼:

ACC2000:如何診斷/修復(fù)損壞的 Jet 4.0 數(shù)據(jù)庫

View products that this article applies to.

本文的發(fā)布號曾為 CHS209137
初學(xué)者:要求具備單用戶計算機的用戶界面知識。

本文僅適用于 Microsoft Access 數(shù)據(jù)庫 (.mdb)。

概要

各種環(huán)境因素有可能損壞數(shù)據(jù)庫文件。被破壞的數(shù)據(jù)庫的癥狀包括:某些記錄顯示 #Deleted;無法打開數(shù)據(jù)庫中的某個對象,以及無法在 Access 中打開該文件。Microsoft Access 2000 中的修復(fù)和壓縮工具是恢復(fù)和優(yōu)化 Microsoft Access 數(shù)據(jù)庫文件的有效工具。本文說明如何使用這些 Access 2000 工具以及其它修復(fù)損壞數(shù)據(jù)庫的方法。另外,還給出了數(shù)據(jù)庫損壞原因的信息。

更多信息

盡管本文所描述的步驟通?沙晒Φ鼗謴(fù)已損壞的數(shù)據(jù)庫文件,但為了保護數(shù)據(jù),應(yīng)當(dāng)在條件允許的情況下經(jīng)常備份數(shù)據(jù)庫文件。

壓縮和修復(fù)工具



壓縮工具可消除現(xiàn)有數(shù)據(jù)庫中的未占用空間。它是通過創(chuàng)建一個新的目標數(shù)據(jù)庫,并將舊數(shù)據(jù)庫中的所有對象復(fù)制到新數(shù)據(jù)庫中來實現(xiàn)的。如果您選擇將數(shù)據(jù)庫壓縮到原來的數(shù)據(jù)庫名稱下,而不是新的數(shù)據(jù)庫,那么壓縮工具將會創(chuàng)建一個臨時數(shù)據(jù)庫,將原數(shù)據(jù)庫中的所有對象導(dǎo)出到臨時數(shù)據(jù)庫中,刪除原來的數(shù)據(jù)庫,然后將臨時數(shù)據(jù)庫重命名為原來的數(shù)據(jù)庫。

修復(fù)工具只用來修復(fù)數(shù)據(jù)庫中的表、查詢和索引。它不能修復(fù)已損壞的窗體、報表、宏或模塊。以下是壓縮工具所執(zhí)行的操作列表。
  • 重新組織表的頁面,使之放在相鄰的數(shù)據(jù)庫頁面上。由于表不再散放在數(shù)據(jù)庫中,所以可提高性能。
  • 回收對象和記錄刪除創(chuàng)建的未使用的空間。當(dāng)從數(shù)據(jù)庫中刪除對象或記錄時,就會將它們所占用的空間打上標記,提供給數(shù)據(jù)庫新添加項使用。但是,除非對數(shù)據(jù)庫進行壓縮,否則數(shù)據(jù)庫不會變小。對于經(jīng)常添加、刪除和更新對象及記錄的數(shù)據(jù)庫而言,應(yīng)該經(jīng)常對數(shù)據(jù)庫進行壓縮。
  • 重新遞增 AutoNumber 字段,使分配的下一個值比其余記錄的最大值大 1。例如,如果刪除了數(shù)據(jù)庫中的所有記錄,在壓縮數(shù)據(jù)庫后添加下一個記錄時,AutoNumber 字段中的值將為 1。如果數(shù)據(jù)庫中 AutoNumber 最大余值為 50,那么在壓縮值后添加下一個記錄時,它的值為 51。注意,即使壓縮之前添加的記錄包含的值大于 50,它也適用。
  • 重新生成查詢優(yōu)化過程使用的表統(tǒng)計數(shù)字。通常,如果回滾事務(wù)、由于斷電而沒有正常關(guān)閉數(shù)據(jù)庫或者關(guān)機前無法完全退出使用 Microsoft Jet 的程序,這些統(tǒng)計數(shù)字可能會隨時間而過時。
  • 標記所有的查詢,以便下次執(zhí)行查詢時重新進行編譯。這一點很重要,因為數(shù)據(jù)庫統(tǒng)計數(shù)字可以會發(fā)生變化,并且以前編譯的查詢的查詢計劃可能不準確。

運行壓縮和修復(fù)工具的重要原則



在對數(shù)據(jù)庫運行壓縮和修復(fù)工具之前,必須滿足以下條件:

必須使用對數(shù)據(jù)庫中所有表具有“修改設(shè)計”或“管理”安全權(quán)限的帳戶登錄。

必須給原始和壓縮后的數(shù)據(jù)庫留有足夠的磁盤空間,即使數(shù)據(jù)庫是通過 Microsoft Access 2000 用戶界面以相同的文件名壓縮的,也是如此。僅當(dāng)壓縮成功時,才可以將修復(fù)/壓縮的數(shù)據(jù)庫重命名為原來的數(shù)據(jù)庫名。

其它用戶不可打開數(shù)據(jù)庫。當(dāng)數(shù)據(jù)庫被壓縮時,它必須由 Microsoft Jet 以獨占方式打開,以防止在壓縮過程中任何用戶訪問和修改數(shù)據(jù)庫。

恢復(fù)已損壞的數(shù)據(jù)庫



以下步驟概括了修復(fù)已損壞數(shù)據(jù)庫的一般方法:
  1. 備份已損壞數(shù)據(jù)庫 (.mdb) 文件。
  2. 如果有.ldb 文件,請刪除它。刪除此文件之前應(yīng)關(guān)閉相應(yīng)的 .mdb 文件。

    .ldb 文件用于確定共享數(shù)據(jù)庫中鎖定了哪些記錄以及是由誰鎖定的。如果以共享模式打開數(shù)據(jù)庫來,那么就會創(chuàng)建一個與相應(yīng)的數(shù)據(jù)庫 (.mdb) 同名的 .ldb 文件。例如,如果在 c:\Msoffice\Access 文件夾內(nèi)打開(共享使用)示例數(shù)據(jù)庫 Northwind.mdb,則會在同一文件夾內(nèi)自動創(chuàng)建文件 Northwind.ldb。當(dāng)最后一個用戶退出數(shù)據(jù)庫后,.ldb 文件被自動刪除,但有兩種例外情況 — 一種情況是最后一個用戶對含有.mdb文件的文件夾沒有刪除權(quán)限,另一種情況是數(shù)據(jù)庫被破壞。.ldb 文件包含打開數(shù)據(jù)庫的用戶列表。

    有時,要找出數(shù)據(jù)庫破壞的原因,必須檢查是誰登錄到數(shù)據(jù)庫中?梢允褂 Access 2000 中的 Microsoft Visual Basic for Applications,輸出登錄到特定數(shù)據(jù)庫中的用戶列表,

    有關(guān)如何執(zhí)行這一操作和示例代碼的其它信息,請單擊下列文章編號查看相應(yīng)的 Microsoft Knowledge Base 文章:

    198755 ACC2000:使用 Jet UserRoster 檢查是誰登錄到數(shù)據(jù)庫中

  3. 按照下列方法運行壓縮和修復(fù)工具:
    1. 如果數(shù)據(jù)庫被打開,請先關(guān)閉它。
    2. 工具菜單上,指向數(shù)據(jù)庫實用工具,然后單擊壓縮和修復(fù)數(shù)據(jù)庫。
    3. 壓縮數(shù)據(jù)庫來源對話框中,選擇要壓縮的文件,然后單擊壓縮
    4. 壓縮數(shù)據(jù)庫為對話框中,輸入新的文件名并單擊保存。

      如果壓縮和修復(fù)不成功,將會有提示信息說明此情況。這就意味著損壞非常嚴重,無法將其修復(fù)。
  4. 如果上述步驟無法恢復(fù)被損壞的數(shù)據(jù)庫,請試著創(chuàng)建一個新數(shù)據(jù)庫,將舊數(shù)據(jù)庫中的對象逐個導(dǎo)入新數(shù)據(jù)庫中。然后重新創(chuàng)建關(guān)系。這種方法可解決數(shù)據(jù)庫中系統(tǒng)表損壞的情況。

    注意,不能用“導(dǎo)入向?qū)А睂?dǎo)入數(shù)據(jù)訪問頁。但可以在新數(shù)據(jù)庫中打開現(xiàn)有的數(shù)據(jù)訪問頁。為此,請執(zhí)行下列步驟:
    1. 在“數(shù)據(jù)庫”窗口,在對象下單擊頁面。
    2. 單擊新建按鈕。
    3. 新數(shù)據(jù)訪問頁對話框,單擊現(xiàn)有 Web 頁,然后單擊確定。
  5. 如果表損壞,并且以上步驟不能將它恢復(fù),請嘗試以下步驟:

    1. 從 Microsoft Access 2000 中,將表導(dǎo)出為 ASCII(分隔的文本)文件。有關(guān)此主題的詳細信息,請搜索“分隔的文本”短語,然后使用 Microsoft Access 幫助索引查看“導(dǎo)出 Access 數(shù)據(jù)”。
    2. 刪除與該表關(guān)聯(lián)的所有關(guān)系,然后從數(shù)據(jù)庫中刪除該表。
    3. 壓縮此數(shù)據(jù)庫。
    4. 重新創(chuàng)建該表及其與之關(guān)聯(lián)的任何關(guān)系。
    5. 使用字處理器檢查 ASCII 文件是否有錯誤或反常的數(shù)據(jù),并刪除這些記錄。以 ASCII 文本文件格式保存該文件。
    6. 重新將 ASCII 文件導(dǎo)入到新創(chuàng)建的表中。有關(guān)此主題的詳細信息,請搜索“分隔的文本”短語,然后使用 Microsoft Access 幫助索引查看“導(dǎo)入或鏈接”。
    7. 重新輸入已被迫刪除的任何記錄。
  6. 如果窗體或報表損壞,則可能是窗體或報表本身損壞,或者它們中的一個或多個控件損壞。您可以刪除窗體或報表,然后再從數(shù)據(jù)庫的備份副本中導(dǎo)入它,也可使用以下某個選項:
    • 如果這種損壞發(fā)生在窗體或報表本身,那么可創(chuàng)建一個新窗體或新報表,然后從原來的窗體或報表中復(fù)制其控件。
    • 如果這種損壞發(fā)生在窗體或報表的某個控件,那么可創(chuàng)建一個新窗體或新報表,然后在新窗體或新報表上重新創(chuàng)建控件。最好能夠創(chuàng)建所有的控件,因為無法識別到底哪個控件受到損壞。
  7. 如果宏或模塊受到損壞,這種損壞可能發(fā)生在宏或模塊本身,也可能發(fā)生在宏或模塊的內(nèi)容上。您可以刪除宏或模塊,然后再從數(shù)據(jù)庫的備份副本導(dǎo)入它,也可使用以下某個選項:
    • 如果這種損壞發(fā)生在宏或模塊本身,那么可創(chuàng)建一個新的宏或模塊,然后復(fù)制原來的宏或模塊的內(nèi)容。
    • 這種損壞可能涉及嵌入到模塊中的非 ASCII 字符。將模塊保存為一個文本文件,刪除所有錯誤或亂碼數(shù)據(jù),然后將此文本文件重新加載到新模塊中。
    • 如果這種損壞發(fā)生在宏或模塊的內(nèi)容上,則必須創(chuàng)建一個新的宏或模塊,然后重新創(chuàng)建原來的宏或模塊的內(nèi)容。
  8. 如果表損壞,并且以上步驟不能將它恢復(fù),則執(zhí)行以下步驟:

    1. 從 Microsoft Access 中,將表導(dǎo)出為 ASCII(分隔的文本)文件。有關(guān)此主題的詳細信息,請搜索“分隔的文本”短語,然后使用 Microsoft Access 幫助索引查看“導(dǎo)出 Access 數(shù)據(jù)”。
    2. 刪除與表關(guān)聯(lián)的任何關(guān)系,然后從數(shù)據(jù)庫中刪除該表。
    3. 壓縮此數(shù)據(jù)庫。
    4. 重新創(chuàng)建該表及其關(guān)聯(lián)的任何關(guān)系。
    5. 使用字處理器,檢查 ASCII 文件是否有錯誤或反常的數(shù)據(jù),并刪除這些記錄。以 ASCII 文本文件格式保存該文件。
    6. 重新將 ASCII 文件導(dǎo)入到新創(chuàng)建的表中。有關(guān)此主題的詳細信息,請搜索“分隔的文本”短語,然后使用 Microsoft Access 幫助索引查看“導(dǎo)入或鏈接”。
    7. 重新輸入已被迫刪除的任何記錄。
如果采取上述步驟仍然不能修復(fù),那么可能確實無法修復(fù)該數(shù)據(jù)庫了。如果出現(xiàn)這種情況,那么應(yīng)恢復(fù)上次備份的數(shù)據(jù)庫,或者重新創(chuàng)建數(shù)據(jù)庫。

最后的選擇方法是,某些專家可能會提供 Microsoft Access 數(shù)據(jù)庫修復(fù)服務(wù)。由于這是一種很特殊的服務(wù),找到這類專家的最有效的途徑是在 Microsoft Access “第三方和用戶組” Internet 新聞組中發(fā)布一則消息,新聞組的地址是:

microsoft.public.access.3rdpartyusrgrp

有關(guān) Microsoft Access Internet 新聞組的詳細信息,請參見 Microsoft Knowledge Base 中的下列文章:

150057 Internet 上可用的 Microsoft Access 新聞組

.mdb 文件損壞的常見原因



Access/Jet mdb 文件損壞有三個主要原因。

由于寫入操作被中斷使數(shù)據(jù)庫處于置疑/損壞狀態(tài)



強烈建議通過單擊“文件”菜單上的“退出”或“關(guān)閉”,正常關(guān)閉數(shù)據(jù)庫。但是,如果 Access 不正常關(guān)閉時,數(shù)據(jù)庫正處于打開狀態(tài)并正在寫數(shù)據(jù),則 Jet Database Engine 就會將該文件標記為置疑/損壞。如果手動關(guān)閉機器之前沒有先關(guān)閉 Windows 或者斷電,也可能會出現(xiàn)這種情況。其它情形還包括:在打開數(shù)據(jù)庫的同時,沒有關(guān)閉 Access 但仍干擾 Jet 向磁盤寫入數(shù)據(jù)。例如,當(dāng)網(wǎng)絡(luò)遇到數(shù)據(jù)沖突或者磁盤驅(qū)動器故障時,就會出現(xiàn)這種情況。如果發(fā)生任何此類中斷,Jet 就會將數(shù)據(jù)庫標記為可能已被破壞。

當(dāng) Jet 開始寫操作時,將設(shè)置一個標記,并在操作完成時重新設(shè)置該標記。如果寫操作被中斷,標記保持不變。當(dāng)您要再次打開數(shù)據(jù)庫時,Jet 確定標記是否已設(shè)置并報告數(shù)據(jù)庫是否被破壞。在大多數(shù)情況下,數(shù)據(jù)庫中的數(shù)據(jù)實際上沒有被破壞,但設(shè)置的標記提醒 Jet 數(shù)據(jù)庫可能已被破壞。如果是這種情況,壓縮和/或修復(fù)數(shù)據(jù)庫通常可以還原數(shù)據(jù)庫。所幸的是,有辦法確定哪些用戶和工作站負責(zé)將文件標記為置疑。有關(guān)確定哪些用戶和/或工作站使 Jet 將文件標記為置疑,請參見本文后面的“方法”。

網(wǎng)絡(luò)硬件故障



在這種情況下,文件損壞與 Jet Engine 無關(guān);文件損壞完全是由于外界原因造成的。原因可能是由于存放數(shù)據(jù)庫的計算機和打開數(shù)據(jù)庫的計算機之間的硬件鏈中的一個或多個鏈接出故障。此列表包括但不局限于網(wǎng)卡、網(wǎng)絡(luò)電纜、路由器和集線器。

通常,mdb 文件指示由硬件造成的損壞不能通過使用壓縮、修復(fù)或 Jetcomp 來還原。直到出故障的硬件被修復(fù)或替換,硬件損壞才會被修復(fù)。

在另一個程序中打開和保存 mdb 文件



當(dāng)打開一個 mdb 文件并在另一個程序中保存時,不能恢復(fù)該文件。例如,Microsoft Word 允許打開并保存 Access 數(shù)據(jù)庫(順便提一下,如果在另一個應(yīng)用程序中打開 MDB 文件,這樣做不起任何作用,因為您看到的都是擴展字符)。當(dāng)這樣保存 mdb 文件時,如果在 Access 中打開它,就會提示您輸入數(shù)據(jù)庫密碼,即使文件在 Access 中從未使用密碼保護,也是如此。此處出現(xiàn)密碼提示的原因是:當(dāng) Access 打開文件時,檢查的第一個字節(jié)范圍就是數(shù)據(jù)庫密碼所在的位置。如果該字節(jié)包含損壞的數(shù)據(jù),Access 就會認為該文件受密碼保護。即使能夠繞過此處的密碼提示,數(shù)據(jù)庫仍無法恢復(fù),因為二進制結(jié)構(gòu)是混亂的,Access 根本無法讀取。在這種情況下,恢復(fù)文件的備份副本是唯一的解決方法。有關(guān)這一問題的詳細信息,請單擊以下文章編號,查看 Microsoft Knowledge Base 中的相應(yīng)文章:

243895 ACC2000:出現(xiàn)數(shù)據(jù)庫密碼,雖然從前從未設(shè)置過

如何確定哪些用戶/工作站負責(zé)將文件標記為置疑



有時,要找出數(shù)據(jù)庫被破壞的原因,必須檢查是誰登錄到數(shù)據(jù)庫中?梢允褂 Access 2000 中的 Microsoft Visual Basic for Applications,輸出登錄到特定數(shù)據(jù)庫中的用戶列表,

有關(guān)如何執(zhí)行這一操作和示例代碼的其它信息,請單擊下列文章編號查看相應(yīng)的 Microsoft Knowledge Base 文章:

198755 ACC2000:使用 Jet UserRoster 檢查是誰登錄到數(shù)據(jù)庫中

防止出現(xiàn)破壞可以采取的步驟



  • 在數(shù)據(jù)庫寫入過程中避免斷電。斷電將使數(shù)據(jù)庫處于置疑狀態(tài)。
  • 避免網(wǎng)絡(luò)連接斷開。
  • 避免不正常斷開 Microsoft Jet 連接,如斷電、手動關(guān)閉、使用任務(wù)管理器關(guān)閉應(yīng)用程序等。
  • 編程時應(yīng)關(guān)閉所有打開的 DAO 和 ADO 對象。示例包括:Recordset、QueryDefTableDefDatabase 對象。
  • 致命系統(tǒng)錯誤幾乎總是導(dǎo)致不正常始止。如果數(shù)據(jù)庫容易出現(xiàn)致命錯誤,則在數(shù)據(jù)庫由于破壞嚴重而無法打開或恢復(fù)之前,應(yīng)該消除這些錯誤。有關(guān)致命系統(tǒng)錯誤的詳細信息,請單擊以下文章編號,以查看 Microsoft Knowledge Base 中的相應(yīng)文章:

    208488 ACC2000:如何排除 Access 2000 中的無效頁錯誤問題

  • 經(jīng)常壓縮此數(shù)據(jù)庫。
  • 不要在 Windows NT Server 上運行 IPX,其中 Jet 數(shù)據(jù)庫放在網(wǎng)絡(luò)上,而客戶機使用帶有 IPX/SPX 的 Microsoft Windows 95。而是在 Windows NT Server 上運行 TCP-IP,而在 Win95 客戶機上運行雙協(xié)議棧 IPX 和 TCP-IP。(Windows NT 對 Windows NT + IPX/SPX 不會出現(xiàn)問題,客戶機采用 Novell 也不會出現(xiàn)問題。)
  • 避免在循環(huán)中使用大量打開/關(guān)閉操作(40,000 次連續(xù)的打開/關(guān)閉操作到 1,000,000 次以上)。

參考

有關(guān)修復(fù)數(shù)據(jù)庫的詳細信息,請單擊幫助菜單上的 Microsoft Access 幫助,在“Office 助手”或“操作向?qū)А敝休斎?KBD>修復(fù),然后單擊搜索查看該主題。

有關(guān)修復(fù)損壞數(shù)據(jù)庫的可下載工具的詳細信息,請單擊以下文章編號,查看相應(yīng)的 Microsoft Knowledge Base 文章:

273956 ACC2000:下載中心提供的 Jet 壓縮工具

有關(guān)在以前 Access 版本中排除數(shù)據(jù)庫錯誤的其它信息,請單擊下列文章編號查看相應(yīng)的 Microsoft Knowledge Base 文章:

279334 ACC97:如何查錯/修復(fù)損壞的 Jet 3.5 數(shù)據(jù)庫

109953 ACC:如何查錯/修復(fù)損壞的數(shù)據(jù)庫

這篇文章中的信息適用于:

  • Microsoft Access 2000

最近更新: 2001-4-5 (1.0)
關(guān)鍵字 kbdta kbhowto KB209137

最新評論

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2025-7-17 02:09 , Processed in 0.064362 second(s), 16 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部