Ripristini di database completi (modello di recupero con registrazione completa)Complete Database Restores (Full Recovery Model)

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2016)noDatabase SQL di AzurenoAzure SQL Data WarehousenoParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

L'obiettivo di un ripristino completo del database è il ripristino dell'intero database.In a complete database restore, the goal is to restore the whole database. L'intero database è offline per la tutta la durata del ripristino.The whole database is offline for the duration of the restore. Prima che sia possibile portare online una o più parti del database, tutti i dati vengono recuperati fino a un punto coerente in cui tutte le parti del database sono aggiornate allo stesso punto nel tempo e non sono presenti transazioni di cui non è stato eseguito il commit.Before any part of the database can come online, all data is recovered to a consistent point in which all parts of the database are at the same point in time and no uncommitted transactions exist.

Dopo aver ripristinato uno o più backup dei dati, è necessario ripristinare tutti i backup del log delle transazioni successivi nel modello di recupero con registrazione completa, quindi recuperare il database.Under the full recovery model, after you restore your data backup or backups, you must restore all subsequent transaction log backups and then recover the database. È possibile ripristinare un database in un punto di recupero specifico all'interno di uno di questi backup del log.You can restore a database to a specific recovery point within one of these log backups. Tale punto di recupero può corrispondere a una data e un'ora specifiche, a una transazione contrassegnata o a un numero di sequenza del file di log (LSN).The recovery point can be a specific date and time, a marked transaction, or a log sequence number (LSN).

Durante il ripristino di un database, in particolare nel modello di recupero con registrazione completa o in quello con registrazione minima delle operazioni bulk, si consiglia di utilizzare una sola sequenza di ripristino.When restoring a database, particularly under the full recovery model or bulk-logged recovery model, you should use a single restore sequence. Una sequenza di ripristino è costituita da una o più operazioni di ripristino che gestiscono lo spostamento dei dati attraverso una o più fasi del ripristino.A restore sequence consists of one or more restore operations that move data through one or more of the phases of restore.

Importante

È consigliabile evitare di collegare o ripristinare database provenienti da origini sconosciute o non attendibili.We recommend that you do not attach or restore databases from unknown or untrusted sources. Questi database potrebbero contenere malware che può eseguire codice Transact-SQLTransact-SQL indesiderato o causare errori modificando lo schema o la struttura fisica di database.These databases could contain malicious code that might execute unintended Transact-SQLTransact-SQL code or cause errors by modifying the schema or the physical database structure. Prima di usare un database da un'origine sconosciuta o non attendibile, eseguire DBCC CHECKDB sul database in un server non di produzione ed esaminare anche il codice contenuto nel database, ad esempio le stored procedure o altro codice definito dall'utente.Before you use a database from an unknown or untrusted source, run DBCC CHECKDB on the database on a nonproduction server and also examine the code, such as stored procedures or other user-defined code, in the database.

Contenuto dell'argomentoIn this Topic:

Nota

Per informazioni sul supporto dei backup di versioni precedenti di SQL ServerSQL Server, vedere la sezione "Supporto della compatibilità" di RESTORE (Transact-SQL).For information about support for backups from earlier versions of SQL ServerSQL Server, see the "Compatibility Support" section of RESTORE (Transact-SQL).

Ripristino di un database fino al momento dell'errore Restoring a Database to the Point of Failure

