會(huì)員登錄 - 用戶注冊(cè) - 網(wǎng)站地圖 Office中國(guó)(office-cn.net),專業(yè)Office論壇

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

時(shí)間:2005-08-16 12:21 來源:未知 作者:共享 閱讀:
這篇文章中的信息適用于:
Microsoft access 2000

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

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


概要
各種環(huán)境因素有可能損壞數(shù)據(jù)庫(kù)文件。被破壞的數(shù)據(jù)庫(kù)的癥狀包括:某些記錄顯示 #Deleted;無法打開數(shù)據(jù)庫(kù)中的某個(gè)對(duì)象,以及無法在 Access 中打開該文件。Microsoft Access 2000 中的修復(fù)和壓縮工具是恢復(fù)和優(yōu)化 Microsoft Access 數(shù)據(jù)庫(kù)文件的有效工具。本文說明如何使用這些 access 2000 工具以及其它修復(fù)損壞數(shù)據(jù)庫(kù)的方法。另外,還給出了數(shù)據(jù)庫(kù)損壞原因的信息。
更多信息
盡管本文所描述的步驟通?沙晒Φ鼗謴(fù)已損壞的數(shù)據(jù)庫(kù)文件,但為了保護(hù)數(shù)據(jù),應(yīng)當(dāng)在條件允許的情況下經(jīng)常備份數(shù)據(jù)庫(kù)文件。
壓縮和修復(fù)工具


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

修復(fù)工具只用來修復(fù)數(shù)據(jù)庫(kù)中的表、查詢和索引。它不能修復(fù)已損壞的窗體、報(bào)表、宏或模塊。以下是壓縮工具所執(zhí)行的操作列表。

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

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


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

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

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

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


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

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

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


3、按照下列方法運(yùn)行壓縮和修復(fù)工具:
a、如果數(shù)據(jù)庫(kù)被打開,請(qǐng)先關(guān)閉它。
b、在工具菜單上,指向數(shù)據(jù)庫(kù)實(shí)用工具,然后單擊壓縮和修復(fù)數(shù)據(jù)庫(kù)。
c、在壓縮數(shù)據(jù)庫(kù)來源對(duì)話框中,選擇要壓縮的文件,然后單擊壓縮。
d、在壓縮數(shù)據(jù)庫(kù)為對(duì)話框中,輸入新的文件名并單擊保存。

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

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

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

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

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

有關(guān) Microsoft access Internet 新聞組的詳細(xì)信息,請(qǐng)參見 Microsoft Knowledge Base 中的下列文章:
150057 Internet 上可用的 Microsoft access 新聞組

.mdb 文件損壞的常見原因


access/Jet mdb 文件損壞有三個(gè)主要原因。

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


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

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


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


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

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


在另一個(gè)程序中打開和保存 mdb 文件


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

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


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


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


●在數(shù)據(jù)庫(kù)寫入過程中避免斷電。斷電將使數(shù)據(jù)庫(kù)處于置疑狀態(tài)。
●避免網(wǎng)絡(luò)連接斷開。
●避免不正常斷開 Microsoft Jet 連接,如斷電、手動(dòng)關(guān)閉、使用任務(wù)管理器關(guān)閉應(yīng)用程序等。
●編程時(shí)應(yīng)關(guān)閉所有打開的 DAO 和 ADO 對(duì)象。示例包括:Recordset、QueryDef、TableDef 和 Database 對(duì)象。

●致命系統(tǒng)錯(cuò)誤幾乎總是導(dǎo)致不正常始止。如果數(shù)據(jù)庫(kù)容易出現(xiàn)致命錯(cuò)誤,則在數(shù)據(jù)庫(kù)由于破壞嚴(yán)重而無法打開或恢復(fù)之前,應(yīng)該消除這些錯(cuò)誤。

●經(jīng)常壓縮此數(shù)據(jù)庫(kù)。
●不要在 Windows NT Server 上運(yùn)行 IPX,其中 Jet 數(shù)據(jù)庫(kù)放在網(wǎng)絡(luò)上,而客戶機(jī)使用帶有 IPX/SPX 的 Microsoft Windows 95。而是在 Windows NT Server 上運(yùn)行 TCP-IP,而在 Win95 客戶機(jī)上運(yùn)行雙協(xié)議棧 IPX 和 TCP-IP。(Windows NT 對(duì) Windows NT + IPX/SPX 不會(huì)出現(xiàn)問題,客戶機(jī)采用 Novell 也不會(huì)出現(xiàn)問題。)
●避免在循環(huán)中使用大量打開/關(guān)閉操作(40,000 次連續(xù)的打開/關(guān)閉操作到 1,000,000 次以上)。
參考
有關(guān)修復(fù)數(shù)據(jù)庫(kù)的詳細(xì)信息,請(qǐng)單擊幫助菜單上的 Microsoft access 幫助,在“Office 助手”或“操作向?qū)А敝休斎胄迯?fù),然后單擊搜索查看該主題。

(責(zé)任編輯:admin)

頂一下
(0)
0%
踩一下
(0)
0%
發(fā)表評(píng)論
請(qǐng)自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
評(píng)價(jià):