回覆列表
-
1 # 使用者9117358402677
-
2 # dadazhu2
網上各種方法都用了沒成功
我來介紹下我的方法吧可能你的情況與我一樣
我SQL2000安裝在C盤,資料庫檔案在D盤。
我就把D盤檔案複製到,C:\Program Files\MSQL\DATA\放這裡。這裡全是資料庫系統庫,具體路徑請根據自己情況。
然後重啟服務-附加就好了。
之後再分離,再把C盤的資料庫原始檔剪下走貼上到非C盤,再重新附加即可。
備份資料檔案,然後按下面的步驟處理:
1.新建一個同名的資料庫(資料檔案與原來的要一致)
2.再停掉sql server(注意不要分離資料庫)
3.用原資料庫的資料檔案覆蓋掉這個新建的資料庫
4.再重啟sql server
5.此時開啟企業管理器時會出現置疑,先不管,執行下面的語句(注意修改其中的資料庫名)
6.完成後一般就可以訪問資料庫中的資料了,這時,資料庫本身一般還要問題,解決辦法是,利用
資料庫的指令碼建立一個新的資料庫,並將資料導進去就行了.
USE MASTER
GO
SP_CONFIGURE "ALLOW UPDATES",1 RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME="置疑的資料庫名"
Go
sp_dboption "置疑的資料庫名", "single user", "true"
Go
DBCC CHECKDB("置疑的資料庫名")
Go
update sysdatabases set status =28 where name="置疑的資料庫名"
Go
sp_configure "allow updates", 0 reconfigure with override
Go
sp_dboption "置疑的資料庫名", "single user", "false
假設資料庫為TEST:
按以下步驟執行
A.設定資料庫允許直接作業系統表。此操作可以在SQL Server Enterprise Manager裡面選擇資料庫伺服器,按右鍵,選擇“屬性”,在“伺服器設定”頁面中將“允許對系統目錄直接修改”一項選中。也可以使用如下語句來實現。
use master
go
sp_configure "allow updates",1
go
reconfigure with override
go
B.設定test為緊急修復模式
update sysdatabases set status=-32768 where dbid=DB_ID("test")
此時可以在SQL Server Enterprise Manager裡面看到該資料庫處於“只讀\置疑\離線\緊急模式”可以看到資料庫裡面的表,但是僅僅有系統表
C.下面執行真正的恢復操作,重建資料庫日誌檔案
dbcc rebuild_log("test","C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf")
執行過程中,如果遇到下列提示資訊:
伺服器: 訊息 5030,級別 16,狀態 1,行 1
未能排它地鎖定資料庫以執行該操作。
DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。
說明您的其他程式正在使用該資料庫,如果剛才您在F步驟中使用SQL Server Enterprise Manager打開了test庫的系統表,那麼退出SQL Server Enterprise Manager就可以了。
正確執行完成的提示應該類似於:
DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。
此時開啟在SQL Server Enterprise Manager裡面會看到資料庫的狀態為“只供DBO使用”。此時可以訪問資料庫裡面的使用者表了。
D.驗證資料庫一致性(可省略)
dbcc checkdb("test")
一般執行結果如下:
CHECKDB 發現了 0 個分配錯誤和 0 個一致性錯誤(在資料庫 "test" 中)。
DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。
E.設定資料庫為正常狀態
sp_dboption "test","dbo use only","false"
如果沒有出錯,那麼恭喜,現在就可以正常的使用恢復後的資料庫啦。
F.最後一步,我們要將步驟E中設定的“允許對系統目錄直接修改”一項恢復。因為平時直接作業系統表是一件比較危險的事情。當然,我們可以在SQL Server Enterprise Manager裡面恢復,也可以使用如下語句完成
sp_configure "allow updates",0
go
reconfigure with override
go
上面的語句操作步驟有點問題:
應該如下:
A.我們使用預設方式建立一個供恢復使用的資料庫(如test)。可以在SQL Server Enterprise Manager裡面建立。
B.停掉資料庫伺服器。
D.啟動資料庫伺服器。此時會看到資料庫test的狀態為“置疑”。這時候不能對此資料庫進行任何操作。
E.設定資料庫允許直接作業系統表。此操作可以在SQL Server Enterprise Manager裡面選擇資料庫伺服器,按右鍵,選擇“屬性”,在“伺服器設定”頁面中將“允許對系統目錄直接修改”一項選中。也可以使用如下語句來實現。
use master
go
sp_configure "allow updates",1
go
reconfigure with override
go
F.設定test為緊急修復模式
update sysdatabases set status=-32768 where dbid=DB_ID("test")
此時可以在SQL Server Enterprise Manager裡面看到該資料庫處於“只讀\置疑\離線\緊急模式”可以看到資料庫裡面的表,但是僅僅有系統表
G.下面執行真正的恢復操作,重建資料庫日誌檔案
dbcc rebuild_log("test","C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf")
執行過程中,如果遇到下列提示資訊:
伺服器: 訊息 5030,級別 16,狀態 1,行 1
未能排它地鎖定資料庫以執行該操作。
DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。
說明您的其他程式正在使用該資料庫,如果剛才您在F步驟中使用SQL Server Enterprise Manager打開了test庫的系統表,那麼退出SQL Server Enterprise Manager就可以了。
正確執行完成的提示應該類似於:
DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。
此時開啟在SQL Server Enterprise Manager裡面會看到資料庫的狀態為“只供DBO使用”。此時可以訪問資料庫裡面的使用者表了。
H.驗證資料庫一致性(可省略)
dbcc checkdb("test")
一般執行結果如下:
CHECKDB 發現了 0 個分配錯誤和 0 個一致性錯誤(在資料庫 "test" 中)。
DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。
I.設定資料庫為正常狀態
sp_dboption "test","dbo use only","false"
如果沒有出錯,那麼恭喜,現在就可以正常的使用恢復後的資料庫啦。
J.最後一步,我們要將步驟E中設定的“允許對系統目錄直接修改”一項恢復。因為平時直接作業系統表是一件比較危險的事情。當然,我們可以在SQL Server Enterprise Manager裡面恢復,也可以使用如下語句完成
sp_configure "allow updates",0
go
reconfigure with override
go