Chúng tôi có một cơ sở dữ liệu rất lớn (~ 6TB), có tệp nhật ký giao dịch đã bị xóa (trong khi SQL Server bị tắt. Chúng tôi đã thử:
- Tách rời và gắn lại cơ sở dữ liệu; và
- Hoàn tác tệp nhật ký giao dịch
... nhưng không có gì đã làm việc cho đến nay.
Chúng tôi hiện đang chạy:
ALTER DATABASE <dbname> REBUILD
LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')
... nhưng với kích thước của cơ sở dữ liệu, việc này có thể sẽ mất vài ngày để hoàn thành.
Câu hỏi
Có sự khác biệt giữa lệnh trên và lệnh sau không?
DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS)
Chúng ta có nên thực hiện
REPAIR_ALLOW_DATA_LOSS
Thay vào đó ?
Điều đáng chú ý là dữ liệu được lấy từ các nguồn khác để cơ sở dữ liệu có thể được xây dựng lại, tuy nhiên chúng tôi nghi ngờ việc sửa chữa cơ sở dữ liệu sẽ nhanh hơn nhiều so với việc lắp lại tất cả dữ liệu.
Cập nhật
Đối với những người giữ điểm: ALTER DATABASE/REBUILD LOG
lệnh hoàn thành sau khoảng 36 giờ và được báo cáo:
Cảnh báo: Nhật ký cho cơ sở dữ liệu 'dbname' đã được xây dựng lại. Tính nhất quán giao dịch đã bị mất. Chuỗi RESTORE đã bị hỏng và máy chủ không còn ngữ cảnh trên các tệp nhật ký trước đó, vì vậy bạn sẽ cần biết chúng là gì.
Bạn nên chạy DBCC CHECKDB để xác thực tính nhất quán vật lý. Cơ sở dữ liệu đã được đặt ở chế độ chỉ dbo. Khi bạn sẵn sàng cung cấp cơ sở dữ liệu để sử dụng, bạn sẽ cần đặt lại các tùy chọn cơ sở dữ liệu và xóa mọi tệp nhật ký bổ sung.
Sau đó chúng tôi đã chạy một DBCC CHECKDB
(mất khoảng 13 giờ) đã thành công. Chúng ta hãy nói rằng tất cả chúng ta đã học được tầm quan trọng của sao lưu cơ sở dữ liệu (và cấp cho người quản lý dự án quyền truy cập vào máy chủ ...).