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.