MSSQLSERVER_832

Si applica a:SQL Server

Dettagli

Attributo Valore
Nome prodotto SQL Server
ID evento 832
Origine evento MSSQLSERVER
Componente SQLEngine
Nome simbolico B_CONSTPAGECHANGED
Testo del messaggio Una pagina che dovrebbe essere stata costante è stata modificata (checksum previsto: <valore previsto, checksum effettivo: <valore> effettivo, database <dbid>, file '<filename>', pageno<>).> Questa situazione indica in genere un errore di memoria o altri problemi a livello di hardware o sistema operativo.

Spiegazione

Un fattore esterno ha causato la modifica di una pagina del database al di fuori del normale codice del motore di SQL Server usato per modificare le pagine del database. Le condizioni potrebbero essere:

  • Thread in esecuzione nel processo di SQL Server che scrive in modo non corretto in una pagina del database. spesso noto come "scribbler".
  • Un problema relativo all'hardware o al sistema operativo a causa del quale la memoria a supporto della pagina del database viene modificata erroneamente o danneggiata.

Quando SQL Server rileva questo errore di comportamento 832 viene generato.

Azione utente

Per individuare la causa dell'errore, prendere in considerazione le opzioni seguenti:

  • È consigliabile eseguire i normali controlli hardware o di sistema per determinare se esiste un problema correlato a memoria, CPU o un altro problema correlato all'hardware. Verificare che siano stati applicati al sistema tutti i driver di sistema, gli aggiornamenti del sistema operativo e gli aggiornamenti dell'hardware. Prendere in considerazione l'esecuzione di qualsiasi diagnostica del produttore dell'hardware, inclusi i test correlati alla memoria.
  • Valutare quali DLL "esterne" possono essere caricate in SQL Server che potrebbero causare questo problema, incluse stored procedure estese, oggetti COM o altre DLL che potrebbero modificare erroneamente la memoria di SQL Server riservata per le pagine del database.

Ogni volta che viene visualizzato questo errore, è consigliabile considerare immediatamente l'esecuzione DBCC CHECKDB nel database a cui fa riferimento il <dbid> nel messaggio di errore.

Altre informazioni

Questo errore viene rilevato dall'attività in background spesso denominata LazyWriter. (Il "comando" per questa attività viene considerato LAZY WRITER.) Questo errore non viene pertanto restituito a un'applicazione client. L'errore verrà scritto nel log eventi dell'applicazione di Windows come EventID=832.

Vengono controllate solo le pagine non attualmente modificate nella cache (o "dirty"). È per questo motivo che il messaggio usa il termine "costante", perché la pagina non è mai stata modificata dopo essere stata letta dal disco. Inoltre, la pagina è stata letta "pulita" dal disco perché contiene un valore di checksum nella pagina e non ha rilevato un errore di checksum (messaggio 824). Tuttavia, la pagina potrebbe essere modificata a un certo punto dopo l'errore e quindi scritta sul disco con la modifica non corretta. Se si verifica questo errore, viene calcolato un nuovo checksum in base a tutte le modifiche prima della scrittura su disco. Pertanto, la pagina potrebbe essere danneggiata sul disco, ma una lettura successiva dal disco potrebbe non generare un errore di checksum. È importante eseguire DBCC CHECKDB su tutti i database a cui fa riferimento questo errore.

È possibile che anche DBCC CHECKDB non segnali un errore per una pagina in questo stato dopo la scrittura su disco. Il motivo è che la modifica non corretta potrebbe trovarsi in posizioni della pagina che non contengono dati, né contengono informazioni importanti sulla struttura della pagina o delle righe oppure potrebbe trattarsi di modifiche ai dati che CHECKDB non è in grado di rilevare.

Per altri dettagli e informazioni sul messaggio 832, vedere anche il white paper Concetti di base di I/O di SQL Server, capitolo 2.