了解修復損壞的 Access 資料庫檔案 (MDB/ACCDB) 的 14 種最佳方法,包括專家工具、內建和手動復原選項。
統計數據顯示,58% 的組織每年至少面臨一次資料庫損壞。更令人震驚的事實表明,40% 的企業無法從災難性資料遺失中復原。
您的 Access 資料庫可能會在沒有警告的情況下停止工作或顯示損壞跡象。這種情況造成了巨大的挫敗感。好消息是,有多種解決方案可以修復損壞的 Access 資料庫檔案、修復 MS Access 資料庫錯誤以及還原已刪除的記錄。
有幾種經過驗證的方法可以幫助修復損壞的 Access 資料庫。這些範圍從內建修復工具到專業恢復軟體。本文將引導您快速修復小問題以及處理嚴重損壞案例的高級解決方案。
您的資料庫現在需要關注嗎?讓我們逐步看看修復該問題的最快方法。
1. 了解 Access 資料庫損壞
當意外變更改變 Access 資料庫的原始結構時,就會發生資料庫損壞。在嘗試進行任何修復之前,了解腐敗的本質變得非常重要。
1.1 資料庫損壞的常見原因
有多種原因會導致 Access 資料庫損壞:
- 硬件故障 例如故障的硬碟或有壞扇區的儲存設備會導致資料庫損壞。
- 與軟體相關的問題(例如不正確的檔案系統復原或資源衝突)會損壞資料庫檔案。
- 不當的資料庫斷開連接和多用戶並發存取等人為因素經常導致資料損壞。
- 在資料庫保持開啟時因斷電或崩潰而導致的系統關閉會造成嚴重損壞。資料庫最終可能會處於不一致的狀態並被損壞。
- 遠端存取資料庫時網路連線中斷。
- 資料庫大小太大。
1.2 防止 Access 資料庫損壞的實用提示
在另一篇文章中,我們已經提供了許多有用的技巧來防止 Access 資料庫損壞,這將減少 95% 的損壞。然而,我們仍然需要有效的方法來處理剩餘的情況。
1.3 資料庫損壞時的錯誤訊息
當您嘗試開啟資料庫並看到以下錯誤訊息時,表示您的資料庫可能已損壞:
- 無法識別的數據庫格式“ filename.mdb”(錯誤3343)
- 數據庫“ filename.mdb”需要修復或不是數據庫文件。 (錯誤2239)打開Microsoft Office Access數據庫時,您或其他用戶可能意外退出了Microsoft Office Access。 您是否希望Microsoft Office Access嘗試修復數據庫?
- 數據庫'filename.mdb'無法修復或不是Microsoft Office Access數據庫文件。
- Microsoft Jet 資料庫引擎無法開啟檔案「filename.mdb」。它已由另一個用戶以獨佔方式打開,或者您需要獲得查看其資料的權限。
- Microsoft Jet數據庫引擎找不到對象“ xxxx”。 確保對象存在,並且正確拼寫了它的名稱和路徑名。 (錯誤3011)
- 記錄無法讀取; 對“ xxxx”沒有讀取權限(錯誤3112)
- 無法打開數據庫“ filename.mdb”。 它可能不是您的應用程序可以識別的數據庫,或者文件可能已損壞。 (錯誤3049)
- 您沒有使用「filename.mdb」物件所需的權限。 (錯誤 3033)
- 無效的字段數據類型(錯誤3259)
- 意外錯誤35012
- Microsoft Access已檢測到該數據庫處於不一致狀態,並將嘗試恢復該數據庫。 在此過程中,將創建數據庫的備份副本,並將所有恢復的對象放置在新數據庫中。 Access將隨後打開新數據庫。 未成功恢復的對象的名稱將記錄在“恢復錯誤”表中。 (錯誤9505)
- 數據庫'xxx.mdb'無法修復或不是Microsoft Access數據庫文件。
- “Id”不是此表中的索引。 (錯誤 3800)
- 「AOIndex」並非此表中的索引。 (錯誤 3800)
- 不是有效的書籤。 (錯誤3159)
- 保留錯誤(-####); 沒有針對此錯誤的消息。 (錯誤2626/3000)
- 如果該文件包含旨在損害您的計算機的代碼,則可能不安全。
- 文件未找到
- 無法打開數據庫,因為無法讀取其中包含的VBA項目。 只有首先刪除VBA項目,才能打開數據庫。 刪除VBA項目會從模塊,表單和報告中刪除所有代碼。 在嘗試打開數據庫並刪除VBA項目之前,應備份數據庫。 (錯誤29081)
- 數據庫中的Visual Basic for Applications項目已損壞。
- Microsoft Access 偵測到此檔案損壞。若要嘗試修復損壞,請先製作檔案的備份副本。按一下“檔案”選項卡,指向“管理”,然後按一下“壓縮和修復資料庫”。如果您目前正在嘗試修復此損壞,則需要重新建立此檔案或從先前的備份還原它。 (錯誤 29072)
- 您請求對錶進行的更改未成功,因為它們會在索引,主鍵或關係中創建重複的值。 (錯誤3022)
1.4 資料庫損壞的其他跡象
以下指標也通常表示資料庫損壞:
- 嘗試開啟資料庫時系統崩潰
- 不存在密碼時提示隨機密碼
- 缺失字段通知
- Visual Basic for Applications 專案損壞訊息
1.5 對業務營運的影響
事實證明,資料庫損壞會對業務造成嚴重後果。最近的研究表明,數據問題導致平均停機時間為 20 天,嚴重擾亂正常運作。資料遺失會引發這些連鎖問題:
- 財務影響
- 美國公司平均面臨資料外洩風險ost8.60億美元
- 恢復期長達九個月
- 資料重建和恢復消耗資源
- 營運中斷
- 關鍵系統停止運作
- 生產力時間表面臨延誤
- 客戶的信任和忠誠度受到損害
67% 的資料遺失事件是由硬碟崩潰或系統故障造成的。這一事實強調了強大的備份系統和適當的資料庫維護程序的必要性。
2. 免費內建存取修復工具
Microsoft Access 內建了多個免費工具,可協助修復損壞的 Access 資料庫。這些原生解決方案無需任何第三方軟體即可修復常見的資料庫問題。
2.1 壓縮和修復資料庫工具
內建的壓縮和修復工具是資料庫維護的重要組成部分,可以防止許多問題。該工具有兩個作用 – 它使您的資料庫檔案運行得更好並修復輕微的損壞問題。
以下是如何使用此工具:
- Star訪問
- 關閉所有活動的資料庫連接
- 前往資料庫工具標籤
- 選擇“壓縮和修復資料庫工具”
- 在「壓縮資料庫」對話方塊中,選擇要修復的資料庫。
- 點選“緊湊”按鈕。
我們每週都會進行此維護,特別是對於存在大量更新和刪除的資料庫。這可以保持最佳效能並防止數據變得臃腫。
欲了解更多信息,您還可以訪問 微軟官方頁面 .
2.2 DAO函數DBEngine.CompactDatabase
與內建工具相比,DAO CompactDatabase 功能使我們能夠更好地控制資料庫維護。這種方法使我們能夠自動化修復流程。
此功能非常適合需要定期維護的多個資料庫。它創建一個新的、優化的資料庫副本,並保持所有資料和物件完好無損。
下面是批次修復目錄下所有Access資料庫的VBA程式碼:
選項明確' 新增Windows API 聲明Private Declare PtrSafe Function SHBrowseForFolder Lib "shell32" (lpbi As BROWSEINFO) As Long Private Declare PtrSafe Function SHGetPathFromIDList Lib "shell32" (ByVal pidList Function SHGetPathFromIDList Lib "shell32" (ByVal pidList 區CoTaskMemFree Lib「ole0」(ByVal pvoid As Long)私有型別BROWSEINFO hWndOwner As Long pidlRoot As Long pszDisplayName As String lpszTitle As String ulFlags As Long lpfnCallback As Long lParam As Long iImage Type Public Sub CompactRepairDatabases() Dim fso As Object Dim 資料夾作為物件Dim 檔案作為物件DimfolderPath As String Dim stats As ProcessStats ' Create FileSystemObject Set fso = CreateObject("Scripting.FileSystemObject") ' 顯示資料夾選擇器對話框GetFolderPath() If folderPath = "" then MsgBox "操作取消。", vbInformation Exit Sub End If ' 初始化stats stats.SuccessCount = 0 stats.FailureCount = 1 ' 取得資料夾物件處理檔 = fso.GetFolder(folderPath) ' 處理檔案處理檔案夾中的每個檔案對於folder.Files中的每個檔案'檢查它是否是Access資料庫If IsAccessDatabase(file.Name)Then If CompactAndRepairDB(file.Path)Then stats.SuccessCount = stats.SuccessCount + 1 Else stats. FailureCount = stats.FailureCount + XNUMX End If End If Next file ' 顯示結果 MsgBox "處理完成!" rary 檔案路徑 tempFile = Left$(dbPath, InStrRev(dbPath, ".") - 1) & "_temp" & _ Mid$(dbPath, InStrRev(dbPath, ".")) ' 嘗試壓縮與修正 DBEngine.CompactDatabase dbPath , tempFile ' 刪除原始檔案並將temp 重新命名為原始檔案Kill dbPath Name tempFile As dbPath CompactAndRepairDB = True Exit Function ErrorHandler: CompactAndRepairDB = False ' 清理暫存檔案(如果存在) On Error Resume Next If Dir(tempFile) < " " then Kill暫存檔案結束函數
欲了解更多信息,您還可以訪問 微軟官方頁面 .
2.3 反編譯 VBA 程式碼以修復損壞的 Access 資料庫
錯誤的 VBA 程式碼可能會導致資料庫問題。 /decompile 開關是 Microsoft Access 中一個有價值的故障排除工具,可以協助解決這些問題。雖然名為“反編譯”,但它實際上並不是傳統意義上的“反編譯”——它不會將編譯後的程式碼轉換回原始程式碼。相反,它只是清除所有編譯版本,同時保留原始 VBA 程式碼,讓 Access 從頭開始重新編譯所有內容。
若要反編譯資料庫,只需從 Windows 命令提示字元 (cmd.exe) 中使用 /decompile 開關啟動 Access:
“C:Program Files(x86)Microsoft OfficerootOffice16MSACCESS.EXE”“C:UsersccwDocumentsDatabase.accdb”/反編譯
注意:相應地替換 ACCESS.EXE 和資料庫的路徑。
重要安全注意事項:
- 反編譯之前務必備份資料庫檔案。
- 這是一個未記錄的功能,因此請謹慎使用。
- 這不適用於已編譯的 .mde/.accde 檔案(僅適用於 .mdb/.accdb)。
- 確保在反編譯之前關閉所有 Access 實例。
反編譯後:
- 打開資料庫
- 開啟 VBA 編輯器
- 使用 Debug – Compile 指令重新編譯所有模組
- 保存資料庫
此過程有助於消除部分編譯的程式碼中的損壞,並可以解決 Access 資料庫中許多與 VBA 相關的神秘錯誤。
2.4 使用JetComp實用程式修復損壞的Access資料庫
JetComp 公用程式是適用於舊版 Access 資料庫的獨立工具。您可以從以下位置下載: 點擊這裡 或者 微軟官方頁面 .
以下是它的優點和限制:
主要優點:
- 在壓縮之前跳過開啟資料庫。
- 更擅長處理標準壓縮和修復實用程式無法修復的資料庫。
- 適用於受密碼保護的資料庫。
- 支援多種語言資料庫。
限制:
- 僅支援使用 Microsoft Jet 資料庫引擎 3.x 和 4.x 建立的 *.mdb 資料庫。
這些內建工具非常有用tar資料庫修復的點。如果它們不起作用,您可能需要更高級的解決方案,例如前面介紹的解決方案。
3. 免費手動資料庫修復技術
內建實用程式並不總是能修復損壞的 Access 資料庫,而專業工具則需要額外的資金。手動技術可以幫助免費從損壞的資料庫中復原資料。這些方法需要更多時間,但通常會產生更好的結果,且無需額外費用。
3.1 將物件匯入新資料庫
導入方法無數次幫助我們從損壞的資料庫中保存資料。這種方法需要一個新的資料庫來系統地從損壞的資料庫中轉移物件。這是最有效的:
- 建立一個新的空白 Access 資料庫
- 關閉自動建立的Table1
- 轉到“外部資料”選項卡
- 按一下“自訂功能區...”
- 按一下「新建組」以建立新群組。
- 選擇“Access(匯入存取資料)”,然後按一下“新增>>”將其新增至新群組。
- 從新群組中選擇“訪問”。
- 瀏覽到損壞的資料庫
- 選擇要匯入的所有對象
- 點擊“選項”並確保選中“關係”。
- 按一下「確定」將物件匯入到新資料庫中。
以下是逐步影片教學:
請注意:
- 在嘗試任何修復過程之前進行備份。
- 如果匯入失敗,請選擇部分物件(而不是所有物件)重試,直到匯入成功。
- 此方法最適合物件仍可用的輕度損壞。
3.2 透過連結表恢復
當直接導入不起作用時,外部連結有助於恢復資料。此技術連接到損壞的資料庫而不移動資料。
建立外部連結的過程與5.1相同,只是導入資料庫時應選擇「透過建立連結表連結到資料來源」:
之後,Access 將在目前資料庫中建立連結表,指向來源損壞的資料庫:
然後您可以執行以下操作來還原表:
- 打開連結表。
- 如果連結表可以打開,則在新資料庫中建立具有相同結構的新表。
- 批量複製可存取的記錄。處理小批量記錄(一次 50-100 條)以降低傳輸過程中資料遺失的風險。
- 貼到新表中。
- 傳輸後測試每筆記錄。
- 對所有連結表重複步驟 1 至 5。
- 重建關係和查詢
- 其他對象,例如表單、巨集等,都可以用同樣的方式完成。
我們的測試表明,這些手動技術在以下情況下效果最佳:
- 資料庫仍然部分可用,其中一些表和物件仍然工作,而其他表和物件已損壞。
- 內建修復工具不起作用
- 您需要恢復特定數據
- 時間壓力不是問題
這些手動方法需要耐心和細心。匆忙進行維修往往會帶來更多問題。在整個修復過程中慢慢來並保留備份副本。
4。 運用 DataNumen Access Repair 修復損壞的存取資料庫
如果以上所有免費方法都失敗了,您可以考慮專業的解決方案。 DataNumen Access Repair 是修復損壞的 Access 資料庫的最佳專業資料庫修復工具之一。這款強大的工具適用於從 Access 95 到 2021 的所有版本,包括 Office 365。
4.1 修復單一文件
若要修復單一 Access 資料庫文件,請執行下列操作:
- 關閉 Microsoft Access 和其他可能修改來源資料庫檔案的應用程式。
- 選擇來源資料庫檔案(.mdb、.accdb)。
- 如果原始檔案是test.mdb/test.accdb,則輸出檔案名稱會自動設定為test_fixed.mdb/test_fixed.accdb。您也可以手動變更輸出檔名(.mdb、.accdb)。
- 點擊“ Start 修復”按鈕
- 修復過程結束後, DataNumen Access Repair 將輸出一個新的資料庫。
4.2 修復一批文件
組織可以透過批次功能節省時間和精力。多個損壞的資料庫可以排隊並按順序處理 DataNumen, 如下:
- 轉到“批量修復”選項卡。
- 點選「新增檔案」新增多個需要修復的Access資料庫檔案(.mdb、.accdb)。
- 點擊“ Start 修復”按鈕
- 清單中的所有檔案都會被一一修復
4.3 恢復刪除的表格和記錄
該工具恢復已刪除內容的能力令人印象深刻。下面是恢復過程:
- 轉到“選項”選項卡
- 啟用“恢復已刪除的表”和“恢復已刪除的記錄”,如下所示:
- 轉到“修復”選項卡,然後tar不修復你的文件。
4.4 恢復索引、關係和查詢
DataNumen 成功恢復各種資料庫對象,例如:
- 複雜的 SQL 查詢(刪除、插入、更新命令)
- 表關係和索引
如果您想恢復這些對象,請執行下列操作:
- 轉到“選項”選項卡
- 啟用“恢復索引”、“恢復關係”和“恢復查詢”,如下所示:
- 轉到“修復”選項卡,然後tar不修復你的文件。
4.5 從硬碟、磁碟映像或備份檔案還原存取數據
如果您不再擁有 Access 資料庫,可以直接從硬碟、磁碟映像或備份檔案還原 Access 數據,例如:
- 您永久刪除 Access MDB/ACCDB 資料庫檔案。
- 您格式化硬碟。
- 硬碟故障。
- VMWare或Virtual PC中的虛擬磁盤已損壞或損壞。
- 備份媒體上的備份檔案已損壞或損壞,您無法從中還原 Access MDB/ACCDB 資料庫檔案。
- 磁碟映像檔已損壞或損壞,您無法從中還原 Access 檔案。
如果您手邊有磁碟映像或備份文件,則可以執行以下操作:
- 點選“...”按鈕選擇來源檔案。
- 在「開啟檔案」對話方塊中,選擇「所有檔案(*.*)」作為篩選器。
- 選擇磁碟映像或備份檔案作為要修復的來源檔案。
- 設定輸出固定資料庫文件,並確保其副檔名為.mdb或.accdb。
如果你想直接從硬碟恢復,你需要使用 DataNumen Disk Image 為硬碟建立磁碟映像檔:
- 選擇硬碟或磁碟。
- 設定輸出影像檔名。
- 點擊“ Start 複製”按鈕從硬碟/磁碟建立磁碟映像檔。
取得磁碟鏡像檔案後,就可以使用 DataNumen Access Repair 從中恢復資料。
4.6 從勒索軟體或病毒中恢復
DataNumen 對於抵禦勒索軟體攻擊和病毒感染效果非常好。只需將加密或受感染的Access資料庫檔案作為來源損壞檔案並修復它,您就可以從中獲取資料。
4.7 範例文件
損壞的 Access 資料庫檔案範例 | 檔案復原者 DataNumen Access Repair (修復文件中的“Recovered_Table2/3”表對應於未損壞文件中的“Staff”表) |
mydb_1.mdb (錯誤 3343) | mydb_1_fixed.mdb |
mydb_2.mdb (錯誤 3343) | mydb_2_fixed.mdb |
mydb_3.mdb (錯誤 2239) | mydb_3_fixed.mdb |
mydb_4.mdb (錯誤 3011) | mydb_4_fixed.mdb |
mydb_5.mdb (錯誤 3112) | mydb_5_fixed.mdb |
mydb_6.mdb (錯誤 9505) | mydb_6_fixed.mdb |
mydb_7.mdb (錯誤 29081) | mydb_7_fixed.mdb |
mydb_8.accdb (錯誤 3800) | mydb_8_fixed.accdb |
mydb_9.accdb (錯誤 3159) | mydb_9_fixed.accdb |
mydb_10.mdb (錯誤 2626/3000) | mydb_10_fixed.mdb |
mydb_11.mdb (安全警告) | mydb_11_fixed.mdb |
5。 運用 DataNumen Data Recovery 還原 Access 資料庫
DataNumen Data Recovery 如果 Access 資料庫檔案是 l,那麼這是另一個很棒的工具ost 或刪除。
5.1 恢復Lost 或刪除的資料庫
如果你的Access資料庫是lost 或由於各種原因被刪除,您可以使用 DataNumen Data Recovery 取回它:
- Start DataNumen Data Recovery.
- 選擇要掃描的硬碟/驅動器。
- 點擊“確定”按鈕。
- DataNumen Data Recovery 將掃描選定的硬碟/驅動器。
- 掃描過程結束後,如果資料庫可恢復,它將出現在清單中。
- 選擇資料庫並點擊“恢復”按鈕將其恢復到資料夾。
5.2 從磁碟映像檔恢復
如果您已有硬碟/磁碟機的磁碟映像文件,則可以直接從映像文件還原資料庫:
- Start DataNumen Data Recovery.
- 選擇“掃描”>“掃描影像檔案”以掃描影像檔案。
- 其餘步驟與3.1相同。
5.3 修復恢復的資料庫
有時,Access 資料庫會透過以下方式恢復 DataNumen Data Recovery 仍然腐敗。在這種情況下,您可以使用 DataNumen Access Repair 重新修復恢復的資料庫並從中獲取資料。
6.修復損壞的存取資料庫的更多選項
除了提到的所有這些方法之外。還有很多專業的Access修復工具可用。我們收集並審核了 清單中最好的.
7. Access 資料庫開啟問題的其他解決方案
雖然檔案損壞是 Access 開啟失敗的常見原因,但其他技術問題也可能引發相同或幾乎相同的症狀和錯誤訊息。若要確認您的檔案是否真的已損壞,您可以將檔案傳輸到另一台正常運作的電腦並嘗試在 Access 中開啟它。
如果檔案成功打開,則不存在損壞問題。在這種情況下,問題可能源自於您的本機系統或 Access 安裝。嘗試以下故障排除步驟來解決電腦上的錯誤:
- 維修處
- 確保您的 Access 版本與資料庫相容。
- 分割大型資料庫檔案。
- 檢查您嘗試開啟的文件是否來自可信任來源。例如,檢查文件的位置,特別是當資料庫在伺服器上運行時。
- 檢查巨集安全性憑證是否是最新的,如果不是,請更新。
- 如果您使用 Access 執行時間來執行資料庫而不是在機器上安裝 MS Access 軟體,請降低巨集安全性。
- 使用最新的防毒軟體檢查檔案是否被病毒或惡意軟體感染。
8。 結論
資料庫損壞會嚴重影響業務運作。我們的研究表明,多種修復解決方案均能有效發揮作用。企業可以選擇內建 Access 工具、手動方法以及專業的復原軟體,例如 DataNumen 恢復受損的資料庫。摘要如下:
小問題可以透過內建修復工具修復。當內建免費方法無效且您不想付費時,手動恢復技術會更有價值,儘管它們需要更多時間。 DataNumen Access Repair 工具 對於嚴重的貪腐案件,效果更佳。
您的資料庫需要定期維護 防止腐敗。完整的備份策略有助於保護您的資料。安排例行壓實和維修操作。持續監控資料庫效能。這些預防措施和修復方法將保護您的寶貴資料並減少潛在的停機時間。
請注意,快速的行動和正確的工具決定了資料庫復原的成功。這些修復方法和定期備份將使您做好準備應對未來的任何資料庫損壞挑戰。
參考文獻:
- 微軟公司。 (nd)。 可擷取的 Microsoft Jet 和 DAO 錯誤 [Access 2007 開發人員參考]. 微軟學習。 https://learn.microsoft.com/en-us/previous-versions/office/developer/office-2007/bb221208(v=office.12)
- 微軟公司。 (nd)。 無法辨識的資料庫格式(錯誤 3343). 微軟學習。 https://learn.microsoft.com/en-us/previous-versions/office/office-12/bb223146(v=office.12)
- 微軟公司。 (nd)。 Microsoft Access 資料庫引擎找不到對象。請確保該物件存在,並且其名稱和路徑名拼寫正確。 (錯誤 3011). 微軟學習。 https://learn.microsoft.com/en-us/previous-versions/office/office-12/bb223400(v=office.12)
- 微軟公司。 (nd)。 無法讀取記錄;沒有讀取權限(錯誤 3112). 微軟學習。 https://learn.microsoft.com/en-us/previous-versions/office/office-12/bb223633(v=office.12)
- 完整存取錯誤參考: 下載我們全面的 Access 錯誤代碼清單 (PDF) 包含 3000 多個錯誤代碼、描述和支援的 Access 版本。