Il recupero dello stato di un database fino al momento dell'errore in genere include i passaggi seguenti:Typically, recovering a database to the point of failure involves the following basic steps:

  1. Eseguire il backup del log delle transazioni attive (noto anche come parte finale del log).Back up the active transaction log (known as the tail of the log). In questo modo viene creato un backup della parte finale del log.This creates a tail-log backup. Se il log delle transazioni attivo non è disponibile, tutte le transazioni in quella parte del log vengono perdute.If the active transaction log is unavailable, all transactions in that part of the log are lost.

    Importante

    Nel modello di recupero con registrazione minima delle operazioni bulk, per eseguire il backup di un log che contiene operazioni bulk registrate è necessario disporre dell'accesso a tutti i file di dati del database.Under the bulk-logged recovery model, backing up any log that contains bulk-logged operations requires access to all data files in the database. Se i file di dati non sono accessibili, non è possibile eseguire il backup del log delle transazioni.If the data files cannot be accessed, the transaction log cannot be backed up. In questo caso, è necessario ripetere manualmente tutte le modifiche apportate a partire dall'ultimo backup del log.In that case, you have to manually redo all changes that were made since the most recent log backup.

    Per altre informazioni, vedere Backup della parte finale del log (SQL Server).For more information, see Tail-Log Backups (SQL Server).

  2. Ripristinare il backup completo del database più recente senza recuperare il database (RESTORE DATABASE _database FROM _backup WITH NORECOVERY).Restore the most recent full database backup without recovering the database (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).

  3. Se sono presenti backup differenziali, ripristinare il più recente senza recuperare il database (RESTORE DATABASE nome_database FROM dispositivo_backup_differenziale WITH NORECOVERY).If differential backups exist, restore the most recent one without recovering the database (RESTORE DATABASE database_name FROM differential_backup_device WITH NORECOVERY).

    In questo modo viene ridotto il numero di backup del log da ripristinare.Restoring the most recent differential backup reduces the number of log backups that must be restored.

  4. Ripristinare i log in sequenza con NORECOVERY a partire dal primo backup del log delle transazioni creato dopo il backup appena ripristinato.Starting with the first transaction log backup that was created after the backup you just restored, restore the logs in sequence with NORECOVERY.

  5. Recuperare il database (RESTORE DATABASE nome_database WITH RECOVERY).Recover the database (RESTORE DATABASE database_name WITH RECOVERY). In alternativa, è possibile eseguire questo passaggio insieme al ripristino dell'ultimo backup del log.Alternatively, this step can be combined with restoring the last log backup.

    Nella figura seguente è illustrata tale sequenza di ripristino.The following illustration shows this restore sequence. Dopo il verificarsi di un errore (1) viene creato un backup della parte finale del log (2).After a failure occurs (1), a tail-log backup is created (2). Successivamente, il database viene ripristinato fino al momento dell'errore.Next, the database is restored to the point of the failure. L'operazione comporta il ripristino di un backup del database, di un successivo backup differenziale e di tutti i backup del log eseguiti dopo il backup differenziale, incluso il backup della parte finale del log.This involves restoring a database backup, a subsequent differential backup, and every log backup taken after the differential backup, including the tail-log backup.

    Ripristino di database completo fino al momento in cui si è verificato un erroreComplete database restore to the time of a failure

Nota

Se si ripristina un backup del database in un'istanza del server diversa, vedere Copiare database tramite backup e ripristino.When you restore a database backup onto a different server instance, see Copy Databases with Backup and Restore.

Sintassi Transact-SQL di base per RESTORE Basic Transact-SQL RESTORE Syntax

La sintassi di base RESTORE Transact-SQLTransact-SQL per la sequenza di ripristino nell'illustrazione precedente è la seguente:The basic RESTORE Transact-SQLTransact-SQL syntax for the restore sequence in the preceding illustration is as follows:

  1. RESTORE DATABASE database FROM full database backup WITH NORECOVERY;RESTORE DATABASE database FROM full database backup WITH NORECOVERY;

  2. RESTORE DATABASE database FROM backup_differenziale_completo WITH NORECOVERY;RESTORE DATABASE database FROM full_differential_backup WITH NORECOVERY;

  3. RESTORE LOG database FROM backup_log WITH NORECOVERY;RESTORE LOG database FROM log_backup WITH NORECOVERY;

    Ripetere questo passaggio di ripristino del log per ogni ulteriore backup del log.Repeat this restore-log step for each additional log backup.

  4. RESTORE DATABASE database WITH RECOVERY;RESTORE DATABASE database WITH RECOVERY;

Esempio: ripristino fino al momento dell'errore (Transact-SQL) Example: Recovering to the Point of Failure (Transact-SQL)

Nell'esempio Transact-SQLTransact-SQL seguente vengono illustrate le opzioni fondamentali di una sequenza di ripristino del database fino al momento dell'errore.The following Transact-SQLTransact-SQL example shows the essential options in a restore sequence that restores the database to the point of failure. Nell'esempio viene creato un backup della parte finale del log del database.The example creates a tail-log backup of the database. Vengono quindi ripristinati un backup completo del database e un backup del log, quindi il backup della parte finale del log.Next, the example restores a full database backup and log backup and then restores the tail-log backup. Il database viene infine recuperato in un passaggio finale separato.The example recovers the database in a separate, final step.

Nota

Questo esempio u un backup del database e un backup del log creati nella sezione "Backup del database nel modello di recupero con registrazione completa" di Backup completo del database (SQL Server).This example uses a database backup and log backup that is created in the "Using Database Backups Under the Full Recovery Model" section in Full Database Backups (SQL Server). Il database di esempio AdventureWorks2012AdventureWorks2012 è stato impostato per l'utilizzo del modello di recupero con registrazione completa prima del backup del database.Before the database backup, the AdventureWorks2012AdventureWorks2012 sample database was set to use the full recovery model.

USE master;  
--Create tail-log backup.  
BACKUP LOG AdventureWorks2012   
TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'    
   WITH NORECOVERY;   
