Ripristinare un database a uno snapshot del databaseRevert a Database to a Database Snapshot

Se i dati in un database online sono danneggiati, in alcuni casi il ripristino del database a un snapshot del database precedente alla data del danno può essere un'alternativa appropriata per ripristinare il database da un backup.If data in an online database becomes damaged, in some cases, reverting the database to a database snapshot that predates the damage might be an appropriate alternative to restoring the database from a backup. Il ripristino di un database può, ad esempio, risultare utile per annullare un errore grave dell'utente verificatosi di recente, come l'eliminazione di una tabella.For example, reverting a database might be useful for reverse a recent serious user error, such as a dropped table. Tutte le modifiche apportate dopo la creazione dello snapshot verranno tuttavia perse.However, all changes made after the snapshot was created are lost.

Prima di iniziare Before You Begin

Limitazioni e restrizioni Limitations and Restrictions

Il ripristino da snapshot non è supportato nei casi seguenti:Reverting is unsupported under the following conditions:

  • Nel database deve essere attualmente disponibile un solo snapshot del database in base al quale si prevede di effettuare il ripristino.The database must currently have only one database snapshot, to which you plan to revert.

  • Nel database sono presenti filegroup di sola lettura o compressi.Any read-only or compressed filegroups exist in the database.

  • Alcuni file sono attualmente offline ma erano online al momento della creazione dello snapshot.Any files are now offline but were online when the snapshot was created.

    Prima di ripristinare un database, considerare le limitazioni seguenti:Before reverting a database, consider the following limitations:

  • Non è previsto il ripristino per il recupero di supporti.Reverting is not intended for media recovery. .. Un snapshot del database è una copia incompleta dei file di database, pertanto se il database o lo snapshot del database è danneggiato, è probabile che il ripristino da uno snapshot risulti impossibile.A database snapshot is an incomplete copy of the database files, so if either the database or the database snapshot is corrupted, reverting from a snapshot is likely to be impossible. Anche quando possibile, è inoltre improbabile che il ripristino in caso di danneggiamento consenta di risolvere il problema.Furthermore, even when it is possible, reverting in the event of corruption is unlikely to correct the problem. Per proteggere un database è pertanto essenziale eseguire backup regolari e testare il piano di ripristino.Therefore, taking regular backups and testing your restore plan are essential to protect a database. Per altre informazioni, vedere Back Up and Restore of SQL Server Databases.For more information, see Back Up and Restore of SQL Server Databases.

    Nota

    Se è necessario essere in grado di ripristinare il database di origine al punto nel tempo in cui è stato creato uno snapshot del database, utilizzare il modello di recupero completo e implementare criteri di backup che consentano di eseguire tale operazione.If you need to be able to restore the source database to the point in time at which you created a database snapshot, use the full recovery model and implement a backup policy that enables you to do that.

  • Il database di origine originale viene sovrascritto dal database ripristinato, pertanto qualsiasi aggiornamento apportato al database dalla creazione dello snapshot verrà perso.The original source database is overwritten by the reverted database, so any updates to the database since the snapshot's creation are lost.

  • Tramite l'operazione di ripristino viene inoltre sovrascritto il file di log precedente e viene ricompilato il log.The revert operation also overwrites the old log file and rebuilds the log. Di conseguenza, non è possibile eseguire il rollforward del database ripristinato al punto in cui si è verificato l'errore dell'utente.Consequently, you cannot roll the reverted database forward to the point of user error. Si consiglia pertanto di eseguire il backup del log prima di ripristinare un database.Therefore, we recommend that you back up the log before reverting a database.

    Nota

    Sebbene non sia possibile ripristinare il log originale per eseguire il rollforward del database, le informazioni del file di log originale saranno utili per ricostruire i dati persi.Although you cannot restore the original log to roll forward the database, the information in the original log file can be useful for reconstructing lost data.

  • Tramite il ripristino viene interrotta la catena di backup del log.Reverting breaks the log backup chain. Prima di eseguire backup del log del database ripristinato, è pertanto necessario eseguire un backup completo del database o il backup del file.Therefore, before you can take log backups of the reverted database, you must first take a full database backup or file backup. È consigliabile eseguire un backup completo del database.We recommend a full database backup.

  • Durante un'operazione di ripristino, sia lo snapshot che il database di origine non sono disponibili.During a revert operation, both the snapshot and the source database are unavailable. Entrambi sono contrassegnati come in fase di ripristino.The source database and snapshot are both marked "In restore." Se si verifica un errore durante l'operazione di ripristino, al nuovo avvio del database verrà eseguito un tentativo di completamento dell'operazione.If an error occurs during the revert operation, when the database starts up again, the revert operation will try to finish reverting.

  • I metadati di un database ripristinato corrispondono a quelli del database al momento dello snapshot.The metadata of a reverted database is the same as the metadata at the time of the snapshot.

  • Il ripristino causa l'eliminazione di tutti i cataloghi full-text.Reverting drops all the full-text catalogs.

