Informazioni sulla tabella suspect_pages e sulla relativa gestione

La tabella suspect_pages è contenuta nel database msdb ed è stata introdotta in SQL Server 2005. La tabella suspect_pages, utilizzata per la gestione di informazioni sulle pagine sospette, è importante per stabilire se è necessario un ripristino.

Una pagina è considerata "sospetta" quando in Motore di database di SQL Server si verifica uno dei seguenti errori quando viene tentata la lettura di una pagina di dati:

  • Un errore 823 causato da un controllo di ridondanza ciclico (CRC) generato dal sistema operativo, ad esempio un errore del disco (alcuni errori hardware)

  • Un errore 824, ad esempio una pagina incompleta (qualsiasi errore logico)

L'ID di ogni pagina sospetta viene registrato nella tabella suspect_pages. Motore di database registra tutte le pagine sospette rilevate durante la normale elaborazione, ad esempio nei casi seguenti:

  • Una pagina deve essere letta da una query.

  • Durante un'operazione DBCC CHECKDB.

  • Durante un'operazione di backup.

La tabella suspect_pages viene inoltre aggiornata in base alle necessità durante un'operazione di ripristino, un'operazione di correzione DBCC o un'operazione di rimozione del database.

Errori registrati nella tabella suspect_pages

La tabella suspect_pages include una riga per ogni pagina che ha restituito un errore 824, fino a un limite di 1.000 righe. Nella seguente tabella vengono mostrati errori registrati nella colonna event_type della tabella suspect_pages:

Descrizione dell'errore

Valore della colonna event_type

Errore 823 causato da un errore CRC del sistema operativo o errore 824 diverso da un errore nel checksum o da una pagina incompleta (ad esempio un ID pagina errato)

1

Errore nel checksum

2

Pagina incompleta

3

Pagina ripristinata (la pagina è stata ripristinata dopo essere stata contrassegnata come danneggiata)

4

Pagina corretta (la pagina è stata corretta da DBCC)

5

Pagina deallocata da DBCC

7

Nella tabella suspect_pages vengono inoltre registrati gli errori temporanei. Tra le origini degli errori temporanei rientrano gli errori di I/O, ad esempio un cavo disconnesso, o le pagine che non superano temporaneamente un test di checksum ripetuto.

Procedura di aggiornamento della tabella suspect_pages tramite il Motore di database

IlMotore di database esegue le azioni seguenti nella tabella suspect_pages:

  • Se la tabella non è piena, viene aggiornata per ogni errore 824 in modo da segnalare il verificarsi dell'errore e viene incrementato il contatore degli errori.

  • Se una pagina contiene un errore dopo l'esecuzione di un'operazione di correzione, ripristino o deallocazione, il conteggio number_of_errors corrispondente viene incrementato e la relativa colonna last_update viene aggiornata.

  • Dopo l'esecuzione di un'operazione di ripristino o di correzione di una pagina elencata, la riga suspect_pages viene aggiornata per indicare che la pagina è stata corretta (event_type = 5) o ripristinata (event_type = 4).

  • Se viene eseguito un controllo DBCC, tutte le pagine prive di errori vengono contrassegnate come corrette (event_type = 5) o deallocate (event_type = 7).

Aggiornamenti automatici della tabella suspect_pages

Un partner per il mirroring del database aggiorna la tabella suspect_pages dopo che un tentativo di leggere una pagina da un file di dati non riesce per una delle seguenti ragioni.

  • Un errore del 823 causato da un errore CRC del sistema operativo.

  • Un errore 824 (danneggiamento logico, ad esempio una pagina incompleta)

Le azioni seguenti eliminano automaticamente righe dalla tabella suspect_pages:

  • ALTER DATABASE REMOVE FILE

  • DROP DATABASE

  • L'azione DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS aggiorna la tabella suspect_pages per indicare ogni pagina deallocata o corretta.

  • L'elenco viene aggiornato anche dall'azione RESTORE. In seguito a un ripristino completo del file o della pagina, le voci della pagina vengono contrassegnate come ripristinate.

Ruolo di gestione dell'amministratore del database

Gli amministratori dei database sono responsabili della gestione della tabella, in particolare dell'eliminazione delle righe meno recenti. Poiché le dimensioni della tabella suspect_pages sono limitate, se questa si riempie, non verranno registrati nuovi errori. Per evitare che lo spazio della tabella si esaurisca, l'amministratore del database o l'amministratore di sistema devono cancellare manualmente i dati meno recenti dalla tabella tramite l'eliminazione delle righe. Pertanto si consiglia di eliminare periodicamente o archiviare righe aventi un event_type ripristinato o riparato, o righe con un valore last_update obsoleto.

Per monitorare l'attività sulla tabella suspect_pages è possibile utilizzare Classe di evento Database Suspect Data Page. Talvolta, a causa di errori temporanei, vengono aggiunte righe alla tabella suspect_pages. Tuttavia se vengono aggiunte molte righe alla tabella è probabile che vi sia un problema con il sottosistema I/O. Se si nota un aumento improvviso nel numero di righe che vengono aggiunte alla tabella, si consiglia di esaminare possibili problemi nel sottosistema I/O.

L'amministratore del database può inoltre inserire o aggiornare i record. Ad esempio, l'aggiornamento di una riga potrebbe essere utile se l'amministratore del database è certo che una determinata pagina sospetta è in realtà rimasta invariata, ma desidera mantenere temporaneamente il record.

Esempi

Nell'esempio seguente vengono eliminate alcune righe dalla tabella suspect_pages.

' Select restored, repaired, or deallocated pages.
DELETE FROM msdb..suspect_pages
   WHERE (event_type = 4 OR event_type = 5 OR event_type = 7);
GO

Nell'esempio seguente vengono selezionate le pagine danneggiate della tabella suspect_pages.

' Select nonspecific 824, bad checksum, and torn page errors.
SELECT * FROM msdb..suspect_pages
   WHERE (event_type = 1 OR event_type = 2 OR event_type = 3);
GO