程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> 只有mdf文件的數據庫附加失敗的修復方法分享(置疑、只讀)

只有mdf文件的數據庫附加失敗的修復方法分享(置疑、只讀)

編輯:更多數據庫知識

只有mdf文件的數據庫附加失敗的修復
附加時報如下錯誤:
服務器: 消息 1813,級別 16,狀態 2,行 1
未能打開新數據庫 'test'。CREATE DATABASE 將終止。
設備激活錯誤。物理文件名 "d:\data\test_log.LDF' 可能有誤。
步驟:
A、用“企業管理器”新建一個同名的數據。可以修改默認路徑,為表述方便,我使用D:\data\,數據文件名test.mdf,日志文件名test_log.ldf
B、停止SQL服務
C、刪除test_log.ldf文件,將新建的test.mdf文件用舊的test.mdf文件替換。
D、啟動SQL服務。進入企業管理器後發現test數據顯示為“置疑”,此後保證無人連接上此數據庫,並不做任何操作。
E、設置test數據庫允許直接操作系統表。此操作可以在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')
復制代碼執行後在企業管理器中刷新後會發現ttdb數據庫顯示為“只讀\置疑\脫機\緊急模式”。可以看到數據庫裡面的表,但是僅僅有系統表。
G、重建數據庫日志文件。在查詢分析器中執行如下語句:
復制代碼 代碼如下:
dbcc rebuild_log('test','d:\Data\test_log.ldf')

執行之前必須退出企業管理器,並且沒有人連接些數據庫。否則會報如下錯誤:
服務器: 消息 5030,級別 16,狀態 1,行 1
未能排它地鎖定數據庫以執行該操作。
DBCC 執行完畢。如果 DBCC 輸出了錯誤信息,請與系統管理員聯系。
正常的消息:
警告: 數據庫 'test' 的日志已重建。已失去事務的一致性。應運行 DBCC CHECKDB 以驗證物理一致性。將必須重置數據庫選項,並且可能需要刪除多余的日志文件。
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'

走到這一步,如果沒有報錯,已經可以長長舒一口氣了,去喝口水吧。:P
J、最後一步,我們要將步驟E中設置的“允許對系統目錄直接修改”一項恢復。怎麼做當然不用再多說啦。也可以執行語句:
復制代碼 代碼如下:
sp_configure 'allow updates',0
go
reconfigure with override
go

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved