Correzione di pagina automatica (Gruppi di disponibilità/Mirroring del database)Automatic Page Repair (Availability Groups: Database Mirroring)

La correzione automatica della pagina è supportata dal mirroring del database e da Gruppi di disponibilità Always OnAlways On availability groups.Automatic page repair is supported by database mirroring and by Gruppi di disponibilità Always OnAlways On availability groups. Se una pagina viene danneggiata e resa illeggibile a causa di determinati tipi di errori, viene tentato il relativo recupero automatico tramite un partner di mirroring di database (principale o mirror) o una replica di disponibilità (primaria o secondaria).After certain types of errors corrupt a page, making it unreadable, a database mirroring partner (principal or mirror) or an availability replica (primary or secondary) attempts to automatically recover the page. Dal partner o dalla replica che non è grado di leggere la pagina viene richiesta una copia aggiornata di quest'ultima dal relativo partner o da un'altra replica.The partner/replica that cannot read the page requests a fresh copy of the page from its partner or from another replica. Se la richiesta viene soddisfatta, la pagina illeggibile viene sostituita dalla copia leggibile. In questo modo, l'errore viene in genere risolto.If this request succeeds, the unreadable page is replaced by the readable copy, and this usually resolves the error.

In generale, gli errori di I/O possono essere gestiti dal mirroring del database e da Gruppi di disponibilità Always OnAlways On availability groups in modi equivalenti.Generally speaking, database mirroring and Gruppi di disponibilità Always OnAlways On availability groups handle I/O errors in equivalent ways. Di seguito sono illustrate in modo esplicito le poche differenze.The few differences are explicitly called out here.

Nota

La correzione automatica della pagina è diversa dalla correzione DBCC.Automatic page repair differs from DBCC repair. La correzione automatica della pagina consente di mantenere tutti i dati.All of the data is preserved by an automatic page repair. La correzione di errori con l'opzione DBCC_REPAIR_ALLOW_DATA_LOSS può invece richiedere l'eliminazione di alcune pagine, con una conseguente perdita di dati.In contrast, correcting errors by using the DBCC REPAIR_ALLOW_DATA_LOSS option might require that some pages, and therefore data, be deleted.

Error Types That Cause an Automatic Page-Repair Attempt Error Types That Cause an Automatic Page-Repair Attempt

Durante la correzione automatica delle pagine tramite mirroring del database, viene eseguito il tentativo di ripristinare solo le pagine in un file di dati in cui non è stato possibile completare un'operazione, a causa di uno degli errori elencati nella tabella seguente.Database mirroring automatic page repair tries to repair only pages in a data file on which an operation has failed for one of the errors listed in the following table.

Numero di erroreError number DescrizioneDescription Istanze che provocano un tentativo di correzione automatica della paginaInstances that cause automatic page-repair attempt
823823 Viene eseguita un'azione solo se il sistema operativo ha eseguito un controllo di ridondanza ciclico (CRC, Cyclic Redundancy Check) che ha generato un errore sui dati.Action is taken only if the operating system performed a cyclic redundancy check (CRC) that failed on the data. ERROR_CRC.ERROR_CRC. Il valore del sistema operativo per questo errore è 23.The operating-system value for this error is 23.
824824 Errori logici.Logical errors. Errori logici dei dati, come ad esempio un errore di checksum relativo a una pagina danneggiata o di scrittura incompleta.Logical data errors, such as torn write or bad page checksum.
829829 Una pagina contrassegnata come "ripristino in sospeso".A page has been marked as restore pending. Tutti.All.

Per visualizzare gli errori CRC 823 e gli errori 824 recenti, vedere la tabella suspect_pages nel database msdb .To view recent 823 CRC errors and 824 errors, see the suspect_pages table in the msdb database.

Page Types That Cannot Be Automatically Repaired Page Types That Cannot Be Automatically Repaired

La correzione automatica della pagina non può ripristinare i tipi di pagine di controllo seguenti:Automatic page repair cannot repair the following control page types:

  • Pagina di intestazione del file (ID pagina 0).File header page (page ID 0).

  • Pagina 9 (pagina di avvio del database).Page 9 (the database boot page).

  • Pagine di allocazione: pagine mappa di allocazione globale (GAM, Global Allocation Map), pagine mappa di allocazione globale condivisa (SGAM, Shared Global Allocation Map) e pagine spazio libero nella pagina (PFS, Page Free Space).Allocation pages: Global Allocation Map (GAM) pages, Shared Global Allocation Map (SGAM) pages, and Page Free Space (PFS) pages.

Handling I/O Errors on the Principal/Primary Database Handling I/O Errors on the Principal/Primary Database

