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 sys.databases.database_id
--DELETE FROM msdb..suspect_pages
-- WHERE (event_type = 4 OR event_type = 5 OR event_type = 7);
--GO
Sửa lỗi Suspect Database: Gặp lỗi này bạn chỉ cần chạy đoạn script sau:
ALTER DATABASE [DBName] SET EMERGENCY;
GO
ALTER DATABASE [DBName] set single_user
GO
DBCC CHECKDB ([DBName], REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS;
GO
ALTER DATABASE [DBName] set multi_user
GO
Tham khảo tại
https://www.stellarinfo.com/blog/fix-sql-database-recovery-pending-state-issue/
Dò tìm page_id thuộc bảng nào
DBCC TRACEON (3604);
DBCC PAGE (50, 1, 739301, 0);
DBCC TRACEOFF (3604);
GO
SELECT OBJECT_NAME (0);
GO
Trong đó 50 là database_id, 1 là file_id, 739301 là page_id
B1: Copy lại database bị suspect của bạn ra 1 folder khác
B2: Tạo mới 1 database trùng tên với database bị suspect
CREATE DATABASE [DemoSuspect];GO
B3: Chuyển database vừa tạo sang offline
-- Check the files are there...ALTER DATABASE [DemoSuspect] SET OFFLINE;GO
B4: Copy database bị suspect của bạn đè lên database mới tạo
B5: Đưa database bị suspect trở lại online
ALTER DATABASE [DemoSuspect] SET ONLINE;GO SELECT DATABASEPROPERTYEX (N'DemoSuspect', N'STATUS');GOSQL server sẽ báo lỗi. Tuy nhiên như vậy là đã thành công
B6: Sửa lỗi database bị suspect (như ở mục 1)
3. Detach suspect database: Để detach suspect database bạn thực hiện 3 bước
B1: Chuyển database sang offline
ALTER DATABASE [DemoSuspect] SET OFFLINE;GO
B2: Copy lại file database (file .mdf, .ldf)
B3: Xóa database này đi
DROP DATABASE [DemoSuspect];GO
4. Tạo suspect database
B1: Khởi tạo database và dữ liệu demo
USE [master];GOCREATE DATABASE [DemoSuspect];GOUSE [DemoSuspect];GOCREATE TABLE [Employees] ([FirstName] VARCHAR (20),[LastName] VARCHAR (20),[YearlyBonus] INT);GOINSERT INTO [Employees] VALUES ('Paul', 'Randal', 10000);INSERT INTO [Employees] VALUES ('Kimberly', 'Tripp', 10000);GO
B2: Thực hiện update không chuẩn
-- Simulate an in-flight transactionBEGIN TRAN;UPDATE[Employees]SET[YearlyBonus] = 0WHERE[LastName] = 'Tripp';GO -- Force the update to diskCHECKPOINT;GO
B3: Ở một cửa sổ khác, giả lập lỗi
SHUTDOWN WITH NOWAIT;GO
B4: khởi động lại SQL server
B5: Xem trạng thái databse
SELECT DATABASEPROPERTYEX (N'DemoSuspect', N'STATUS') AS N'Status';GO