Rilevazione e correzione degli errori relativi ai supporti durante il backup e il ripristino

SQL Server 2005 Microsoft e versioni successive forniscono un'opzione che permette di recuperare un database nonostante siano stati rilevati errori. Un importante e nuovo meccanismo di rilevazione degli errori prevede l'utilizzo facoltativo di un checksum del backup, creato durante un'operazione di backup e convalidato durante un'operazione di ripristino. È quindi possibile controllare se un'operazione verifica la presenza di errori e se ne deve essere o meno interrotta l'esecuzione quando viene rilevato un errore. Se un backup contiene un checksum, le istruzioni RESTORE e RESTORE VERIFYONLY verificano la presenza di errori.

[!NOTA]

I backup con mirroring consentono di disporre di un massimo di quattro copie (mirror) di set di supporti, offrendo copie alternative per il recupero in caso di errori che dipendono da supporti danneggiati. Per ulteriori informazioni, vedere Utilizzo di set di supporti di backup con mirroring.

Checksum durante l'esecuzione di BACKUP

In SQL Server sono supportati tre tipi di checksum: della pagine, dei blocchi dei log e del backup. Durante la generazione di un checksum del backup, l'istruzione BACKUP verifica che i dati letti dal database siano consistenti con l'eventuale indicazione di checksum o di pagina incompleta presente nel database.

L'istruzione BACKUP consente di eseguire il calcolo facoltativo di un checksum del backup nel flusso del backup stesso. Se in una pagina specifica sono presenti informazioni relative al checksum della pagina o a una pagina incompleta, durante il backup della pagina verrà inoltre verificato lo stato del checksum e della pagina incompleta, nonché l'ID della pagina. Non verranno aggiunti checksum alle pagine durante la creazione di un checksum del backup. Il backup delle pagine viene eseguito solo se queste esistono nel database e non implica la modifica delle pagine stesse. Le procedure di verifica e creazione dei checksum del backup comportano un certo overhead, pertanto l'utilizzo di questo tipo di checksum può influire negativamente sulle prestazioni, interessando sia il carico di lavoro che la velocità effettiva del backup. I checksum del backup sono pertanto facoltativi. Quando si decide di generare checksum durante un backup, eseguire un attento monitoraggio dell'overhead della CPU nonché dell'impatto di eventuali carichi di lavoro eseguiti simultaneamente nel sistema.

[!NOTA]

L'istruzione BACKUP non modifica mai la pagina di origine sul disco né il contenuto di una pagina.

Di seguito sono riportate le opzioni dell'istruzione BACKUP che consentono di controllare il funzionamento del checksum del backup:

  • CHECKSUM

    Richiede la verifica della presenza di checksum e pagine incomplete, se attivate e disponibili, nelle singole pagine durante l'operazione di backup, nonché la generazione di un checksum per l'intero backup.

    Se la verifica del checksum viene richiesta durante un'operazione di backup:

    • Prima di scrivere una pagina sui supporti di backup, l'istruzione BACKUP verifica le eventuali informazioni esistenti a livello di pagina, ovvero esegue il rilevamento dei checksum della pagina o delle pagine incomplete. Se tali informazioni non sono presenti, la pagina non è verificabile e viene inclusa nello stato in cui si trova, mentre il relativo contenuto viene aggiunto al checksum complessivo del backup.

      [!NOTA]

      Per ulteriori informazioni sui checksum delle pagine e sul rilevamento delle pagine incomplete, vedere l'opzione PAGE_VERIFY dell'istruzione ALTER DATABASE. Per ulteriori informazioni, vedere ALTER DATABASE (Transact-SQL).

    • Per l'utilizzo facoltativo in fase di ripristino, durante il backup viene generato un checksum di backup separato (un checksum di backup) e questo viene registrato sul supporto di backup, indipendentemente dalla presenza delle pagine.

    • Il set di backup viene contrassegnato come contenente checksum di backup (nella colonna has_backup_checksums di msdb..backupset). Per ulteriori informazioni, vedere backupset (Transact-SQL).

    [!NOTA]

    Nel caso dei backup dei log i checksum dei backup vengono generati e verificati.

  • NO_CHECKSUM

    Disattiva in modo esplicito la convalida delle pagine e la generazione dei checksum dei backup. Ciò corrisponde al funzionamento predefinito.

Controllo della risposta in caso di errore

Se è stata specificata l'opzione CHECKSUM e viene rilevato un errore di pagina durante la verifica, l'istruzione BACKUP ha esito negativo. Di seguito sono riportate le opzioni dell'istruzione BACKUP che consentono di controllare questo funzionamento:

  • CONTINUE_AFTER_ERROR

    Imposta BACKUP per il proseguimento delle operazioni nonostante la presenza di un checksum non valido. In questo caso, l'istruzione BACKUP:

    Contrassegna il set di backup sul supporto in modo da indicare che contiene errori e tiene traccia della pagina nella tabella suspect_pages del database msdb. Per ulteriori informazioni, vedere suspect_pages (Transact-SQL).

    • Registra l'errore nel log degli errori di SQL Server.

    • Contrassegna il set di backup in modo da indicare che contiene questo tipo di errore nella colonna is_damaged di msdb.backupset. Per ulteriori informazioni, vedere backupset (Transact-SQL).

    • Visualizza un messaggio per indicare che il backup è stato generato correttamente, ma contiene errori di pagina.

  • STOP_ON_ERROR

    Imposta l'interruzione dell'operazione BACKUP in presenza di errori di checksum. Ciò corrisponde al funzionamento predefinito.

Checksum durante l'esecuzione di RESTORE e RESTORE VERIFYONLY

Se sul supporto di backup sono presenti checksum del backup, per impostazione predefinita le operazioni RESTORE e RESTORE VERIFYONLY verificheranno solo i checksum dei backup e delle pagine. In assenza di un checksum del backup, l'operazione di backup proseguirà senza verifica in quanto se non è disponibile un checksum del backup l'operazione di ripristino non è in grado di verificare in modo affidabile i checksum delle pagine.

Le due opzioni CHECKSUM e NO_CHECKSUM consentono di modificare la gestione delle verifiche dei checksum in RESTORE e RESTORE VERIFYONLY come descritto di seguito:

  • CHECKSUM

    Se si richiede in modo esplicito l'opzione CHECKSUM per un'operazione di ripristino e il backup contiene checksum del backup, verranno verificati sia i checksum del backup che quelli delle pagine, come nel caso predefinito. Se tuttavia per il set di backup non sono disponibili checksum del backup, l'operazione di ripristino verrà interrotta con un messaggio in cui si indica che i checksum non sono presenti.

  • NO_CHECKSUM

    Disattiva in modo esplicito la convalida predefinita dei valori di checksum durante l'operazione di ripristino.

Controllo della risposta in caso di errore

Per specificare il comportamento di un'operazione di ripristino in caso di errore, utilizzare le opzioni di RESTORE e RESTORE VERIFYONLY descritte di seguito:

  • CONTINUE_AFTER_ERROR

    Specifica che l'operazione di ripristino deve continuare dopo il rilevamento di un errore. Si tratta del funzionamento predefinito per RESTORE VERIFYONLY, che consente di segnalare errori di convalida e proseguire, restituendo il maggior numero di informazioni possibile sul set di backup. L'opzione CONTINUE_AFTER_ERROR indica a RESTORE di proseguire per quanto possibile, ignorando tra l'altro i checksum non validi.

  • STOP_ON_ERROR

    Specifica che l'operazione di ripristino verrà interrotta e avrà esito negativo dopo il rilevamento del primo errore. Ciò corrisponde al funzionamento predefinito di RESTORE.