Khôi phục một tham nhũng SQL Server Cơ sở dữ liệu MDF

Khi bạn SQL Server Cơ sở dữ liệu MDF bị hỏng, bạn có thể sử dụng các phương pháp sau để khôi phục dữ liệu trong đó, nhằm giảm tổn thất:

Lưu ý: Trước khi thực hiện bất kỳ thao tác khôi phục dữ liệu nào, trước tiên hãy sao lưu các tệp cơ sở dữ liệu MDF & NDF bị hỏng của bạn.

  1. Trước hết, bạn có thể thử SQL Server lệnh tích hợp DBCC KIỂM TRADB để khôi phục cơ sở dữ liệu của bạn. Giả sử tệp cơ sở dữ liệu bị hỏng là 'MyDatabase.mdf', thì bạn có thể thực hiện như sau để khôi phục dữ liệu bên trong nó:
    1. Restart SQL Server.
    2. Không thực hiện bất kỳ hoạt động nào.
    3. In SQL Server Management Studio, thực thi các câu lệnh SQL sau:
      sử dụng khai báo chính @databasename varchar(255) set @databasename='MyDatabase.mdf' exec sp_dboption @databasename, N'single', N'true' -- Đặt cơ sở dữ liệu đích sang chế độ một người dùng dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS ) dbcc checkdb(@databasename,REPAIR_REBUILD) exec sp_dboption @databasename, N'single', N'false' -- Đặt cơ sở dữ liệu đích trở lại chế độ nhiều người dùng
      

      Tuyên bố

      dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)
      

      có thể làm mất một số dữ liệu trong cơ sở dữ liệu của bạn khi thực hiện thao tác sửa chữa.

      Trong khi tuyên bố

      dbcc checkdb(@databasename,REPAIR_REBUILD)
      

      sẽ KHÔNG gây mất dữ liệu trong quá trình sửa chữa nhưng tốn nhiều thời gian hơn.

      Vì vậy, nếu bạn không khẩn cấp, trước tiên bạn có thể thử chỉ thực hiện câu lệnh dbcc checkdb thứ hai, nếu câu lệnh đó không thể giúp khôi phục cơ sở dữ liệu, thì bạn có thể thực hiện lệnh dbcc checkdb thứ nhất và thứ hai.

      Sau thao tác sửa chữa, bạn có thể gọi

      dbcc checkdb('MyDatabase.mdf')
      

      một lần nữa để xem cơ sở dữ liệu đã được sửa hay chưa.

      Thông tin chi tiết hơn về lệnh dbcc checkdb có thể được tìm thấy tại https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql?view=sql-server-ver15

  2. Nếu sau khi sử dụng cách 1 mà dbcc checkdb vẫn báo lỗi ở một số bảng thì bạn có thể thử SQL Server lệnh tích hợp DBCC CHECKTABLE để khôi phục các bảng này trong cơ sở dữ liệu của bạn. Giả sử tệp cơ sở dữ liệu bị hỏng là 'MyDatabase.mdf' và bảng bạn muốn sửa chữa là 'MyTable', thì bạn có thể thực hiện như sau để sửa nó:
    1. Restart SQL Server.
    2. Không thực hiện bất kỳ hoạt động nào.
    3. In SQL Server Management Studio, thực thi các câu lệnh SQL sau:
      sử dụng MyDatabase.mdf khai báo @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,'single user','false'
      

      Tuyên bố

      bảng kiểm tra dbcc('MyTable',REPAIR_ALLOW_DATA_LOSS)
      

      có thể gây mất một số dữ liệu trong bảng của bạn khi thực hiện thao tác sửa chữa.

      Trong khi tuyên bố

      bảng kiểm tra dbcc('MyTable',REPAIR_REBUILD)
      

      sẽ KHÔNG gây mất dữ liệu trong quá trình sửa chữa nhưng tốn nhiều thời gian hơn.

      Vì vậy, nếu bạn không khẩn cấp, trước tiên bạn có thể thử chỉ thực hiện câu lệnh có thể kiểm tra dbcc thứ hai, nếu câu lệnh đó không thể giúp khôi phục cơ sở dữ liệu thì bạn có thể thực hiện các lệnh có thể kiểm tra dbcc thứ nhất và thứ hai.

      Sau khi bạn hoàn thành thao tác sửa chữa cho tất cả các bảng bị hỏng, bạn có thể gọi

      dbcc checkdb('MyDatabase.mdf')
      

      một lần nữa để xem các bảng trong cơ sở dữ liệu có được sửa hay không.

    Thông tin chi tiết hơn về lệnh có thể kiểm tra dbcc có thể được tìm thấy tại https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checktable-transact-sql?view=sql-server-ver15

  3. Nếu phương pháp 1 và 2 vẫn không thể sửa được cơ sở dữ liệu hoặc bảng bị hỏng hoặc nếu các phương pháp này không thể khôi phục dữ liệu bạn muốn thì bạn có thể sử dụng DataNumen SQL Recovery để khôi phục dữ liệu từ cơ sở dữ liệu MDF của bạn.