Esempio: Ripristino a fasi di un database (modello di recupero con registrazione completa)

Con una sequenza di ripristino a fasi, il database viene ripristinato e recuperato in varie fasi a livello di filegroup, partendo dal filegroup primario e da tutti i filegroup secondari in lettura/scrittura.

In questo esempio il database adb viene ripristinato in un nuovo computer dopo un'emergenza. Il database utilizza il modello di recupero con registrazione completa. Pertanto, prima dell'inizio del ripristino è necessario eseguire un backup della parte finale del log per il database. Prima dell'emergenza, tutti i filegroup sono in linea. Il filegroup B è di sola lettura. Tutti i filegroup secondari devono essere ripristinati, ma il ripristino avviene in ordine di importanza: A (importanza massima), C e infine B. In questo esempio sono presenti quattro backup dei log, incluso il backup della parte finale del log.

Backup della parte finale del log

Prima di ripristinare il database, è necessario che l'amministratore del database esegua il backup della parte finale del log. Dato che il database è danneggiato, la creazione di tale backup richiede l'utilizzo dell'opzione NO_TRUNCATE:

BACKUP LOG adb TO tailLogBackup WITH NORECOVERY, NO_TRUNCATE

Il backup della parte finale del log è l'ultimo backup applicato nelle sequenze di ripristino seguenti.

Sequenze di ripristino

  1. Ripristino parziale del filegroup primario e secondario A.

    RESTORE DATABASE adb FILEGROUP='Primary' FROM backup1 
       WITH PARTIAL, NORECOVERY
    RESTORE DATABASE adb FILEGROUP='A' FROM backup2 
       WITH NORECOVERY
    RESTORE LOG adb FROM backup3 WITH NORECOVERY
    RESTORE LOG adb FROM backup4 WITH NORECOVERY
    RESTORE LOG adb FROM backup5 WITH NORECOVERY
    RESTORE LOG adb FROM tailLogBackup WITH RECOVERY
    
  2. Ripristino in linea del filegroup C.

    A questo punto sono in linea il filegroup primario e il filegroup secondario A. Il recupero di tutti i file nei filegroup B e C è in sospeso e i filegroup non sono in linea.

    I messaggi relativi all'ultima istruzione RESTORE LOG nel passaggio 1 indicano che il rollback delle transazioni che interessano il filegroup C è stato posticipato, poiché tale filegroup non è disponibile. È possibile continuare a eseguire le normali operazioni, ma sono attivi blocchi da parte di queste transazioni e non sarà possibile eseguire il troncamento del log fino al completamento del rollback.

    Nella seconda sequenza di ripristino l'amministratore del database ripristina il filegroup C:

    RESTORE DATABASE adb FILEGROUP='C' FROM backup2a WITH NORECOVERY
    RESTORE LOG adb FROM backup3 WITH NORECOVERY
    RESTORE LOG adb FROM backup4 WITH NORECOVERY
    RESTORE LOG adb FROM backup5 WITH NORECOVERY
    RESTORE LOG adb FROM tailLogBackup WITH RECOVERY
    

    A questo punto sono in linea il filegroup primario e i filegroup A e C. Il recupero dei file nel filegroup B resta in sospeso, con il filegroup non in linea. Le transazioni posticipate sono state risolte e si procede al troncamento del log.

  3. Ripristino in linea del filegroup B.

    Nella terza sequenza di ripristino l'amministratore del database ripristina il filegroup B. Il backup del filegroup B è stato eseguito dopo la sua conversione in filegroup di sola lettura. Non è pertanto necessario eseguire il rollforward del filegroup durante il recupero.

    RESTORE DATABASE adb FILEGROUP='B' FROM backup2b WITH RECOVERY
    

    In questa fase tutti i filegroup sono in linea.