SQL Server 2008 không thể sửa chữa tính nhất quán


7

Tôi gặp vấn đề với cơ sở dữ liệu SQL Server 2008.

Ra mắt

DBCC CHECKDB

Tôi nhận được lỗi này:

SQL Server đã phát hiện lỗi I / O dựa trên tính nhất quán logic: tổng kiểm tra không chính xác (dự kiến: 0xd2e00940; thực tế: 0x925ef494). Nó xảy ra trong quá trình đọc trang (1: 15215) trong cơ sở dữ liệu ID 22 ở offset 0x000000076de000 trong tệp 'C: \ Program Files \ Microsoft SQL Server \ MSSQL10_50.MSQuerySERVER \ MSSQL \ DATA \ file.mdf'. Thông báo bổ sung trong nhật ký lỗi SQL Server hoặc nhật ký sự kiện hệ thống có thể cung cấp chi tiết hơn. Đây là một tình trạng lỗi nghiêm trọng đe dọa tính toàn vẹn của cơ sở dữ liệu và phải được sửa chữa ngay lập tức. Hoàn thành kiểm tra tính nhất quán cơ sở dữ liệu đầy đủ (DBCC CHECKDB). Lỗi này có thể được gây ra bởi nhiều yếu tố; để biết thêm thông tin, hãy xem SQL Server Books Online.

Tôi tìm thấy bảng gây ra vấn đề:

DBCC CHECKTABLE

Msg 824, Cấp 24, Trạng thái 2, Dòng 8
Máy chủ SQL đã phát hiện lỗi I / O dựa trên tính nhất quán logic: tổng kiểm tra không chính xác (dự kiến: 0xd2e00940; thực tế: 0x925ef494). Nó xảy ra trong quá trình đọc trang (1: 15215) trong cơ sở dữ liệu ID 22 ở offset 0x000000076de000 trong tệp 'C: \ Program Files \ Microsoft SQL Server \ MSSQL10_50.MSQuerySERVER \ MSSQL \ DATA \ file.mdf'. Thông báo bổ sung trong nhật ký lỗi SQL Server hoặc nhật ký sự kiện hệ thống có thể cung cấp chi tiết hơn. Đây là một tình trạng lỗi nghiêm trọng đe dọa tính toàn vẹn của cơ sở dữ liệu và phải được sửa chữa ngay lập tức.

Hoàn thành kiểm tra tính nhất quán cơ sở dữ liệu đầy đủ (DBCC CHECKDB). Lỗi này có thể được gây ra bởi nhiều yếu tố; để biết thêm thông tin, hãy xem SQL Server Books Online.

Vì vậy, tôi đã cố gắng với các hoạt động sửa chữa:

DBCC CHECKTABLE (table_name, REPAIR_ALLOW_DATA_LOSS)

nhưng tôi nhận được cùng một lỗi:

Msg 824, Cấp 24, Trạng thái 2, Dòng 8
Máy chủ SQL đã phát hiện lỗi I / O dựa trên tính nhất quán logic: tổng kiểm tra không chính xác (dự kiến: 0xd2e00940; thực tế: 0x925ef494). Nó xảy ra trong quá trình đọc trang (1: 15215) trong cơ sở dữ liệu ID 22 ở offset 0x000000076de000 trong tệp 'C: \ Program Files \ Microsoft SQL Server \ MSSQL10_50.MSQuerySERVER \ MSSQL \ DATA \ file.mdf'. Thông báo bổ sung trong nhật ký lỗi SQL Server hoặc nhật ký sự kiện hệ thống có thể cung cấp chi tiết hơn. Đây là một tình trạng lỗi nghiêm trọng đe dọa tính toàn vẹn của cơ sở dữ liệu và phải được sửa chữa ngay lập tức.

Hoàn thành kiểm tra tính nhất quán cơ sở dữ liệu đầy đủ (DBCC CHECKDB). Lỗi này có thể được gây ra bởi nhiều yếu tố; để biết thêm thông tin, hãy xem SQL Server Books Online.

Tôi cũng đã thử đặt DB ở chế độ SINGLE_USER nhưng không có kết quả.

Tôi không thể xóa cũng như cắt bớt bảng. Như tôi luôn nhận được cùng một lỗi.

Bảng không có bất kỳ ràng buộc. Nó có một PK và một Index, nhưng tôi không thể bỏ bất kỳ cái nào trong số chúng.


7
Bạn có một bản sao lưu vẫn còn tốt không? Bạn có thể phải sử dụng VỚI REPAIR_ALLOW_DATA_LOSS hoặc trở lại bản sao lưu tốt. Xem sqlskills.com/blogs/paul/...sqlskills.com/blogs/paul/...
Aaron Bertrand

Nếu đây là một cơ sở dữ liệu lớn và bạn có các bản sao lưu tốt, tôi sẽ thử khôi phục một trang và xem điều đó có khắc phục được không.
Jon Seigel

Tôi đã thử sửa chữa với REPAIR_ALLOW_DATA_LOSS, nhưng nó không hoạt động và trả lại cho tôi một thông báo lỗi. Tôi không có bản sao lưu tốt để sử dụng cho toàn bộ DB. Có thể khôi phục chỉ bảng bị hỏng từ một bản sao lưu đơn giản?
Enrico

Câu trả lời:


4

Bạn cần khôi phục trang từ bản sao lưu đầy đủ, sau đó áp dụng các bản ghi chuyển tiếp đến hiện tại hoặc bạn cần thực hiện khôi phục đầy đủ.

Tôi cũng chạy chkdsk vì có vẻ như bạn có thể gặp sự cố về đĩa vì cùng một trang đang báo cáo sự cố khi cố gắng sửa chữa nó. Cũng chạy bất kỳ công cụ quản lý đĩa và xem nếu họ báo cáo vấn đề với đĩa.


Cảm ơn bạn vì câu trả lời. Tôi không có một bản sao lưu đầy đủ vì tôi thực sự có những cái đơn giản. Mặt khác, tôi sẽ không mất hoặc xóa bảng sai, nhưng tôi không thể xóa bỏ nó. Làm thế nào tôi có thể buộc xóa bảng? Cảm ơn!
Enrico

Vui lòng xác định một bản sao lưu đơn giản vì đó không phải là thuật ngữ SQL Server.
mrdenny

Tôi xin lỗi, bạn nói đúng, tôi đã nói về Mô hình khôi phục.
Enrico

@Enrico Vậy, bạn có sao lưu toàn bộ cơ sở dữ liệu không?
Mary

2
Là bạn đang trong phục hồi đơn giản, khôi phục đầy đủ là lựa chọn duy nhất của bạn. Nếu bạn đã khôi phục hoàn toàn và thực hiện sao lưu nhật ký giao dịch, bạn có thể đã khôi phục chỉ trang thay vì toàn bộ cơ sở dữ liệu. Đây là một trong những hạn chế đã biết của mô hình phục hồi đơn giản.
mrdenny

0

Tôi đã không tìm thấy một giải pháp nhanh chóng, vì vậy tôi đã phục hồi từ bản sao lưu. Tôi đã tạo một DB khôi phục một bản sao lưu cũ. Sau đó, tôi cập nhật dữ liệu trong DB mới nhập chúng từ DB bị hỏng, bỏ qua các bảng bị hỏng. Cuối cùng tôi đã thay thế DB bị hỏng bằng cái mới. Cảm ơn sự giúp đỡ của bạn.

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.