Fix Data hay table SQL bị lỗi suspect
Kiểm tra data nào bị lỗi Suspect
SELECT sys.databases.name, msdb..suspect_pages.event_type, msdb..suspect_pages.database_id,msdb..suspect_pages.file_id,msdb..suspect_pages.page_id
FROM msdb..suspect_pages
INNER JOIN sys.databases ON msdb.dbo.suspect_pages.database_id = sys.databases.database_id
ORDER BY msdb..suspect_pages.database_id
--DELETE FROM msdb..suspect_pages
-- WHERE (event_type = 4 OR event_type = 5 OR event_type = 7);
--GO
Lưu ý: sau khi sửa lỗi các data có event_type = 4,5,6 có thể xóa
Kiểm tra Data có bị lỗi không
DBCC CHECKDB
Các lưu ý:
+ Trước khi chạy phải Backup Full
+ Lúc chạy lệnh này thì data vẫn hoạt động bình thường, nhưng time chạy rất lâu, nên tốt nhất cho Chương trình thông báo bảo trì, và nên chạy ngoài giờ để hạn chế lỗi
Fix data bị lỗi
USE [master];
GO
ALTER DATABASE data_name SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKDB(N'data_name', REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE data_name SET MULTI_USER;
Các lưu ý:
+ Trước khi chạy phải Backup Full
+ Lệnh này chạy bắt buộc không được nhập liệu, nên phải thông báo khách hàng là đang bảo trì
+ Dữ liệu có thể bị mất các bảng ghi bị lỗi
Fix table data bị lỗi
Tìm ra bảng bị lỗi từ cảnh báo lỗi
select object_name(1428824798)

Chạy fix lỗi bảng đã tìm
USE SIVIPTT133_2018_M_TEST_APP
GO
ALTER DATABASE SIVIPTT133_2018_M_TEST_APP SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DBCC CHECKTABLE ('i71$202001', REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
ALTER DATABASE SIVIPTT133_2018_M_TEST_APP SET MULTI_USER;
Các lưu ý:
+ Ví dụ trên là fix bảng i71$202001 của data SIVIPTT133_2018_MENUMOI_APP bị lỗi
+ Trước khi chạy phải Backup Full
+ Lệnh này chạy bắt buộc không được nhập liệu, nên phải thông báo khách hàng là đang bảo trì
+ Dữ liệu có thể bị mất các bảng ghi bị lỗi
Last updated
Was this helpful?