Nel database principale o primario, la correzione automatica della pagina è possibile solo quando il database è nello stato SINCRONIZZATO e tramite esso si stanno ancora inviando record di log per il database al database mirror o secondario.On the principal/primary database, automatic page repair is tried only when the database is in the SYNCHRONIZED state and the principal/primary is still sending log records for the database to the mirror/secondary. La sequenza di azioni di base in un tentativo di correzione automatica della pagina è la seguente:The basic sequence of actions in an automatic page-repair attempt are as follows:

  1. Quando si verifica un errore di lettura in una pagina di dati nel database principale o primario, tramite quest'ultimo viene inserita una riga nella tabella suspect_pages con lo stato di errore appropriato.When a read error occurs on a data page in the principal/primary database, the principal/primary inserts a row in the suspect_pages table with the appropriate error status. Per il mirroring del database, dal database principale viene richiesta una copia della pagina dal database mirror.For database mirroring, the principal then requests a copy of the page from the mirror. Per Gruppi di disponibilità Always OnAlways On availability groups, tramite il database primario viene trasmessa la richiesta a tutti i database secondari e la pagina viene restituita dal primo a rispondere.For Gruppi di disponibilità Always OnAlways On availability groups, the primary broadcasts the request to all the secondaries and gets the page from the first to respond. Nella richiesta viene specificato l'ID della pagina e il numero LSN presente attualmente al termine del log scaricato.The request specifies the page ID and the LSN that is currently at the end of the flushed log. La pagina è contrassegnata come ripristino in sospeso.The page is marked as restore pending. In questo modo non sarà possibile accedervi durante il tentativo di correzione automatica della pagina.This makes it inaccessible during the automatic page-repair attempt. L'accesso a questa pagina durante il tentativo di correzione non verrà consentito e sarà visualizzato l'errore 829 (ripristino in sospeso).Attempts to access this page during the repair attempt will fail with error 829 (restore pending).

  2. Dopo aver ricevuto la richiesta della pagina, dal database mirror o secondario viene atteso il completamento del rollforward del log fino al numero LSN specificato nella richiesta.After receiving the page request, the mirror/secondary waits until it has redone the log up to the LSN specified in the request. Successivamente, tramite il database mirror o secondario si tenta di accedere alla pagina nella relativa copia del database.Then, the mirror/secondary tries to access the page in its copy of the database. Se è possibile accedere alla pagina, la copia della pagina al database principale o primario viene inviata dal database mirror o secondario.If the page can be accessed, the mirror/secondary sends the copy of the page to the principal/primary. In caso contrario, tramite il database mirror o secondario viene restituito un errore al database principale o primario e il tentativo di correzione automatica della pagina non verrà completato.Otherwise, the mirror/secondary returns an error to the principal/primary, and the automatic page-repair attempt fails.

  3. Il database principale o primario consente di elaborare la risposta contenente la copia aggiornata della pagina.The principal/primary processes the response that contains the fresh copy of the page.

  4. Una volta completata la correzione automatica di una pagina sospetta, la pagina viene contrassegnata nella tabella suspect_pages come ripristinata (event_type = 5).After the automatic page-repair attempt fixes a suspect page, the page is marked in the suspect_pages table as restored (event_type = 5).

  5. Se l'errore di I/O della pagina ha causato una qualsiasi transazione posticipata, una volta corretta la pagina, tramite il database principale o primario viene tentato di risolvere queste transazioni.If the page I/O error caused any deferred transactions, after you repair the page, the principal/primary tries to resolve those transactions.

Handling I/O Errors on the Mirror/Secondary Database Handling I/O Errors on the Mirror/Secondary Database

