Không thể khôi phục SQL Server db từ sao lưu toàn bộ, xử lý nhật ký không thành công, cơ sở dữ liệu ở trạng thái 'khôi phục'


14

Tôi đang cố gắng thiết lập cơ sở dữ liệu cho mục đích phát triển trên SQL Server Developer Edition 12.0.2000.8 của PC. Tôi đã có một bản sao lưu cơ sở dữ liệu đầy đủ và các tệp sao lưu chỉ ghi nhật ký giao dịch có sẵn được gửi cho tôi qua mạng.

Khi cố gắng khôi phục từ bản sao lưu đầy đủ, sau một thời gian (có thể ~ 1 giờ, cơ sở dữ liệu có kích thước ~ 270 GB), tôi gặp lỗi:

System.Data.SqlClient.SqlError: Đã xảy ra lỗi khi xử lý nhật ký cho cơ sở dữ liệu 'tên cơ sở dữ liệu'. Nếu có thể, khôi phục từ bản sao lưu. Nếu một bản sao lưu không có sẵn, có thể cần phải xây dựng lại nhật ký. (Microsoft.SqlServer.SmoExtends)

Sau này, db ở trạng thái 'Khôi phục ..'.

Tôi muốn chạy một cái gì đó như (nhận được từ câu hỏi này )

ALTER DATABASE recovery_test_2 SET EMERGENCY;
ALTER DATABASE recovery_test_2 SET SINGLE_USER;

DBCC CHECKDB (recovery_test_2, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;

chống lại nó, nhưng tự nhiên tôi không thể vì cơ sở dữ liệu đang ở trạng thái 'Khôi phục .. ". Khởi động lại quá trình khôi phục trên đó dẫn đến cùng một thông báo lỗi, bỏ và khôi phục lại cũng không giúp được gì.

Làm thế nào để tôi có được db và làm việc? Tính nhất quán trong giao dịch không thành vấn đề với tôi.

Kịch bản khôi phục được tạo tự động SSMS:

  USE [master]
  RESTORE DATABASE [database_name] FROM  DISK = N'D:\database_name.bak' WITH  FILE = 1,
  MOVE N'database_name' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name.mdf',
  MOVE N'database_name_index' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_index.ndf',
  MOVE N'database_name_log' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_log.ldf',
  NOUNLOAD,
  STATS = 5

  GO

Kết quả của truy vấn được đề xuất bởi @Craig Efrein

Nhật ký không thể được xây dựng lại vì đã có giao dịch / người dùng mở khi cơ sở dữ liệu bị tắt, không có điểm kiểm tra nào xảy ra với cơ sở dữ liệu hoặc cơ sở dữ liệu chỉ đọc. Lỗi này có thể xảy ra nếu tệp nhật ký giao dịch bị xóa hoặc mất thủ công do lỗi phần cứng hoặc môi trường.


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Paul White phục hồi Monica

Câu trả lời:


2

Từ các bình luận được chuyển sang trò chuyện, ghi chú này từ OP:

Tôi vừa thử gắn nó qua GUI. Khi tôi chọn tệp .mdf, SSMS đã xác định cơ sở dữ liệu bao gồm 3 tệp (dữ liệu, chỉ mục, nhật ký), nhưng bằng cách nào đó mặc dù tôi đã khôi phục VỚI MOVE, chi tiết cơ sở dữ liệu về đường dẫn tệp đã nói sai! Vì vậy, tôi chỉ trỏ chúng vào tệp nhật ký / dữ liệu / chỉ mục cũ và ... Cơ sở dữ liệu đang trực tuyến.


-3

Thay đổi chế độ người dùng và khôi phục.

ví dụ:
Khôi phục đầu tiên sử dụng tùy chọn BÌNH THƯỜNG để khôi phục bổ sung có thể được thực hiện. Lệnh thứ hai khôi phục nhật ký giao dịch và sau đó đưa cơ sở dữ liệu trực tuyến để sử dụng cho người dùng cuối.

RESTORE DATABASE AdventureWorks FROM DISK = 'C:\AdventureWorks.BAK'
WITH NORECOVERY
GO
RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks.TRN'
WITH RECOVERY
GO

1
Câu hỏi tham khảo một câu lệnh RESTORE DATABASE duy nhất, không có khôi phục nhật ký giao dịch riêng biệt nào được thực hiện. Có khả năng cơ sở dữ liệu nguồn và / hoặc tệp sao lưu bị hỏng.
Bryan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.