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?