Ripristinare un database a uno snapshot del database

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

    Prerequisiti

    Sicurezza

  • Per ripristinare un database a uno snapshot del database tramite Transact-SQL

Prima di iniziare

Limitazioni e restrizioni

Il ripristino non è supportato nei casi seguenti:

  • Nel database deve essere attualmente disponibile un solo snapshot del database in base al quale si prevede di effettuare il ripristino.

  • 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 ulteriori 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. Entrambi sono contrassegnati come in fase di ripristino. Se si verifica un errore durante l'operazione di ripristino, al nuovo avvio del database verrà eseguito un tentativo di completamento dell'operazione.

  • 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.

[Torna all'inizio]

Prerequisiti

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

[Torna all'inizio]

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.

[Torna all'inizio]

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 di un database in SQL Server Management Studio. Vedere Visualizzazione di uno snapshot del database (SQL Server). È inoltre possibile individuare 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 ulteriori informazioni, vedere Backup di un log delle transazioni (SQL Server) o Esecuzione del 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 database_name FROM DATABASE_SNAPSHOT = database_snapshot_name

    dove database_name è il database di origine e database_snapshot_name 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 ulteriori informazioni, vedere RESTORE (Transact-SQL).

    [!NOTA]

    Durante l'operazione di ripristino sia lo snapshot che il database di origine risultano indisponibili e sono contrassegnati come in fase di ripristino. In caso di errori durante il ripristino, al riavvio del database verrà eseguito un tentativo di completamento dell'operazione.

  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 Creazione di un backup completo del database (SQL Server).

[Torna all'inizio]

Esempi (Transact-SQL)

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

  • A. Ripristino di uno snapshot nel database AdventureWorks

  • B. Ripristino di uno snapshot del database Sales

A.Ripristino di uno snapshot nel database AdventureWorks

Nell'esempio si presuppone che per il database AdventureWorks2012 esista un solo snapshot. Per l'esempio in cui viene creato lo snapshot utilizzato per il ripristino, 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:

  • Per il database Sales e lo snapshot sales_snapshot0600 vedere gli esempi inclusi nelle sezioni relative alla creazione di un database con filegroup e alla creazione di uno snapshot del database in CREATE DATABASE (Transact-SQL).

  • Per lo snapshot sales_snapshot1200, vedere la sezione relativa alla creazione di uno snapshot del database Sales in Creare uno snapshot del database (Transact-SQL).

--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

Icona freccia utilizzata con il collegamento Torna all'inizio[Inizio pagina]

Attività correlate

Icona freccia utilizzata con il collegamento Torna all'inizio[Inizio pagina]

Vedere anche

Riferimento

RESTORE (Transact-SQL)

sys.databases (Transact-SQL)

Concetti

Snapshot del database (SQL Server)

Mirroring e snapshot del database (SQL Server)