昨天同事給你我一個有問題的資料庫,叫我修複一下因為客戶那邊需要這個資料庫,這個資料庫只有一個mdf檔案和一個ldf檔案,
當我附加資料庫的時候報錯,資料庫是SQL2005
附上有損壞的資料庫檔案:
因為之前在論壇也遇到過,所以按照論壇的方法來解決,結果還是不行
把ldf檔案移到別的地方,然後附加的時候使用下面SQL語句重建交易記錄檔
我的資料庫檔案放在C:\Users\Administrator\Desktop\建立檔案夾目錄下
複製代碼 代碼如下:USE [master]
GO
CREATE DATABASE [AdventureWorks2012] ON
( FILENAME = N'C:\Users\Administrator\Desktop\建立檔案夾\GPOSDB.mdf' )
FOR ATTACH_REBUILD_LOG
GO
報錯內容:複製代碼 代碼如下:1 檔案啟用失敗。物理檔案名稱'D:\MSSSQL\Data\GPOSDB_log.LDF'可能不正確。
2 由於資料庫沒有完全關閉,無法重建日誌。
3 訊息 1813,層級 16,狀態 2,第 1 行
4 無法開啟新資料庫 'GPOSDB'。CREATE DATABASE 中止。
我現在按照這篇文章再試一下
http://www.blogjava.net/kent/articles/200991.html
先建立一個GPOSDB的空庫,然後停掉SQL服務
將剛才產生的資料庫的記錄檔GPOSDB_log.ldf刪除
用要恢複的GPOSDB.mdf檔案覆蓋剛才產生的資料庫資料檔案GPOSDB.mdf
然後把有問題的GPOSDB.mdf檔案放在D盤,因為我建立的GPOSDB資料庫放在D盤
啟動SQL服務
文章說會顯示資料庫置疑,但是我的沒有顯示置疑
設定資料庫允許直接作業系統表
在SSMS裡輸入下面SQL語句
複製代碼 代碼如下:USE master
go
sp_configure 'allow updates', 1
go
RECONFIGURE WITH OVERRIDE
go
設定GPOSDB為緊急修複模式複製代碼 代碼如下:ALTER DATABASE [GPOSDB] SET EMERGENCY
GO
ALTER DATABASE GPOSDB SET SINGLE_USER
GO
UPDATE sysdatabases
SET status = -32768
WHERE dbid = DB_ID('GPOSDB')
GO
但是報錯複製代碼 代碼如下:1 訊息 259,層級 16,狀態 1,第 1 行
2 不允許對系統目錄進行即席更新。
嘗試重建日誌,但是語法錯誤,估計那篇文章是SQL2000的複製代碼 代碼如下:1 DBCC rebuild_log('GPOSDB','D:\GPOSDB_log.ldf')
2 GO
1 訊息 2526,層級 16,狀態 3,第 1 行
2 DBCC 語句錯誤。請查閱文檔以瞭解正確的 DBCC 文法和選項。
一查果然是
--* DBCC REBUILDLOG
--重建SQL Server 2000交易記錄檔
其實一開始在步驟“設定資料庫允許直接作業系統表” 就懷疑是不是SQL2000的,因為SQL2005或以後已經不能修改系統資料表了
最後把交易記錄檔也放到D盤,然後使用下面的SQL語句來修複還是不行
複製代碼 代碼如下:ALTER DATABASE [GPOSDB] SET EMERGENCY
GO
ALTER DATABASE GPOSDB SET SINGLE_USER
GO
DBCC CheckDB (GPOSDB, REPAIR_ALLOW_DATA_LOSS)
GO
複製代碼 代碼如下:訊息 5173,層級 16,狀態 1,第 2 行
一個或多個檔案與資料庫的主檔案不匹配。如果是嘗試附加資料庫,請使用正確的檔案重試該操作。如果這是現有資料庫,則檔案可能已損壞,應該從備份進行還原。
記錄檔 'D:\GPOSDB_log.ldf' 與主檔案不匹配。該檔案可能來自另一資料庫,或者可能以前重建了日誌。
訊息 5123,層級 16,狀態 1,第 2 行
嘗試開啟或建立物理檔案 'D:\MSSSQL\Data\GPOSDB_log.LDF' 時,CREATE FILE 遇到作業系統錯誤 3(系統找不到指定的路徑。)。
訊息 5024,層級 16,狀態 2,第 2 行
在 sysfiles1 中找不到主記錄檔所對應的條目。無法重建日誌。
訊息 5028,層級 16,狀態 2,第 2 行
系統無法啟用足夠的資料庫來重建日誌。
GPOSDB的 DBCC 結果。
CHECKDB 在資料庫 'GPOSDB' 中發現 0 個分配錯誤和 0 個一致性錯誤。
訊息 7909,層級 20,狀態 1,第 2 行
緊急模式修複失敗。您必須從備份中還原。