天天看點

sql server 錯誤9003:LSN無效(日志掃描号無效),對資料庫的修複.

--sql server 錯誤9003:LSN無效(日志掃描号無效)

--今天,從朋友那兒接到一個有問題的資料庫檔案與日志檔案,在使用sql2000與sql2005進行資料庫附加時,

--sql server報錯,錯誤資訊: "傳遞給資料庫 'POS' 中的日志掃描操作的日志掃描号 (2806:120:1) 無效。

--此錯誤可能訓示資料損壞,或者日志檔案(.ldf)與資料檔案(.mdf)不比對。

--如果此錯誤是在複制期間出現的,請重新建立釋出。否則,如果該問題導緻啟動期間出錯,請從備份還原。

--無法打開新資料庫 'POS'。CREATE DATABASE 中止。 (Microsoft SQL Server,錯誤: 9003)"

一看是9003錯誤,就想到可能是由于日志檔案的原因,再看資料庫檔案可能損壞,于是想到dbcc checkdb指令.

--方法如下:

--1.我們使用預設方式建立一個供恢複使用的資料庫(如pos)。可以在SQL   Server   Enterprise   Manager裡面建立。  

--2.停掉資料庫伺服器。  

--3.将剛才生成的資料庫的日志檔案pos_log.ldf删除,用要恢複的資料庫mdf檔案覆寫剛才生成的資料庫資料檔案pos_data.mdf。  

--4.啟動資料庫伺服器。此時會看到資料庫pos的狀态為“置疑”。這時候不能對此資料庫進行任何操作。  

--5.設定資料庫允許直接作業系統表。此操作可以在SQL   Server   Enterprise   Manager裡面選擇資料庫伺服器,按右鍵,選擇“屬性”,在“伺服器設定”頁面中将“允許對系統目錄直接修改”一項選中。也可以使用如下語句來實作。  

use   master  

go  

exec sp_configure   'allow updates',1  

go    

reconfigure   with   override  

go  

--6.設定pos為緊急修複模式  

update sysdatabases set status=-32768 where dbid=DB_ID('pos')  

--此時可以在SQL   Server   Enterprise   Manager裡面看到該資料庫處于“隻讀/置疑/脫機/緊急模式”可以看到資料庫裡面的表,但是僅僅有系統表  

--7.下面執行真正的恢複操作,重建資料庫日志檔案  

go

dbcc rebuild_log('pos','D:/Program Files/Microsoft SQL Server/MSSQL/Data/pos_log.ldf')  

go

--執行過程中,如果遇到下列提示資訊:  

--伺服器:   消息   5030,級别   16,狀态   1,行   1  

--未能排它地鎖定資料庫以執行該操作。  

--DBCC   執行完畢。如果   DBCC   輸出了錯誤資訊,請與系統管理者聯系。  

--說明您的其他程式正在使用該資料庫,如果剛才您在F步驟中使用SQL   Server   Enterprise   Manager打開了pos庫的系統表,那麼退出SQL   Server   Enterprise   Manager就可以了。  

--正确執行完成的提示應該類似于:  

--警告:   資料庫   'pos'   的日志已重建。已失去事務的一緻性。應運作   DBCC   CHECKDB   以驗證實體一緻性。将必須重置資料庫選項,并且可能需要删除多餘的日志檔案。  

--DBCC   執行完畢。如果   DBCC   輸出了錯誤資訊,請與系統管理者聯系。  

--此時打開在SQL   Server   Enterprise   Manager裡面會看到資料庫的狀态為“隻供DBO使用”。此時可以通路資料庫裡面的使用者表了。  

--8.驗證資料庫一緻性(可省略)  

go

dbcc checkdb('pos')  

--一般執行結果如下:  

--CHECKDB   發現了   0   個配置設定錯誤和   0   個一緻性錯誤(在資料庫   'pos'   中)。  

--DBCC   執行完畢。如果   DBCC   輸出了錯誤資訊,請與系統管理者聯系。  

--9.設定資料庫為正常狀态  

go

exec sp_dboption 'pos','dbo use only','false'  

go

--如果沒有出錯,那麼恭喜,現在就可以正常的使用恢複後的資料庫啦。  

--10.最後一步,我們要将步驟E中設定的“允許對系統目錄直接修改”一項恢複。因為平時直接作業系統表是一件比較危險的事情。當然,我們可以在SQL   Server   Enterprise   Manager裡面恢複,也可以使用如下語句完成  

exec sp_configure   'allow updates',0  

go    

reconfigure   with   override  

go