当你 SQL Server MDF数据库损坏,可以使用以下方法恢复其中的数据,减少损失:
注意:在执行任何数据恢复操作之前,请先备份损坏的 MDF 和 NDF 数据库文件。
- 首先,您可以尝试 SQL Server 内置命令 DBCC 检查数据库 恢复您的数据库。 假设损坏的数据库文件是“MyDatabase.mdf”,那么您可以按照以下步骤恢复其中的数据:
- 住宅tart SQL Server.
- 不执行任何操作。
- In SQL Server Management Studio,执行如下SQL语句:
use master declare @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(@databasename,REPAIR_ALLOW_DATA_LOSS)
执行修复操作时,可能会导致数据库中的某些数据丢失。
虽然声明
dbcc checkdb(@databasename,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
- 如果使用方法一后dbcc checkdb仍然报错部分表,可以试试 SQL Server 内置命令 DBCC CHECKTABLE 可恢复数据库中的这些表。 假设损坏的数据库文件是“MyDatabase.mdf”,而你要修复的表是“MyTable”,那么你可以按如下方式修复它:
- 住宅tart SQL Server.
- 不执行任何操作。
- In SQL Server Management Studio,执行如下SQL语句:
使用 MyDatabase.mdf declare @dbname varchar(255) set @dbname='MyDatabase.mdf' exec sp_dboption @dbname,'single user','true' dbcc checktable('MyTable',REPAIR_ALLOW_DATA_LOSS) dbcc checktable('MyTable',REPAIR_REBUILD ) exec sp_dboption @dbname,'单用户','false'
该声明
dbcc 检查表('MyTable',REPAIR_ALLOW_DATA_LOSS)
执行修复操作时,可能会导致表中的某些数据丢失。
虽然声明
dbcc 检查表('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
- 如果方法一和方法二仍然不能修复损坏的数据库或表,或者这些方法不能恢复你想要的数据,那么你可以使用 DataNumen SQL Recovery 从 MDF 数据库中恢复数据。