Prerequisiti Prerequisites

Assicurarsi che il database di origine e lo snapshot del database soddisfino i prerequisiti seguenti:Ensure that the source database and database snapshot meet the following prerequisites:

Sicurezza Security

Autorizzazioni Permissions

Qualsiasi utente con autorizzazioni RESTORE DATABASE sul database di origine può ripristinarne lo stato corrispondente al momento in cui è stato creato lo snapshot.Any user who has RESTORE DATABASE permissions on the source database can revert it to its state when a database snapshot was created.

Come ripristinare un database a uno snapshot del database (tramite Transact-SQL) How to Revert a Database to a Database Snapshot (Using Transact-SQL)

Per ripristinare un database a uno snapshot del databaseTo revert a database to a database snapshot

Nota

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

  1. Individuare lo snapshot del database a cui ripristinare il database.Identify the database snapshot to which you want to revert the database. È possibile visualizzare gli snapshot di un database in SQL Server Management StudioSQL Server Management Studio . Vedere Visualizzare uno snapshot del database (SQL Server).You can view the snapshots on a database in SQL Server Management StudioSQL Server Management Studio (see View a Database Snapshot (SQL Server)). È anche possibile trovare il database di origine di una vista dalla colonna source_database_id della vista del catalogo sys.databases (Transact-SQL) .Also, you can identify the source database of a view from the source_database_id column of the sys.databases (Transact-SQL) catalog view.

  2. Eliminare eventuali altri snapshot del database.Drop any other database snapshots.

    Per informazioni sull'eliminazione di snapshot, vedere Eliminare uno snapshot del database (Transact-SQL).For information on dropping snapshots, see Drop a Database Snapshot (Transact-SQL). Se nel database viene utilizzato il modello di recupero con registrazione completa, prima del ripristino è necessario eseguire il backup del log.If the database uses the full recovery model, before reverting, you should back up the log. Per altre informazioni, vedere Eseguire il backup di un log delle transazioni (SQL Server) oppure Eseguire il backup del log delle transazioni quando il database è danneggiato (SQL Server).For more information, see Back Up a Transaction Log (SQL Server) or Back Up the Transaction Log When the Database Is Damaged (SQL Server).

  3. Eseguire l'operazione di ripristino.Perform the revert operation.

    Per un'operazione di ripristino è necessario disporre delle autorizzazioni RESTORE DATABASE nel database di origine.A revert operation requires RESTORE DATABASE permissions on the source database. Utilizzare quindi l'istruzione Transact-SQL per ripristinare il database:To revert the database, use the following Transact-SQL statement:

    RESTORE DATABASE nome_database FROM DATABASE_SNAPSHOT =nome_snapshot_databaseRESTORE DATABASE database_name FROM DATABASE_SNAPSHOT =database_snapshot_name

    dove nome_database è il database di origine e nome_snapshot_database è il nome dello snapshot con cui ripristinare il database.Where database_name is the source database and database_snapshot_name is the name of the snapshot to which you want to revert the database. Si noti che in questa istruzione è necessario specificare un nome di snapshot anziché un dispositivo di backup.Notice that in this statement, you must specify a snapshot name rather than a backup device.

    Per altre informazioni, vedere RESTORE (Transact-SQL).For more information, see RESTORE (Transact-SQL).

    Nota

    Durante l'operazione di ripristino sia lo snapshot che il database di origine risultano indisponibiliDuring the revert operation, both the snapshot and the source database are unavailable. e sono contrassegnati come in fase di ripristino.The source database and snapshot are both marked as "In restore." In caso di errori durante il ripristino, al riavvio del database verrà eseguito un tentativo di completamento dell'operazione.If an error occurs during the revert operation, it will try to finish reverting when the database starts up again.

  4. Se il proprietario del database è cambiato dalla creazione dello snapshot, è opportuno aggiornare il proprietario del database ripristinato.If the database owner changed since creation of the database snapshot, you may want to update the database owner of the reverted database.

    Nota

    Per il database ripristinato vengono mantenute le autorizzazioni e la configurazione dello snapshot, ad esempio il proprietario del database e il modello di recupero.The reverted database retains the permissions and configuration (such as database owner and recovery model) of the database snapshot.

  5. Avviare il database.Start the database.

  6. Facoltativamente, eseguire il backup del database ripristinato, in particolare se viene utilizzato il modello di recupero con registrazione completa o con registrazione minima delle operazioni bulk.Optionally, back up the reverted database, especially if it uses the full (or bulk-logged) recovery model. Per eseguire il backup di un database, vedere Creare un backup completo del database (SQL Server).To back up a database, see Create a Full Database Backup (SQL Server).

