Ripristino di un database di SQL Server fino a un punto specifico all'interno di un backup (modello di recupero con registrazione completa)Restore a SQL Server Database to a Point in Time (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

In questo argomento viene descritto il ripristino temporizzato di un database SQL Server 2017SQL Server 2017 mediante l'utilizzo di SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.This topic describes how to restore a database to a point in time in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. Le informazioni contenute in questo argomento sono rilevanti solo per i database SQL ServerSQL Server in cui viene utilizzato il modello di recupero con registrazione completa o con registrazione minima delle operazioni bulk.This topic is relevant only for SQL ServerSQL Server databases that use the full or bulk-logged recovery models.

Importante

Nel modello di recupero con registrazione minima delle operazioni bulk se un backup del log contiene modifiche con registrazione minima delle operazioni bulk, il recupero temporizzato non è possibile rispetto a un punto all'interno di tale backup.Under the bulk-logged recovery model, if a log backup contains bulk-logged changes, point-in-time recovery is not possible to a point within that backup. È necessario recuperare il database fino alla fine del backup del log delle transazioni.The database must be recovered to the end of the transaction log backup.

Prima di iniziare Before You Begin

Indicazioni Recommendations

  • Utilizzo dell'opzione STANDBY per la ricerca di un punto sconosciuto nel tempoUse STANDBY to find unknown point in time.

  • Impostazione del punto nel tempo all'inizio di una sequenza di ripristinoSpecify the point in time early in a restore sequence

Sicurezza Security

Autorizzazioni Permissions

Se il database da ripristinare non esiste, per eseguire un'operazione RESTORE l'utente deve disporre delle autorizzazioni CREATE DATABASE.If the database being restored does not exist, the user must have CREATE DATABASE permissions to be able to execute RESTORE. Se il database esiste, le autorizzazioni per l'istruzione RESTORE vengono assegnate per impostazione predefinita ai membri dei ruoli predefiniti del server sysadmin e dbcreator e al proprietario (dbo) del database. Per l'opzione FROM DATABASE_SNAPSHOT, il database esiste sempre.If the database exists, RESTORE permissions default to members of the sysadmin and dbcreator fixed server roles and the owner (dbo) of the database (for the FROM DATABASE_SNAPSHOT option, the database always exists).

Le autorizzazioni per l'istruzione RESTORE vengono assegnate ai ruoli in cui le informazioni sull'appartenenza sono sempre disponibili per il server.RESTORE permissions are given to roles in which membership information is always readily available to the server. L'appartenenza ai ruoli predefiniti del database può essere controllata solo quando il database è accessibile e non è danneggiato, condizioni che non risultano sempre vere quando si esegue un'operazione RESTORE, quindi i membri del ruolo predefinito del database db_owner non hanno le autorizzazioni per l'istruzione RESTORE.Because fixed database role membership can be checked only when the database is accessible and undamaged, which is not always the case when RESTORE is executed, members of the db_owner fixed database role do not have RESTORE permissions.

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