Gli errori di I/O nelle pagine di dati che si verificano nel database mirror o secondario sono gestiti in genere nello stesso modo dal mirroring del database e da Gruppi di disponibilità Always OnAlways On availability groups.I/O errors on data pages that occur on the mirror/secondary database are handled in generally the same way by database mirroring and by Gruppi di disponibilità Always OnAlways On availability groups.

  1. Con il mirroring del database, se vengono rilevati errori di I/O in una o più pagine dal database mirror quando tramite quest'ultimo viene eseguito il rollforward di un record di log, per la sessione di mirroring viene attivato lo stato SOSPESO.With database mirroring, if the mirror encounters one or more page I/O errors when it redoes a log record, the mirroring session enters the SUSPENDED state. Con Gruppi di disponibilità Always OnAlways On availability groups, se vengono rilevati errori di I/O in una o più pagine da una replica secondaria quando tramite quest'ultima viene eseguito il rollforward di un record di log, per il database secondario viene attivato lo stato SOSPESO.With Gruppi di disponibilità Always OnAlways On availability groups, if a secondary replica encounters one or more page I/O errors when it redoes a log record, the secondary database enters the SUSPENDED state. A questo punto, il database mirror o secondario inserisce una riga con la stato di errore appropriato nella tabella suspect_pages .At that point, the mirror/secondary inserts a row in the suspect_pages table with the appropriate error status. Dal database mirror o secondario viene quindi richiesta una copia della pagina dal database principale o primario.The mirror/secondary then requests a copy of the page from the principal/primary.

  2. Tramite il database principale o primario si tenta di accedere alla pagina nella relativa copia del database.The principal/primary tries to access the page in its copy of the database. Se è possibile accedere alla pagina, la copia della pagina al database mirror o secondario viene inviata dal database principale o primario.If the page can be accessed, the principal/primary sends the copy of page to the mirror/secondary.

  3. Se dal database mirror o secondario si riceve una copia di tutte le pagine richieste, tramite questo database si tenta di riprendere la sessione di mirroring.If the mirror/secondary receives copies of every page it has requested, the mirror/secondary tries to resume the mirroring session. Se la correzione automatica di una pagina sospetta viene eseguita, la pagina viene contrassegnata nella tabella suspect_pages come ripristinata (event_type = 4).If an automatic page-repair attempt fixes a suspect page, the page is marked in the suspect_pages table as restored (event_type = 4).

    Se da un database mirror o secondario non si riceve una pagina richiesta dal database principale o primario, il tentativo di correzione automatica della pagina non verrà completato.If a mirror/secondary does not receive a page that it requested from the principal/primary, the automatic page-repair attempt fails. Con il mirroring del database, la sessione di mirroring rimane sospesa.With database mirroring, the mirroring session remains suspended. Con Gruppi di disponibilità Always OnAlways On availability groups, il database secondario rimane sospeso.With Gruppi di disponibilità Always OnAlways On availability groups, the secondary database remains suspended. Se la ripresa della sessione di mirroring o del database secondario viene eseguita manualmente, le pagine danneggiate verranno rilevate nuovamente durante la fase di sincronizzazione.If the mirroring session or secondary database is resumed manually, the corrupted pages will be hit again during the synchronization phase.

Developer Best Practice Developer Best Practice

La correzione automatica di una pagina è un processo asincrono eseguito in background.An automatic page repair is an asynchronous process that runs in the background. Pertanto, non sarà possibile completare un'operazione sul database tramite cui viene richiesta una pagina illeggibile e verrà restituito il codice di errore relativo alla condizione che lo ha causato.Therefore, a database operation that requests an unreadable page fails and returns the error code for whatever condition caused the failure. In fase di sviluppo di un'applicazione per un database con mirroring o un database di disponibilità, è consigliabile intercettare le eccezioni per le operazioni con errori.When developing an application for a mirrored database or an availability database, you should intercept exceptions for failed operations. Se il codice di errore di SQL ServerSQL Server è 823, 824 o 829, ripetere l'operazione in un secondo momento.If the SQL ServerSQL Server error code is 823, 824, or 829, you should retry the operation later.

How To: View Automatic Page-Repair Attempts How To: View Automatic Page-Repair Attempts

Tramite le DMV seguenti vengono restituite righe degli ultimi tentativi di correzione automatica delle pagine in un database di disponibilità o database con mirroring specificato, con un massimo di 100 righe per database.The following dynamic management views return rows for the latest automatic page-repair attempts on a given availability database or mirrored database, with a maximum of 100 rows per database.

  • Gruppi di disponibilità AlwaysOn:Always On Availability Groups:

    sys.dm_hadr_auto_page_repair (Transact-SQL)sys.dm_hadr_auto_page_repair (Transact-SQL)

    Restituisce una riga per ogni tentativo di correzione automatica della pagina in qualsiasi database di disponibilità in una replica di disponibilità ospitata per qualsiasi gruppo di disponibilità dall'istanza del server.Returns a row for every automatic page-repair attempt on any availability database on an availability replica that is hosted for any availability group by the server instance.

  • Mirroring del database:Database mirroring:

    sys.dm_db_mirroring_auto_page_repair (Transact-SQL)sys.dm_db_mirroring_auto_page_repair (Transact-SQL)

    Viene restituita una riga per ogni tentativo di correzione automatica della pagina in qualsiasi database con mirroring nell'istanza del server.Returns a row for every automatic page-repair attempt on any mirrored database on the server instance.

Vedere ancheSee Also

Gestione della tabella suspect_pages (SQL Server) Manage the suspect_pages Table (SQL Server)
Panoramica di Gruppi di disponibilità AlwaysOn (SQL Server) Overview of Always On Availability Groups (SQL Server)
Mirroring del database (SQL Server)Database Mirroring (SQL Server)