Ripristinare un database a uno snapshot del database

Si applica a:SQL Server

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. 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. Tutte le modifiche apportate dopo la creazione dello snapshot verranno tuttavia perse.

Prima di iniziare

Limitazioni e restrizioni

Il ripristino da snapshot non è supportato nei casi seguenti:

  • Sono disponibili più snapshot per il database. Per il ripristino deve essere presente un solo snapshot con cui ripristinare il database.

  • Nel database sono presenti filegroup di sola lettura o compressi.

  • Alcuni file sono attualmente offline ma erano online al momento della creazione dello snapshot.

Prima di ripristinare un database, considerare le limitazioni seguenti:

  • Non è previsto il ripristino per il recupero di supporti. 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. Anche quando possibile, è inoltre improbabile che il ripristino in caso di danneggiamento consenta di risolvere il problema. Per proteggere un database è pertanto essenziale eseguire backup regolari e testare il piano di ripristino. Per altre informazioni, vedere Backup e ripristino di database SQL Server.

    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.

  • Il database di origine originale viene sovrascritto dal database ripristinato, pertanto qualsiasi aggiornamento apportato al database dalla creazione dello snapshot verrà perso.

  • Tramite l'operazione di ripristino viene inoltre sovrascritto il file di log precedente e viene ricompilato il log. Di conseguenza, non è possibile eseguire il rollforward del database ripristinato al punto in cui si è verificato l'errore dell'utente. Si consiglia pertanto di eseguire il backup del log prima di ripristinare un 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.

  • Tramite il ripristino viene interrotta la catena di backup del log. Prima di eseguire backup del log del database ripristinato, è pertanto necessario eseguire un backup completo del database o il backup del file. È consigliabile eseguire un backup completo del database.

  • Durante un'operazione di ripristino, sia lo snapshot che il database di origine non sono disponibili. Il database di origine e lo snapshot sono entrambi contrassegnati come "In restore". Se si verifica un errore durante l'operazione di ripristino, all'avvio del database, l'operazione di ripristino tenterà di terminare il ripristino.

  • I metadati di un database ripristinato corrispondono a quelli del database al momento dello snapshot.

  • Il ripristino causa l'eliminazione di tutti i cataloghi full-text.

Prerequisiti

Assicurarsi che il database di origine e lo snapshot del database soddisfino i prerequisiti seguenti:

Sicurezza

Autorizzazioni

Qualsiasi utente con autorizzazioni RESTORE DATABASE sul database di origine può ripristinarne lo stato corrispondente al momento in cui è stato creato lo snapshot.

Come ripristinare un database a uno snapshot del database (tramite Transact-SQL)

Per ripristinare un database a uno snapshot del database

Nota

Per un esempio di questa procedura, vedere Esempi (Transact-SQL)più avanti in questa sezione.

  1. Individuare lo snapshot del database a cui ripristinare il database. È possibile visualizzare gli snapshot in un database in SQL Server Management Studio (vedere Visualizzare uno snapshot del database (SQL Server)). È anche possibile identificare il database di origine di una vista dalla colonna source_database_id della vista del catalogo sys.databases (Transact-SQL).

  2. Eliminare eventuali altri snapshot del database.

    Per informazioni sull'eliminazione di snapshot, vedere Eliminare uno snapshot del database (Transact-SQL). Se nel database viene utilizzato il modello di recupero con registrazione completa, prima del ripristino è necessario eseguire il backup del log. Per altre informazioni, vedere Eseguire il backup di un log delle transazioni (SQL Server) o eseguire il backup del log delle transazioni quando il database è danneggiato (SQL Server).

  3. Eseguire l'operazione di ripristino.

    Per un'operazione di ripristino è necessario disporre delle autorizzazioni RESTORE DATABASE nel database di origine. Utilizzare quindi l'istruzione Transact-SQL per ripristinare il database:

    RESTORE DATABASE nome_database FROM DATABASE_SNAPSHOT =nome_snapshot_database

    dove nome_database è il database di origine e nome_snapshot_database è il nome dello snapshot con cui ripristinare il database. Si noti che in questa istruzione è necessario specificare un nome di snapshot anziché un dispositivo di backup.

    Per altre informazioni, vedere RESTORE (Transact-SQL).

    Nota

    Durante l'operazione di ripristino sia lo snapshot che il database di origine risultano indisponibili Il database di origine e lo snapshot sono entrambi contrassegnati come "In restore". Se si verifica un errore durante l'operazione di ripristino, tenterà di terminare il ripristino all'avvio del database.

  4. Se il proprietario del database è cambiato dalla creazione dello snapshot, è opportuno aggiornare il proprietario del database ripristinato.

    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.

  5. Avviare il 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. Per eseguire il backup di un database, vedere Creare un backup completo del database (SQL Server).

Esempi (Transact-SQL)

In questa sezione sono inclusi i seguenti esempi di ripristino di un database a uno snapshot del database:

R. Ripristino di uno snapshot nel database AdventureWorks

Nell'esempio si presuppone che per il database AdventureWorks2022 esista un solo snapshot. Per l'esempio che crea lo snapshot in cui viene ripristinato il database, vedere Creare uno snapshot del database (Transact-SQL).

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

B. Ripristino di uno snapshot del database Sales

In questo esempio si suppone che esistano attualmente due snapshot del database Sales : sales_snapshot0600 e sales_snapshot1200. Nell'esempio viene eliminato lo snapshot meno recente e il database viene ripristinato in base allo snapshot più recente.

Per il codice di creazione del database di esempio e degli snapshot su cui si basa questo esempio, vedere:

--Test to see if sales_snapshot0600 exists and if it   
-- does, delete it.  
IF EXISTS (SELECT database_id 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  

Attività correlate

Vedi anche

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