Per ripristinare un database fino a un punto nel tempoTo restore a database to a point in time

  1. Stabilire una connessione all'istanza appropriata di Motore di database di SQL ServerSQL Server Database Engine, quindi espandere l'albero di server in Esplora oggetti.In Object Explorer, connect to the appropriate instance of the Motore di database di SQL ServerSQL Server Database Engine, and expand the server tree.

  2. Espandere Database.Expand Databases. A seconda del database, selezionare un database utente oppure espandere Database di sistemae selezionare un database di sistema.Depending on the database, either select a user database or expand System Databases, and then select a system database.

  3. Fare clic con il pulsante destro del mouse sul database, scegliere Attività, selezionare Ripristina, quindi fare clic su Database.Right-click the database, point to Tasks, point to Restore, and then click Database.

  4. Per specificare l'origine e il percorso dei set di backup da ripristinare, nella pagina Generale , utilizzare la sezione Origine .On the General page, use the Source section to specify the source and location of the backup sets to restore. Selezionare una delle opzioni seguenti:Select one of the following options:

    • DatabaseDatabase

      Selezionare il database da ripristinare dall'elenco a discesa.Select the database to restore from the drop-down list. Nell'elenco sono inclusi solo i database di cui è stato eseguito il backup in base alla cronologia dei backup di msdb .The list contains only databases that have been backed up according to the msdb backup history.

    Nota

    Se il backup viene eseguito da un server diverso, il server di destinazione non disporrà delle informazioni della cronologia di backup per il database specificato.If the backup is taken from a different server, the destination server will not have the backup history information for the specified database. In questo caso, selezionare Dispositivo per specificare manualmente il file o il dispositivo da ripristinare.In this case, select Device to manually specify the file or device to restore.

    • DispositivoDevice

      Fare clic sul pulsante Sfoglia (...) per aprire la finestra di dialogo Seleziona dispositivi di backup .Click the browse (...) button to open the Select backup devices dialog box. Nella casella Tipi di supporti di backup selezionare uno dei tipi di dispositivi elencati.In the Backup media type box, select one of the listed device types. Per selezionare uno o più dispositivi per la casella Supporti di backup , fare clic su Aggiungi.To select one or more devices for the Backup media box, click Add.

      Dopo avere aggiunto i dispositivi desiderati nella casella di riepilogo Dispositivi di backup , fare clic su OK per tornare alla pagina Generale .After you add the devices you want to the Backup media list box, click OK to return to the General page.

      Nella casella di riepilogo Origine: Dispositivo: Database selezionare il nome del database da ripristinare.In the Source: Device: Database list box, select the name of the database which should be restored.

      Nota Questo elenco è disponibile solo se si seleziona Dispositivo .Note This list is only available when Device is selected. Saranno disponibili solo i database che dispongono di backup sul dispositivo selezionato.Only databases that have backups on the selected device will be available.

  5. Nella sezione Destinazione , la casella Database viene popolata automaticamente con il nome del database da ripristinare.In the Destination section, the Database box is automatically populated with the name of the database to be restored. Per modificare il nome del database, immettere il nome nuovo nella casella Database .To change the name of the database, enter the new name in the Database box.

  6. Fare clic su Sequenza temporale per accedere alla finestra di dialogo Sequenza temporale backup .Click Timeline to access the Backup Timeline dialog box.

  7. Nella sezione Ripristina fino a fare clic su Data e ora specifiche.In the Restore to section, click Specific date and time.

  8. Utilizzare le caselle Data e Ora o la barra del dispositivo di scorrimento per specificare una data e ora specifiche per l'arresto del ripristino.Use either the Date and Time boxes or the slider bar to specify a specific date and time to where the restore should stop. Fare clic su OK.Click OK.

    Nota

    Usare la casella Intervallo sequenza temporale per modificare la quantità di tempo visualizzata nella sequenza temporale.Use the Timeline Interval box to change the amount of time displayed on the timeline.

  9. Dopo aver specificato una determinata temporizzazione, tramite Database Recovery Advisor viene assicurato che nella colonna Ripristina della griglia Set di backup da ripristinare vengano selezionati solo i backup necessari per il ripristino fino a quella temporizzazione.After you have specified a specific point in time, the Database Recovery Advisor ensures that only backups that are required for restoring to that point in time are selected in the Restore column of the Backup sets to restore grid. Questi backup selezionati costituiscono il piano di ripristino consigliato per il ripristino temporizzato.These selected backups make up the recommended restore plan for your point-in-time restore. Per l'operazione di ripristino temporizzato è consigliabile utilizzare solo i backup selezionati.You should use only the selected backups for your point-in-time restore operation.

    Per informazioni sulle colonne nella griglia Set di backup da ripristinare, vedere Ripristina database((pagina Generale)).For information about the columns in the Backup sets to restore grid, see Restore Database (General Page). Per informazioni su Database Recovery Advisor, vedere Panoramica del ripristino e del recupero (SQL Server).For information about the Database Recovery Advisor, see Restore and Recovery Overview (SQL Server).

  10. Nella pagina Opzioni del pannello Opzioni di ripristino è possibile selezionare una qualsiasi delle opzioni seguenti, in base alla situazione:On the Options page, in the Restore options panel, you can select any of the following options, if appropriate for your situation:

    • Sovrascrivi il database esistente (WITH REPLACE)Overwrite the existing database (WITH REPLACE)

    • Mantieni le impostazioni di replica (WITH KEEP_REPLICATION)Preserve the replication settings (WITH KEEP_REPLICATION)

    • Limita accesso al database ripristinato (WITH RESTRICTED_USER)Restrict access to the restored database (WITH RESTRICTED_USER)

      Per altre informazioni su queste opzioni, vedere Ripristina database ((pagina Opzioni)).For more information about these options, see Restore Database (Options Page).

  11. Selezionare un'opzione per la casella Stato di recupero .Select an option for the Recovery state box. Questa casella determina lo stato del database al termine dell'operazione di ripristino.This box determines the state of the database after the restore operation.

    • RESTORE WITH RECOVERY è il comportamento predefinito che lascia il database pronto per l'utilizzo mediante il rollback delle transazioni di cui non è stato eseguito il commit.RESTORE WITH RECOVERY is the default behavior which leaves the database ready for use by rolling back the uncommitted transactions. I log delle transazioni aggiuntivi non possono essere ripristinati.Additional transaction logs cannot be restored. Selezionare questa opzione se si desidera ripristinare subito tutti i backup necessari.Select this option if you are restoring all of the necessary backups now.

    • RESTORE WITH NORECOVERY lascia il database non operativo e non esegue il rollback delle transazioni di cui non è stato eseguito il commit.RESTORE WITH NORECOVERY which leaves the database non-operational, and does not roll back the uncommitted transactions. I log delle transazioni aggiuntivi possono essere ripristinati.Additional transaction logs can be restored. Non è possibile utilizzare il database fino al completamento del recupero.The database cannot be used until it is recovered.

    • RESTORE WITH STANDBY lascia il database in modalità di sola lettura.RESTORE WITH STANDBY which leaves the database in read-only mode. Annulla le transazioni di cui non è stato eseguito il commit, ma salva le azioni di rollback in un file standby in modo che gli effetti del recupero possano essere annullati.It undoes uncommitted transactions, but saves the undo actions in a standby file so that recovery effects can be reverted.

      Per una descrizione delle opzioni, vedere Ripristina database (pagina Opzioni).For descriptions of the options, see Restore Database (Options Page).

  12. Esegui il backup della parte finale del log prima del ripristino verrà selezionato se necessario per il punto nel tempo selezionato.Take tail-log backup before restore will be selected if it is necessary for the point in time that you have selected. Non è necessario modificare questa impostazione, ma è possibile scegliere di eseguire il backup della parte finale del log, anche se non è richiesto.You do not need to modify this setting, but you can choose to backup the tail of the log even if it is not required.

  13. Le operazioni di ripristino potrebbero non riuscire in presenza di connessioni attive al database.Restore operations may fail if there are active connections to the database. Selezionare l'opzione Chiudi connessioni esistenti per garantire che tutte le connessioni attive tra Management StudioManagement Studio e il database vengano chiuse.Check the Close existing connections option to ensure that all active connections between Management StudioManagement Studio and the database are closed. Questa casella di controllo imposta il database sulla modalità utente singolo prima di effettuare qualsiasi operazione di ripristino e imposta il database sulla modalità multiutente al termine.This check box sets the database to single user mode before performing the restore operations, and sets the database to multi-user mode when complete.

  14. Selezionare Chiedi conferma prima del ripristino di ogni backup se si desidera ricevere una richiesta di conferma prima di ciascuna operazione di ripristino.Select Prompt before restoring each backup if you wish to be prompted between each restore operation. L'operazione non è normalmente necessaria, a meno che le dimensioni del database siano elevate e si desideri monitorare lo stato dell'operazione di ripristino.This is not usually necessary unless the database is large and you wish to monitor the status of the restore operation.