Esempi (Transact-SQL) Examples (Transact-SQL)

In questa sezione sono inclusi i seguenti esempi di ripristino di un database a uno snapshot del database:This section contains the following examples of reverting a database to a database snapshot:

A. A. Ripristino di uno snapshot nel database AdventureWorksReverting a snapshot on the AdventureWorks database

Nell'esempio si presuppone che per il database AdventureWorks2012AdventureWorks2012 esista un solo snapshot.This example assumes that only one snapshot currently exists on the AdventureWorks2012AdventureWorks2012 database. Per l'esempio in cui viene creato lo snapshot usato per il ripristino, vedere Creare uno snapshot del database (Transact-SQL).For the example that creates the snapshot to which the database is reverted here, see Create a Database Snapshot (Transact-SQL).

USE master;  
-- Reverting AdventureWorks to AdventureWorks_dbss1800  
RESTORE DATABASE AdventureWorks from   
DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';  
GO  

B. B. Ripristino di uno snapshot del database SalesReverting a snapshot on the Sales database

In questo esempio si suppone che esistano attualmente due snapshot del database Sales : sales_snapshot0600 e sales_snapshot1200.This example assumes that two snapshots currently exist on the Sales database: sales_snapshot0600 and sales_snapshot1200. Nell'esempio viene eliminato lo snapshot meno recente e il database viene ripristinato in base allo snapshot più recente.The example deletes the older of the snapshots and reverts the database to the more recent snapshot.

Per il codice di creazione del database di esempio e degli snapshot su cui si basa questo esempio, vedere:For the code for creating the sample database and snapshots on which this example depends, see:

--Test to see if sales_snapshot0600 exists and if it   
-- does, delete it.  
IF EXISTS (SELECT dbid FROM sys.databases  
    WHERE NAME='sales_snapshot0600')  
    DROP DATABASE SalesSnapshot0600;  
GO  
-- Reverting Sales to sales_snapshot1200  
USE master;  
RESTORE DATABASE Sales FROM DATABASE_SNAPSHOT = 'sales_snapshot1200';  
GO  

Vedere ancheSee Also

Snapshot del database (SQL Server) Database Snapshots (SQL Server)
RESTORE (Transact-SQL) RESTORE (Transact-SQL)
sys.databases (Transact-SQL) sys.databases (Transact-SQL)
Mirroring e snapshot del database (SQL Server) Database Mirroring and Database Snapshots (SQL Server)