國(guó)內(nèi)一些ERP、財(cái)務(wù)軟件一般后臺(tái)都使用SQL Server的數(shù)據(jù)庫(kù),SQL Server作為一個(gè)中大型數(shù)據(jù)庫(kù)是不應(yīng)該在桌面系統(tǒng)上運(yùn)行的,小規(guī)模企業(yè)一般不使用專(zhuān)用服務(wù)器,大部分直接使用XP系統(tǒng)+桌面引擎MSDE作為SQL數(shù)據(jù)庫(kù)的后臺(tái)服務(wù)。這種方案當(dāng)然就談不上什么穩(wěn)定性和可靠性了,最糟的是在死機(jī)、重啟或意外掉電后數(shù)據(jù)庫(kù)會(huì)出現(xiàn)打不開(kāi)的現(xiàn)象,其中錯(cuò)誤9003:LSN(xx:xx:x)無(wú)效是最常見(jiàn)的問(wèn)題。
這種情況是數(shù)據(jù)庫(kù)的日志文件(LDF)數(shù)據(jù)不同步造成的,可以根據(jù)數(shù)據(jù)庫(kù)MDF文件重建日志文件修復(fù)。
以下是詳細(xì)步驟,有顏色標(biāo)注的部分應(yīng)該按本機(jī)的實(shí)際名稱(chēng)進(jìn)行修改。
假設(shè)損壞的數(shù)據(jù)庫(kù)名稱(chēng)是MYDB_001,對(duì)應(yīng)的數(shù)據(jù)庫(kù)名稱(chēng)是MyDB_Data.MDF,日志文件是MyDB_Log.LDF,數(shù)據(jù)庫(kù)所在文件夾為D:\MYDATA\;
1、先把損壞的數(shù)據(jù)庫(kù)對(duì)應(yīng)的文件MyDB_Data.MDF和MyDB_Log.LDF備份到別的地方;
2、在SQL Server和企業(yè)管理器中創(chuàng)建一個(gè)與損壞數(shù)據(jù)庫(kù)同名的數(shù)據(jù)庫(kù),對(duì)應(yīng)的數(shù)據(jù)庫(kù)文件名稱(chēng)也是MyDB_Data.MDF和MyDB_Log.LDF;
3、停止SQL Server服務(wù);
4、刪除第2步新建數(shù)據(jù)庫(kù)產(chǎn)生的MyDB_Log.LDF文件;
5、用損壞的數(shù)據(jù)庫(kù)數(shù)據(jù)文件MyDB_Data.MDF覆蓋第2步新建數(shù)據(jù)庫(kù)產(chǎn)生的MyDB_Data.MDF文件
6、啟動(dòng)SQL Server服務(wù);
7、進(jìn)入企業(yè)管理器,刷新數(shù)據(jù)庫(kù)狀態(tài),此時(shí)數(shù)據(jù)庫(kù)MYDB_001狀態(tài)為“置疑”;
8、在SQL Server服務(wù)器屬性中設(shè)置SQL Server數(shù)據(jù)庫(kù)服務(wù)器“允許對(duì)系統(tǒng)目錄直接修改”
9、從SQL企業(yè)管理器的“工具”菜單啟動(dòng)“SQL 查詢(xún)分析器”;
10、輸入以下代碼并運(yùn)行使MYDB_001數(shù)據(jù)庫(kù)進(jìn)入緊急修復(fù)模式:
update sysdatabases set status=-32768 where dbid=DB_ID('MYDB_001')
這句語(yǔ)句執(zhí)行后,刷新企業(yè)管理器,MYDB_001數(shù)據(jù)庫(kù)的狀態(tài)變成“只讀\置疑\脫機(jī)\緊急模式”。
11、輸入以下語(yǔ)句并執(zhí)行重建日志文件;
dbcc rebuild_log('MYDB_001','D:\MYDATA\MyDB_Log.LDF')
這句語(yǔ)句執(zhí)行后,刷新企業(yè)管理器,MYDB_001數(shù)據(jù)庫(kù)的狀態(tài)變成“只供DBO使用”。
12、輸入并執(zhí)行正面的語(yǔ)句設(shè)置數(shù)據(jù)庫(kù)MYDB_001到正常狀態(tài);
exec sp_dboption 'MYDB_001','dbo use only','false'
這句語(yǔ)句執(zhí)行后,刷新企業(yè)管理器,MYDB_001數(shù)據(jù)庫(kù)變成正常狀態(tài)。
到此,MYDB_001數(shù)據(jù)庫(kù)修復(fù)成功。最后不要忘記關(guān)閉第8步中打開(kāi)的“允許對(duì)系統(tǒng)目錄直接進(jìn)行修改”服務(wù)器開(kāi)關(guān)。
聯(lián)系客服