Återställ en korrupt SQL Server MDF-databas

När du SQL Server MDF-databasen är skadad, du kan använda följande metoder för att återställa data i den för att minska förlusten:

Obs! Innan du utför några dataåterställningsoperationer måste du först säkerhetskopiera dina skadade MDF- och NDF-databasfiler.

  1. Först och främst kan du prova SQL Server inbyggt kommando DBCC CHECKDB för att återställa din databas. Förutsatt att den korrupta databasfilen är 'MyDatabase.mdf' kan du göra på följande sätt för att återställa data inuti den:
    1. Restart SQL Server.
    2. Utför inga åtgärder.
    3. In SQL Server Management Studio, kör följande SQL-uttalanden:
      använd master deklarera @databasename varchar (255) set @ databasename = 'MyDatabase.mdf' exec sp_dboption @databasename, N'single ', N'true' - Ställ destinationsdatabasen till enanvändarläge dbcc checkdb (@ databasename, REPAIR_ALLOW_DATA_LOSS ) dbcc checkdb (@ databasename, REPAIR_REBUILD) exec sp_dboption @databasename, N'single ', N'false' - Ställ tillbaka destinationsdatabasen till fleranvändarläge
      

      Påståendet

      dbcc checkdb (@ databasenamn, REPAIR_ALLOW_DATA_LOSS)
      

      kan orsaka förlust av vissa data i din databas när du utför reparationen.

      Medan uttalandet

      dbcc checkdb (@ databasenamn, REPAIR_REBUILD)
      

      kommer INTE att orsaka dataförlust under reparationsoperationen, men det är mer tidskrävande.

      Så om du inte har brådskande, kan du först försöka utföra den andra dbcc checkdb-satsen, om det uttalandet inte kan hjälpa till att återställa databasen kan du utföra den första och andra dbcc checkdb-kommandot.

      Efter reparationen kan du ringa

      dbcc checkdb ('MyDatabase.mdf')
      

      igen för att se om databasen är fixad eller inte.

      Mer detaljerad information om dbcc checkdb-kommandot finns på https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql?view=sql-server-ver15

  2. Om dbcc checkdb fortfarande rapporterar fel i vissa tabeller efter metod 1 kan du försöka SQL Server inbyggt kommando DBCC CHECKTABLE för att återställa dessa tabeller i din databas. Förutsatt att den korrupta databasfilen är 'MyDatabase.mdf' och tabellen du vill reparera är 'MyTable', kan du göra på följande sätt för att reparera den:
    1. Restart SQL Server.
    2. Utför inga åtgärder.
    3. In SQL Server Management Studio, kör följande SQL-uttalanden:
      använd MyDatabase.mdf deklarera @dbname varchar (255) set @ dbname = 'MyDatabase.mdf' exec sp_dboption @ dbname, 'single user', 'true' dbcc checktable ('MyTable', REPAIR_ALLOW_DATA_LOSS) dbcc checktable ('MyTable_, REPA ) exec sp_dboption @ dbname, 'single user', 'false'
      

      Påståendet

      dbcc checktable ('MyTable', REPAIR_ALLOW_DATA_LOSS)
      

      kan orsaka förlust av vissa data i tabellen när du utför reparationen.

      Medan uttalandet

      dbcc checktable ('MyTable', REPAIR_REBUILD)
      

      kommer INTE att orsaka dataförlust under reparationsoperationen, men det är mer tidskrävande.

      Så om du inte är brådskande kan du först försöka utföra det andra dbcc-checkable-uttalandet, om det uttalandet inte kan hjälpa till att återställa databasen kan du utföra den första och andra dbcc-checktable-kommandot.

      När du har slutfört reparationsåtgärden för alla korrupta tabeller kan du ringa

      dbcc checkdb ('MyDatabase.mdf')
      

      igen för att se om tabellerna i databasen är fasta eller inte.

    Mer detaljerad information om dbcc checktable-kommando finns på https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checktable-transact-sql?view=sql-server-ver15

  3. Om metod 1 och 2 fortfarande inte kan fixa den korrupta databasen eller tabellerna, eller om dessa metoder inte kan återställa de data du vill ha, kan du använda DataNumen SQL Recovery för att återställa data från din MDF-databas.