--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