Condividi tramite


Procedura: Ripristino di un database con uno snapshot del database (Transact-SQL)

Gli snapshot del database non costituiscono una soluzione di archiviazione ridondante e, pertanto, non garantiscono alcuna protezione in caso di errori del disco o altri tipi di danneggiamento. Tuttavia, se un utente genera un errore in un database in linea, è possibile ripristinare il database utilizzando lo snapshot precedente all'errore.

Nota importanteImportante

Per proteggere un database è essenziale eseguire backup regolari e testare il piano di ripristino. Se è necessario ripristinare il database di origine al punto nel tempo in cui è stato creato uno snapshot del database, implementare criteri di backup che consentano di eseguire tale operazione.

L'operazione di ripristino implica la sovrascrittura del database di origine originale con quello ripristinato. Il ripristino tramite snapshot elimina tutti i cataloghi full-text.

Nota importanteImportante

Prima di eseguire il ripristino, è consigliabile leggere le informazioni riportate in Ripristino di uno snapshot del database.

Per ripristinare un database con uno snapshot del database

  1. Individuare lo snapshot del database con cui ripristinare il database. È possibile visualizzare gli snapshot di un database in SQL Server Management Studio. Vedere Procedura: Visualizzazione di uno snapshot del database (SQL Server Management Studio). È inoltre possibile individuare il database di originale 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 Procedura: Eliminazione di 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 Procedura: Esecuzione del backup di un log delle transazioni (SQL Server Management Studio) o Procedura: Esecuzione del backup del log delle transazioni quando il database è danneggiato (Transact-SQL).

  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 informazioni sul backup del database, vedere Procedura: Esecuzione del backup di un database (SQL Server Management Studio) o Procedura: Creazione di un backup completo del database (Transact-SQL).

Esempio

In questa sezione sono inclusi esempi di ripristino di un database a uno snapshot del database.

A. Ripristino di uno snapshot del database AdventureWorks

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