當你 SQL Server MDF數據庫已損壞,可以使用以下方法恢復其中的數據,以減少丟失:
注意:在執行任何數據恢復操作之前,請先備份損壞的MDF和NDF數據庫文件。
- 首先,您可以嘗試 SQL Server 內置命令 DBCC 檢查數據庫 恢復您的數據庫。 假設損壞的數據庫文件是“ MyDatabase.mdf”,則可以執行以下操作來恢復其中的數據:
- 住宅tart SQL Server.
- 不要執行任何操作。
- In SQL Server 在Management Studio中,執行以下SQL語句:
使用master聲明@databasename varchar(255)set @ databasename ='MyDatabase.mdf'exec sp_dboption @databasename,N'single',N'true'-將目標數據庫設置為單用戶模式dbcc checkdb(@ databasename,REPAIR_ALLOW_DATA_LOSS )dbcc checkdb(@ databasename,REPAIR_REBUILD)exec sp_dboption @databasename,N'single',N'false'-將目標數據庫設置回多用戶模式
該聲明
dbcc checkdb(@數據庫名稱,REPAIR_ALLOW_DATA_LOSS)
執行修復操作時,可能會導致數據庫中某些數據丟失。
雖然聲明
dbcc checkdb(@數據庫名稱,REPAIR_REBUILD)
不會在修復操作過程中造成任何數據丟失,但是更耗時。
因此,如果您不很緊急,則可以首先嘗試僅執行第二個dbcc checkdb語句,如果該語句不能幫助恢復數據庫,則可以執行第一條和第二條dbcc checkdb命令。
修復操作後,您可以致電
dbcc checkdb('MyDatabase.mdf')
再次查看數據庫是否固定。
有關dbcc checkdb命令的更多詳細信息,請參見: https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql?view=sql-server-ver15
- 如果在使用方法1之後,dbcc checkdb仍然在某些表中報告錯誤,則可以嘗試 SQL Server 內置命令DBCC CHECKTABLE來恢復數據庫中的這些表。 假設損壞的數據庫文件是“ MyDatabase.mdf”,而您要修復的表是“ MyTable”,則可以執行以下操作來修復它:
- 住宅tart SQL Server.
- 不要執行任何操作。
- In SQL Server 在Management Studio中,執行以下SQL語句:
使用MyDatabase.mdf聲明@dbname varchar(255)設置@ dbname ='MyDatabase.mdf'exec sp_dboption @dbname,'單個用戶','true'dbcc checktable('MyTable',REPAIR_ALLOW_DATA_LOSS)dbcc checktable('MyTable',REPAIR_REBUILD )exec sp_dboption @dbname,'單個用戶','false'
該聲明
dbcc checktable('MyTable',REPAIR_ALLOW_DATA_LOSS)
執行修復操作時,可能會導致表中的某些數據丟失。
雖然聲明
dbcc checktable('MyTable',REPAIR_REBUILD)
不會在修復操作過程中造成任何數據丟失,但是更耗時。
因此,如果您不很緊急,則可以首先嘗試僅執行第二個dbcc checktable語句,如果該語句不能幫助恢復數據庫,則可以執行第一條和第二條dbcc checktable命令。
完成所有損壞的表的修復操作後,您可以調用
dbcc checkdb('MyDatabase.mdf')
再次查看數據庫中的表是否固定。
有關dbcc checktable命令的更多詳細信息,請參見: https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checktable-transact-sql?view=sql-server-ver15
- 如果方法1和2仍然無法修復損壞的數據庫或表,或者如果這些方法無法恢復所需的數據,則可以使用 DataNumen SQL Recovery 從您的MDF數據庫中恢復數據。