Utilizzo di Transact-SQL Using Transact-SQL

Before you beginBefore you begin

Un momento specifico viene sempre ripristinato da un backup del log.A specified time is always restored from a log backup. In ogni istruzione RESTORE LOG della sequenza di ripristino, è necessario specificare l'ora o la transazione di destinazione in una clausola STOPAT identica.In every RESTORE LOG statement of the restore sequence, you must specify your target time or transaction in an identical STOPAT clause. Come prerequisito per un ripristino temporizzato, è necessario innanzitutto ripristinare un backup completo del database il cui endpoint sia precedente rispetto al momento di ripristino di destinazione.As a prerequisite to a point-in-time restore, you must first restore a full database backup whose end point is earlier than your target restore time. Il backup completo del database può essere precedente rispetto al backup completo del database più recente purché vengano ripristinati tutti i backup del log successivi, fino al backup del log contenente la data e ora specifica di destinazione compreso.That full database backup can be older than the most recent full database backup as long as you then restore every subsequent log backup, up to and including the log backup that contains your target point in time.

Per consentire l'identificazione del backup del database da ripristinare, è possibile specificare la clausola WITH STOPAT nell'istruzione RESTORE DATABASE per generare un errore se un backup dei dati è troppo recente rispetto alla data e ora specifica di destinazione.To help you identify which database backup to restore, you can optionally specify your WITH STOPAT clause in your RESTORE DATABASE statement to raise an error if a data backup is too recent for the specified target time. Il backup completo dei dati viene sempre ripristinato, anche se contiene la data e ora specifica di destinazione.The complete data backup is always restored, even if it contains the target time.

Sintassi Transact-SQLTransact-SQL di baseBasic Transact-SQLTransact-SQL syntax

RESTORE LOG database_name FROM WITH STOPAT =time, RECOVERY…RESTORE LOG database_name FROM WITH STOPAT =time, RECOVERY…

Il punto di recupero è l'ultimo commit delle transazioni eseguito in corrispondenza o prima del valore datetime specificato da time.The recovery point is the latest transaction commit that occurred at or before the datetime value that is specified by time.

Per ripristinare solo le modifiche apportate prima di un punto nel tempo specifico, specificare WITH STOPAT = time per ogni backup da ripristinare.To restore only the modifications that were made before a specific point in time, specify WITH STOPAT = time for each backup you restore. Questo garantisce che il momento nel tempo desiderato non venga superato.This makes sure that you do not go past the target time.