GO  
--Restore the full database backup (from backup set 1).  
RESTORE DATABASE AdventureWorks2012   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=1,   
    NORECOVERY;  

--Restore the regular log backup (from backup set 2).  
RESTORE LOG AdventureWorks2012   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=2,   
    NORECOVERY;  

--Restore the tail-log backup (from backup set 3).  
RESTORE LOG AdventureWorks2012   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'  
  WITH FILE=3,   
    NORECOVERY;  
GO  
--recover the database:  
RESTORE DATABASE AdventureWorks2012 WITH RECOVERY;  
GO  

Ripristino di un database fino a un punto all'interno di un backup del log Restoring a Database to a Point Within a Log Backup

Nel modello di recupero con registrazione completa, un ripristino del database completo può essere generalmente recuperato in un punto nel tempo, in una transazione contrassegnata o in un LSN all'interno di un backup del log.Under the full recovery model, a complete database restore can usually be recovered to a point of time, a marked transaction, or an LSN within a log backup. Quando si utilizza il modello di recupero con registrazione minima delle operazioni bulk, se il backup del log contiene modifiche con registrazione minima delle operazioni bulk, il recupero temporizzato non è tuttavia possibile.However, under the bulk-logged recovery model, if the log backup contains bulk-logged changes, point-in-time recovery is not possible.

Scenari di ripristino temporizzato di esempioSample Point-in-Time Restore Scenarios

Nell'esempio seguente viene illustrato un sistema di database di importanza critica per le strategie aziendali per il quale è necessaria la creazione di un backup completo del database ogni notte a mezzanotte, di un backup differenziale del database ogni ora da lunedì a sabato e di backup del log delle transazioni ogni 10 minuti per tutto il giorno.The following example assumes a mission-critical database system for which a full database backup is created daily at midnight, a differential database backup is created on the hour, Monday through Saturday, and transaction log backups are created every 10 minutes throughout the day. Per ripristinare lo stato in cui si trovava il database alle 05.19To restore the database to the state is was in at 5:19 A.M. di mercoledì, eseguire le operazioni seguenti:Wednesday, do the following:

  1. Ripristinare il backup completo del database creato martedì a mezzanotte.Restore the full database backup that was created Tuesday at midnight.

  2. Ripristinare il backup differenziale del database creato alle 5:00Restore the differential database backup that was created at 5:00 A.M. di mercoledì.on Wednesday.

  3. Applicare il backup del log delle transazioni creato alle 5:10Apply the transaction log backup that was created at 5:10 A.M. di mercoledì.on Wednesday.

  4. Applicare il backup del log delle transazioni creato alle 05.20Apply the transaction log backup that was created 5:20 A.M. di mercoledì, specificando che il processo di recupero si applica solo alle transazioni avvenute prima delle 05.19.on Wednesday, specifying that the recovery process applies only to transactions that occurred before 5:19 A.M.

    In alternativa, se è necessario ripristinare lo stato del database alle 03.04Alternatively, if the database needs to be restored to its state at 3:04 A.M. di giovedì, ma il backup differenziale del database creato alle 03.00Thursday, but the differential database backup that was created at 3:00 A.M. di giovedì non è disponibile, eseguire le operazioni seguenti:Thursday is unavailable, do the following:

  5. Ripristinare il backup del database creato mercoledì a mezzanotte.Restore the database backup that was created Wednesday at midnight.

  6. Ripristinare il backup differenziale del database creato alle 02.00Restore the differential database backup that was created at 2:00 A.M. di giovedì.on Thursday.

  7. Applicare tutti i backup del log delle transazioni creati dalle 02.10Apply all the transaction log backups created from 2:10 A.M. alle 3:00to 3:00 A.M. di giovedì.on Thursday.

  8. Applicare il backup del log delle transazioni creato alle 03.10Apply the transaction log backup that was created at 3:10 A.M. di giovedì, arrestando il processo di recupero alle 3:04.on Thursday, stopping the recovery process at 3:04 A.M.

Per ripristinare un backup completo del databaseTo restore a full database backup

Vedere ancheSee Also

RESTORE (Transact-SQL) RESTORE (Transact-SQL)
BACKUP (Transact-SQL) BACKUP (Transact-SQL)
Applicare backup del log delle transazioni (SQL Server) Apply Transaction Log Backups (SQL Server)
sp_addumpdevice (Transact-SQL) sp_addumpdevice (Transact-SQL)
Backup completo del database (SQL Server) Full Database Backups (SQL Server)
Backup differenziali (SQL Server) Differential Backups (SQL Server)
Panoramica del backup (SQL Server) Backup Overview (SQL Server)
Panoramica del ripristino e del recupero (SQL Server)Restore and Recovery Overview (SQL Server)