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.
Importante |
---|
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.
Importante |
---|
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
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).
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).
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.
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.
Avviare il database.
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:
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 Procedura: Creazione di 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
Vedere anche