Per ripristinare un database fino a un punto nel tempoTo restore a database to a point in time

Nota

Per un esempio di questa procedura, vedere Esempio (Transact-SQL)più avanti in questa sezione.For an example of this procedure, see Example (Transact-SQL), later in this section.

  1. Connettersi all'istanza del server in cui si desidera ripristinare il database.Connect to server instance on which you want to restore the database.

  2. Eseguire l'istruzione RESTORE DATABASE utilizzando l'opzione NORECOVERY.Execute the RESTORE DATABASE statement using the NORECOVERY option.

    Nota

    Se una sequenza di ripristino parziale esclude qualsiasi filegroup FILESTREAM , il ripristino temporizzato non è supportato.If a partial restore sequence excludes any FILESTREAM filegroup, point-in-time restore is not supported. È possibile forzare la continuazione della sequenza di ripristino.You can force the restore sequence to continue. Tuttavia i filegroup FILESTREAM omessi dall'istruzione RESTORE non potranno mai più essere ripristinati.However the FILESTREAM filegroups that are omitted from your RESTORE statement can never be restored. Per forzare un ripristino temporizzato, specificare l'opzione CONTINUE_AFTER_ERROR insieme all'opzione STOPAT, STOPATMARK o STOPBEFOREMARK che è necessario specificare anche nelle istruzioni RESTORE LOG successive.To force a point-in-time restore, specify the CONTINUE_AFTER_ERROR option together with the STOPAT, STOPATMARK, or STOPBEFOREMARK option, which you must also specify in your subsequent RESTORE LOG statements. Se si specifica CONTINUE_AFTER_ERROR, la sequenza di ripristino parziale ha esito positivo e il filegroup FILESTREAM non può più essere recuperato.If you specify CONTINUE_AFTER_ERROR, the partial restore sequence succeeds and the FILESTREAM filegroup becomes unrecoverable.

  3. Ripristinare l'ultimo backup del database differenziale, se presente, senza recuperare il database (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).Restore the last differential database backup, if any, without recovering the database (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).

  4. Applicare ogni backup del log delle transazioni nella stessa sequenza di creazione, specificando l'ora in cui si intende arrestare il ripristino del log (RESTORE DATABASE database_name FROM WITH STOPAT=time, RECOVERY).Apply each transaction log backup in the same sequence in which they were created, specifying the time at which you intend to stop restoring log (RESTORE DATABASE database_name FROM WITH STOPAT=time, RECOVERY).

    Nota

    Le opzioni RECOVERY e STOPAT.The RECOVERY and STOPAT options. Se il backup del log delle transazioni non contiene i dati corrispondenti all'ora richiesta, ad esempio se l'ora specificata è successiva al periodo di tempo gestito dal log delle transazioni, viene generato un messaggio di avviso e il database non viene recuperato.If the transaction log backup does not contain the requested time (for example, if the time specified is beyond the end of the time covered by the transaction log), a warning is generated and the database remains unrecovered.

Esempio (Transact-SQL) Example (Transact-SQL)

Nell'esempio seguente viene ripristinato lo stato del database corrispondente alle ore 12:00 AM del giorno April 15, 2020 e viene illustrata un'operazione di ripristino di più backup del log.The following example restores a database to its state as of 12:00 AM on April 15, 2020 and shows a restore operation that involves multiple log backups. Nel dispositivo di backup, AdventureWorksBackups, il backup completo del database da ripristinare è il terzo set di backup (FILE = 3), il primo backup del log è il quarto set di backup (FILE = 4) e il secondo backup del log è il quinto set di backup (FILE = 5).On the backup device, AdventureWorksBackups, the full database backup to be restored is the third backup set on the device (FILE = 3), the first log backup is the fourth backup set (FILE = 4), and the second log backup is the fifth backup set (FILE = 5).

Importante

Il database AdventureWorks2012AdventureWorks2012 utilizza il modello di recupero con registrazione minima.The AdventureWorks2012AdventureWorks2012 database uses the simple recovery model. Per consentire i backup del log, prima di eseguire un backup completo del database, il database viene impostato per l'utilizzo del modello di recupero con registrazione completa tramite ALTER DATABASE AdventureWorks SET RECOVERY FULL.To permit log backups, before taking a full database backup, the database was set to use the full recovery model, using ALTER DATABASE AdventureWorks SET RECOVERY FULL.

RESTORE DATABASE AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=3, NORECOVERY;  

RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  

RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  
RESTORE DATABASE AdventureWorks WITH RECOVERY;   
GO  

Vedere ancheSee Also

backupset (Transact-SQL) backupset (Transact-SQL)
RESTORE (Transact-SQL) RESTORE (Transact-SQL)
RESTORE HEADERONLY (Transact-SQL) RESTORE HEADERONLY (Transact-SQL)