關(guān)于SQLServer 2000中錯誤9003和數據庫置疑問(wèn)題的解決方案
吳琨(2011-4-7) 今天遇到一個(gè)進(jìn)銷(xiāo)存管理系統大型版的客戶(hù)數據庫附加報錯的問(wèn)題。我們知道管易通系列管理軟件大型版使用的是SQLServer 2000數據庫,在數據庫分離之后,會(huì )有兩個(gè)數據庫文件,一個(gè)是后綴名為.MDF的數據文件,另一個(gè)是后綴名為.LDF的數據日志文件,然而當我把客戶(hù)發(fā)給我的數據庫在SQL2000個(gè)人版中附加時(shí)卻出現了錯誤:

點(diǎn)擊圖中的【確定】按鈕,會(huì )出現附加失敗的提示:

出現這種問(wèn)題不用慌,“百度一下 你就知道”!我們從錯誤9003開(kāi)始著(zhù)手分析,可知道此錯誤是由于數據日志文件損壞而導致的,萬(wàn)幸的是數據主文件是好的,雖然數據日志文件的作用不是很大,可關(guān)鍵時(shí)候缺了它也不行!我們可以通過(guò)SQL2000和龐大的SQL語(yǔ)句來(lái)逐步修復數據日志文件。
第一步,在企業(yè)管理器中,手動(dòng)新建一個(gè)同名的數據庫(假如數據庫為“海川氣動(dòng)”),注意建立的數據庫名稱(chēng),還有數據文件名要保持和原數據庫一致,如圖:

點(diǎn)擊TAB選項卡上面的【數據文件】和【事務(wù)日志】可以看到這兩個(gè)文件名稱(chēng)都是自動(dòng)命名好的,在“位置”一欄里注意這兩個(gè)文件的存放路徑,默認路徑是:C:\Program Files\Microsoft SQL Server\MSSQL\data 記好了,稍后會(huì )打開(kāi)的:

新建好了后點(diǎn)擊【確定】,可以在企業(yè)管理器中看到我們新建的那個(gè)數據庫。
第二步,停止數據庫服務(wù)器,點(diǎn)擊【停止】按鈕,然后刷新,使數據庫服務(wù)器呈停止狀態(tài):

在C:\Program Files\Microsoft SQL Server\MSSQL\data路徑里將剛才新建數據庫生成的數據庫日志文件“海川氣動(dòng)_log.ldf”刪除,用要恢復的數據庫.mdf文件覆蓋剛才生成的數據庫數據文件“海川氣動(dòng)_data.mdf”。
啟動(dòng)數據庫服務(wù)器。在其偶也管理器的控制臺根目錄里刷新一下數據庫,此時(shí)會(huì )看到數據庫“海川氣動(dòng)”的狀態(tài)為“置疑”。注意,這時(shí)候是不能對此數據庫進(jìn)行任何操作的!

設置數據庫允許直接操作系統表。此操作可以在企業(yè)管理器(SQL Server Enterprise Manager)里面選擇數據庫服務(wù)器,按鼠標右鍵,選擇“屬性”,在“服務(wù)器設置”頁(yè)面中將“允許對系統目錄直接進(jìn)行修改”一項選中:

第三步,設置“海川氣動(dòng)”為緊急修復模式。打開(kāi)SQL2000的“查詢(xún)分析器”,把下面那段SQL語(yǔ)句復制進(jìn)去:
update sysdatabases set status=-32768 where dbid=DB_ID('海川氣動(dòng)')
然后按鍵盤(pán)上的F5功能鍵或者鼠標單擊“查詢(xún)分析器”上面的綠色小三角圖標執行語(yǔ)句:

在“企業(yè)管理器”里面刷新一下數據庫,此時(shí)可以看到該數據庫處于“只讀\置疑\脫機\緊急模式”:

第四步,執行真正的恢復操作,用dbcc rebuild_log命令來(lái)重建數據庫日志文件(重建路徑根據你實(shí)際的數據庫路徑來(lái))。在SQL2000的“查詢(xún)分析器”中運行以下SQL語(yǔ)句:
dbcc rebuild_log('海川氣動(dòng)','C:\Program Files\Microsoft SQL Server\MSSQL\Data\海川氣動(dòng)_log.ldf')
執行結果會(huì )有兩種情況:

服務(wù)器: 消息 5030,級別 16,狀態(tài) 1,行 1
未能排它地鎖定數據庫以執行該*作。
DBCC 執行完畢。如果 DBCC 輸出了錯誤信息,請與系統管理員聯(lián)系。
如果是這種情況的話(huà),說(shuō)明您的其他程序正在使用該數據庫,您只需要退出企業(yè)管理器(SQL Server Enterprise Manager)就可以了,然后重新執行:

正確執行完成的提示應該類(lèi)似于:
警告: 數據庫 '海川氣動(dòng)' 的日志已重建。已失去事務(wù)的一致性。應運行 DBCC CHECKDB 以驗證物理一致
性。將必須重置數據庫選項,并且可能需要刪除多余的日志文件。
DBCC 執行完畢。如果 DBCC 輸出了錯誤信息,請與系統管理員聯(lián)系。
這時(shí)打開(kāi)“企業(yè)管理器”刷新一下數據庫,會(huì )看到數據庫的狀態(tài)為“只供DBO使用”:

第五步,驗證數據庫一致性(此步驟可省略)。在SQL查詢(xún)分析器里執行以下語(yǔ)句:
dbcc checkdb('海川氣動(dòng)')

一般執行結果如下:
CHECKDB 發(fā)現了 0 個(gè)分配錯誤和 0 個(gè)一致性錯誤(在數據庫 'test' 中)。
DBCC 執行完畢。如果 DBCC 輸出了錯誤信息,請與系統管理員聯(lián)系。
第六步,設置數據庫為正常狀態(tài)。在SQL查詢(xún)分析器里執行以下語(yǔ)句:
sp_dboption '海川氣動(dòng)','dbo use only','false'

這時(shí),在企業(yè)管理器里面刷新一下數據庫,可以看到數據庫恢復正常:

如果沒(méi)有出錯,那么恭喜,現在就可以正常的使用恢復后的數據庫啦!
在SQL企業(yè)管理器里面分離一下數據庫,然后進(jìn)C:\Program Files\Microsoft SQL Server\MSSQL\data里找到那兩個(gè)數據庫文件,拷貝出來(lái),就可以使用了。