RESTORE (Transact-SQL)

Vengono ripristinati i backup eseguiti tramite il comando BACKUP. Questo comando consente di effettuare gli scenari di ripristino seguenti:

  • Ripristinare un intero database da un backup completo del database (ripristino completo).

  • Ripristinare parte di un database (ripristino parziale).

  • Ripristinare file o filegroup in un database (ripristino di file).

  • Ripristinare pagine specifiche in un database (ripristino di pagina).

  • Ripristinare un log delle transazioni in un database (ripristino del log delle transazioni).

  • Eseguire un ripristino temporizzato di un database fino al punto nel tempo acquisito in uno snapshot del database.

Per ulteriori informazioni sugli scenari di ripristino di SQL Server, vedere Panoramica del ripristino e del recupero (SQL Server).

[!NOTA]

Per ulteriori informazioni sulle descrizioni degli argomenti, vedere Argomenti dell'istruzione RESTORE (Transact-SQL).

[!NOTA]

A partire dall'aggiornamento cumulativo 2 di SQL Server 2012 SP1, è supportato il backup di SQL Server nel servizio di archiviazione BLOB di Windows Azure. Per ulteriori informazioni, vedere Funzionalità avanzate di backup e ripristino e Backup e ripristino di SQL Server con il servizio di archiviazione BLOB di Windows Azure.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

--To Restore an Entire Database from a Full database backup (a Complete Restore):
RESTORE DATABASE { database_name | @database_name_var } 
 [ FROM <backup_device> [ ,...n ] ]
 [ WITH 
   {
    [ RECOVERY | NORECOVERY | STANDBY = 
        {standby_file_name | @standby_file_name_var } 
       ]
   | ,  <general_WITH_options> [ ,...n ]
   | , <replication_WITH_option>
   | , <change_data_capture_WITH_option>
   | , <FILESTREAM_WITH_option>
   | , <service_broker_WITH options> 
   | , <point_in_time_WITH_options—RESTORE_DATABASE> 
   } [ ,...n ]
 ]
[;]

--To perform the first step of the initial restore sequence 
-- of a piecemeal restore:
RESTORE DATABASE { database_name | @database_name_var } 
   <files_or_filegroups> [ ,...n ]
 [ FROM <backup_device> [ ,...n ] ] 
   WITH 
      PARTIAL, NORECOVERY 
      [  , <general_WITH_options> [ ,...n ] 
       | , <point_in_time_WITH_options—RESTORE_DATABASE> 
      ] [ ,...n ] 
[;]

--To Restore Specific Files or Filegroups: 
RESTORE DATABASE { database_name | @database_name_var } 
   <file_or_filegroup> [ ,...n ]
 [ FROM <backup_device> [ ,...n ] ] 
   WITH 
   {
      [ RECOVERY | NORECOVERY ]
      [ , <general_WITH_options> [ ,...n ] ]
   } [ ,...n ] 
[;]

--To Restore Specific Pages: 
RESTORE DATABASE { database_name | @database_name_var } 
   PAGE = 'file:page [ ,...n ]' 
 [ , <file_or_filegroups> ] [ ,...n ]
 [ FROM <backup_device> [ ,...n ] ] 
   WITH 
       NORECOVERY   
      [ , <general_WITH_options> [ ,...n ] ]
[;]

--To Restore a Transaction Log:
RESTORE LOG { database_name | @database_name_var } 
 [ <file_or_filegroup_or_pages> [ ,...n ] ]
 [ FROM <backup_device> [ ,...n ] ] 
 [ WITH 
   {
     [ RECOVERY | NORECOVERY | STANDBY = 
        {standby_file_name | @standby_file_name_var } 
       ]
    | ,  <general_WITH_options> [ ,...n ]
    | , <replication_WITH_option>
    | , <point_in_time_WITH_options—RESTORE_LOG> 
   } [ ,...n ]
 ] 
[;]

--To Revert a Database to a Database Snapshot:   
RESTORE DATABASE { database_name | @database_name_var } 
FROM DATABASE_SNAPSHOT = database_snapshot_name  

<backup_device>::=
{ 
   { logical_backup_device_name |
      @logical_backup_device_name_var }
 | { DISK | TAPE } = { 'physical_backup_device_name' |
      @physical_backup_device_name_var } 
} 

<files_or_filegroups>::= 
{ 
   FILE = { logical_file_name_in_backup | @logical_file_name_in_backup_var } 
 | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } 
 | READ_WRITE_FILEGROUPS
} 

<general_WITH_options> [ ,...n ]::=  
--Restore Operation Options
   MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' 
          [ ,...n ] 
 | REPLACE 
 | RESTART 
 | RESTRICTED_USER 

--Backup Set Options
 | FILE = { backup_set_file_number | @backup_set_file_number } 
 | PASSWORD = { password | @password_variable } 

--Media Set Options
 | MEDIANAME = { media_name | @media_name_variable } 
 | MEDIAPASSWORD = { mediapassword | @mediapassword_variable } 
 | BLOCKSIZE = { blocksize | @blocksize_variable } 

--Data Transfer Options
 | BUFFERCOUNT = { buffercount | @buffercount_variable } 
 | MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }

--Error Management Options
 | { CHECKSUM | NO_CHECKSUM } 
 | { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } 

--Monitoring Options
 | STATS [ = percentage ] 

--Tape Options
 | { REWIND | NOREWIND } 
 | { UNLOAD | NOUNLOAD } 
  
<replication_WITH_option>::=
 | KEEP_REPLICATION 

<change_data_capture_WITH_option>::=
 | KEEP_CDC

<FILESTREAM_WITH_option>::=
 | FILESTREAM ( DIRECTORY_NAME = directory_name )


<service_broker_WITH_options>::= 
 | ENABLE_BROKER 
 | ERROR_BROKER_CONVERSATIONS 
 | NEW_BROKER 


<point_in_time_WITH_options—RESTORE_DATABASE>::= 
 | {
   STOPAT = { 'datetime'| @datetime_var } 
 | STOPATMARK = 'lsn:lsn_number'
                 [ AFTER 'datetime'] 
 | STOPBEFOREMARK = 'lsn:lsn_number'
                 [ AFTER 'datetime'] 
   } 

<point_in_time_WITH_options—RESTORE_LOG>::= 
 | {
   STOPAT = { 'datetime'| @datetime_var } 
 | STOPATMARK = { 'mark_name' | 'lsn:lsn_number' }
                 [ AFTER 'datetime'] 
 | STOPBEFOREMARK = { 'mark_name' | 'lsn:lsn_number' }
                 [ AFTER 'datetime'] 
   } 

Argomenti

Per una descrizione degli argomenti, vedere Argomenti dell'istruzione RESTORE (Transact-SQL).

Informazioni sugli scenari di ripristino

SQL Server supporta un'ampia gamma di scenari di ripristino:

Considerazioni aggiuntive sulle opzioni RESTORE

Parole chiave RESTORE obsolete

In SQL Server 2008 non sono più disponibili le parole chiave seguenti:

Parola chiave obsoleta

Parola chiave di sostituzione

Esempio di parola chiave di sostituzione

LOAD

RESTORE

RESTORE DATABASE

TRANSACTION

LOG

RESTORE LOG

DBO_ONLY

RESTRICTED_USER

RESTORE DATABASE ... WITH RESTRICTED_USER

RESTORE LOG

È possibile includere un elenco di file in RESTORE LOG per consentire la creazione di file durante il rollforward. Questa procedura viene utilizzata quando il backup del log contiene record di log scritti al momento dell'aggiunta di un file al database.

[!NOTA]

Per un database impostato per l'utilizzo del modello di recupero con registrazione completa o con registrazione minima delle operazioni bulk, nella maggior parte dei casi è necessario eseguire il backup della parte finale del log prima di ripristinare il database. Se si esegue il ripristino di un database senza aver prima eseguito il backup della parte finale del log si verificherà un errore, a meno che nell'istruzione RESTORE DATABASE non sia inclusa la clausola WITH REPLACE o WITH STOPAT, che deve consentire di specificare l'ora o la transazione verificatasi al termine del backup dei dati. Per ulteriori informazioni sui backup della parte finale del log, vedere Backup della parte finale del log [SQL Server].

Differenze tra RECOVERY e NORECOVERY

Il rollback viene controllato dall'istruzione RESTORE tramite le opzioni [ RECOVERY | NORECOVERY ]:

  • NORECOVERY specifica che il rollback non deve essere eseguito. Questo consente la continuazione del rollforward con l'istruzione successiva nella sequenza.

    In questo caso, tramite la sequenza di ripristino è possibile ripristinare altri backup ed eseguirne il rollforward.

  • RECOVERY (opzione predefinita) indica che il rollback deve essere eseguito dopo il completamento del rollforward per il backup corrente.

    Per il recupero del database è necessario che l'intero set di dati da ripristinare (set di rollforward) sia coerente con il database. Se il rollforward del set di rollforward non è stato eseguito a un livello sufficiente per garantirne la coerenza con il database e si specifica l'opzione RECOVERY, tramite il Motore di database viene generato un errore.

Supporto della compatibilità

In SQL Server 2012 è possibile ripristinare un database utente dal backup di un database creato tramite SQL Server 2005 o una versione successiva. Tuttavia, i backup dei database master, model e msdb creati utilizzando SQL Server 2005 oppure SQL Server 2008 non possono essere ripristinati tramite SQL Server 2012. Inoltre, i backup creati in SQL Server 2012 non possono essere ripristinati tramite una qualsiasi versione precedente di SQL Server.

[!NOTA]

Nessun backup di SQL Server può essere ripristinato in una versione di SQL Server precedente a quella tramite cui è stato creato il backup.

In SQL Server 2012 viene utilizzato un percorso predefinito diverso rispetto alle versioni precedenti. Per ripristinare un database creato nel percorso predefinito per i backup di SQL Server 2005 o SQL Server 2008 è pertanto necessario utilizzare l'opzione MOVE. Per informazioni sul nuovo percorso predefinito, vedere Percorsi dei file per le istanze predefinite e denominate di SQL Server.

Dopo il ripristino di un database di SQL Server 2005 o SQL Server 2008 in SQL Server 2012, il database viene aggiornato automaticamente. In genere, il database diventa subito disponibile. Tuttavia, se in un database di SQL Server 2005 sono inclusi indici full-text, questi vengono importati, reimpostati o ricompilati dal processo di aggiornamento, a seconda dell'impostazione della proprietà del server upgrade_option. Se l'opzione di aggiornamento è impostata sull'importazione (upgrade_option = 2) o sulla ricompilazione (upgrade_option = 0), gli indici full-text non saranno disponibili durante l'aggiornamento. A seconda della quantità di dati indicizzati, l'importazione può richiedere diverse ore, mentre la ricompilazione può risultare dieci volte più lunga. Si noti inoltre che quando l'opzione di aggiornamento è impostata sull'importazione, gli indici full-text associati vengono ricompilati se non è disponibile un catalogo full-text. Per modificare l'impostazione della proprietà del server upgrade_option, utilizzare sp_fulltext_service.

Quando un database viene collegato per la prima volta a una nuova istanza di SQL Server o ripristinato, nel server non è ancora archiviata una copia della chiave master del database, crittografata dalla chiave master del servizio. È necessario utilizzare l'istruzione OPEN MASTER KEY per decrittografare la chiave master del database (DMK). Dopo aver decrittografato la DMK, è possibile utilizzare l'istruzione ALTER MASTER KEY REGENERATE per abilitare la decrittografia automatica per le operazioni successive, in modo da fornire al server una copia della DMK crittografata con la chiave master del servizio (SMK). Quando un database è stato aggiornato da una versione precedente, la DMK deve essere rigenerata per utilizzare l'algoritmo AES più recente. Per ulteriori informazioni sulla rigenerazione della DMK, vedere ALTER MASTER KEY (Transact-SQL). Il tempo richiesto per rigenerare la chiave DMK e aggiornarla ad AES dipende dal numero di oggetti protetti dalla DMK. È necessario rigenerare la chiave DMK per l'aggiornamento ad AES una sola volta e l'operazione non influenza le rigenerazioni future che fanno parte di una strategia di rotazione della chiave.

Osservazioni generali

Durante un ripristino offline, se il database specificato è in uso, l'istruzione RESTORE comporta la disconnessione degli utenti dopo un breve intervallo. Per il ripristino online di un filegroup non primario, il database può rimanere in uso a meno che il filegroup da ripristinare non venga portato offline. Tutti i dati del database specificato vengono sostituiti dai dati ripristinati.

Per ulteriori informazioni sul recupero di database, vedere Panoramica del ripristino e del recupero (SQL Server).

È possibile eseguire operazioni di ripristino tra piattaforme diverse, e anche tra tipi di processore diversi, a condizione che il sistema operativo supporti le regole di confronto del database.

È possibile riavviare un'operazione RESTORE dopo un errore. È inoltre possibile impostare l'istruzione RESTORE per continuare le operazioni anche in caso di errori e in questo caso viene eseguito il ripristino di tutti i dati possibili (vedere l'opzione CONTINUE_AFTER_ERROR).

Non è possibile utilizzare RESTORE in una transazione esplicita o implicita.

Il ripristino di un database master danneggiato viene effettuato tramite una procedura speciale. Per ulteriori informazioni, vedere Backup e ripristino di Database di sistema (SQL Server).

Il ripristino di un database comporta la cancellazione della cache dei piani per l'istanza di SQL Server. La cancellazione della cache dei piani comporta la ricompilazione di tutti i piani di esecuzione successivi e può causare un improvviso peggioramento temporaneo delle prestazioni di esecuzione delle query. A partire da SQL Server 2005 Service Pack 2, per ogni archivio cache cancellato nella cache dei piani, il log degli errori di SQL Server contiene il messaggio informativo seguente: "SQL Server ha rilevato %d occorrenza/e di scaricamento dell'archivio cache '%s' (parte della cache dei piani) a causa di operazioni di manutenzione o riconfigurazione del database". Questo messaggio viene registrato ogni cinque minuti per l'intervallo di tempo necessario allo scaricamento della cache.

Per ripristinare un database di disponibilità, ripristinare innanzitutto il database in base all'istanza di SQL Server, quindi aggiungerlo al gruppo di disponibilità.

Interoperabilità

Impostazioni e ripristino del database

Durante il ripristino, la maggior parte delle opzioni del database che possono essere impostate con ALTER DATABASE viene reimpostata sui valori attivi alla fine del backup.

Se si utilizza l'opzione WITH RESTRICTED_USER, tuttavia, questo comportamento viene ignorato per l'impostazione dell'opzione di accesso dell'utente. Questa opzione viene sempre impostata dopo l'esecuzione di un'istruzione RESTORE in cui è inclusa l'opzione WITH RESTRICTED_USER.

Ripristino di un database crittografato

Per ripristinare un database crittografato, è necessario poter accedere alla chiave asimmetrica o al certificato utilizzato per crittografare il database. Non è possibile effettuare l'operazione di ripristino del database senza almeno uno di questi due elementi. Di conseguenza, il certificato utilizzato per crittografare la chiave di crittografia del database deve essere conservato fino a quando il backup è necessario. Per ulteriori informazioni, vedere Certificati SQL Server e chiavi simmetriche.

Ripristino di un database abilitato per l'archiviazione vardecimal

Il backup e il ripristino funzionano correttamente con il formato di archiviazione vardecimal. Per ulteriori informazioni sul formato di archiviazione vardecimal, vedere sp_db_vardecimal_storage_format (Transact-SQL).

Ripristino di dati full-text

I dati full-text vengono ripristinati insieme agli altri dati del database durante un ripristino completo. Con la normale sintassi RESTORE DATABASE database_name FROM backup_device, i file full-text vengono ripristinati nell'ambito del ripristino dei file del database.

L'istruzione RESTORE consente inoltre di eseguire ripristini in posizioni alternative, ripristini differenziali, ripristini di file e filegroup, nonché ripristini differenziali di file e filegroup di dati full-text. È inoltre possibile utilizzare l'istruzione RESTORE per ripristinare solo i file full-text, come nel caso dei dati di database.

[!NOTA]

I cataloghi full-text importati da SQL Server 2005 vengono ancora gestiti come file di database. Per tali file, la procedura di SQL Server 2005 per l'esecuzione del backup dei cataloghi full-text rimane applicabile, a meno che la sospensione e la ripresa durante l'operazione di backup non siano più necessarie. Per ulteriori informazioni, vedere Backup e ripristino di un catalogo full-text di SQL Server 2008 nella documentazione online di SQL Server 2005.

Metadati

In SQL Server sono incluse tabelle di cronologia di backup e ripristino in cui viene tenuta traccia dell'attività di backup e ripristino per ogni istanza del server. Quando si effettua un'operazione di ripristino, vengono modificate anche le tabelle di cronologia di backup. Per informazioni su tali tabelle, vedere Informazioni sulla cronologia e sull'intestazione del backup (SQL Server).

Impatto dell'opzione REPLACE

L'opzione REPLACE deve essere utilizzata raramente e solo dopo un'attenta valutazione. In genere, il ripristino impedisce la sovrascrittura accidentale di un database con un altro. Se il database specificato in un'istruzione RESTORE esiste già nel server corrente e il GUID del gruppo di database specificato è diverso da quello registrato nel set di backup, il database non verrà ripristinato. Questa misura di sicurezza è importante.

L'opzione REPLACE ignora diversi controlli di sicurezza importanti, eseguiti generalmente durante il ripristino. I controlli ignorati riguardano le operazioni seguenti:

  • Ripristino di un database esistente con un backup di un altro database

    Con l'opzione REPLACE, il ripristino consente di sovrascrivere un database esistente con qualsiasi database incluso nel set di backup, anche se il nome del database specificato è diverso da quello registrato nel set di backup. Questa operazione può causare la sovrascrittura accidentale di un database con un altro.

  • Ripristino di un database mediante il modello di recupero con registrazione completa o con registrazione minima delle operazioni bulk in cui manca il backup della parte finale del log e non viene utilizzata l'opzione STOPAT

    Con l'opzione REPLACE, è possibile perdere le transazioni di cui è stato eseguito il commit, in quanto non viene eseguito il backup del log in cui sono stati registrati i dati più recenti.

  • Sovrascrittura di file esistenti

    In seguito a un errore, ad esempio, potrebbe essere consentita la sovrascrittura di file esistenti di tipo non corretto, ad esempio con estensione xls, o utilizzati da un altro database che non è online. Se i file vengono sovrascritti, può verificarsi la perdita di dati arbitrari, anche se il database ripristinato è completo.

Ripetizione di un ripristino

Non è possibile annullare gli effetti di un ripristino. È tuttavia possibile annullare gli effetti della copia e del rollforward dei dati, rieseguendo l'operazione file per file. Per ricominciare, ripristinare il file desiderato ed eseguire nuovamente il rollforward. Se, ad esempio, vengono ripristinati per errore troppi backup del log superando il punto previsto per l'interruzione del ripristino, è necessario riavviare la sequenza.

È possibile interrompere e riavviare una sequenza di ripristino tramite il ripristino dell'intero contenuto dei file interessati.

Ripristino di un database a uno snapshot del database

L'operazione di ripristino del database (specificata con l'opzione DATABASE_SNAPSHOT) consente di portare un database di origine completo in un momento anteriore nel tempo tramite il ripristino al momento di uno snapshot del database, ovvero sovrascrivendo il database di origine con i dati del punto nel tempo inclusi nello snapshot del database specificato. Al momento del ripristino, può esistere solo lo snapshot da ripristinare. L'operazione include la ricompilazione del log, pertanto non è possibile eseguire successivamente il rollforward di un database così ripristinato fino al punto di un errore utente specifico.

La perdita di dati è limitata agli aggiornamenti del database eseguiti in seguito alla creazione dello snapshot. I metadati di un database così ripristinato corrispondono a quelli esistenti al momento della creazione dello snapshot. Il ripristino a uno snapshot causa tuttavia l'eliminazione di tutti i cataloghi full-text.

Il ripristino di uno snapshot del database non consente di recuperare i supporti. A differenza di un normale set di backup, lo snapshot del database è una copia incompleta dei file del database. Se il database o lo snapshot del database è danneggiato, è improbabile che sia possibile eseguire il ripristino da uno snapshot. Anche quando possibile, è inoltre improbabile che il ripristino in caso di danneggiamento consenta di risolvere il problema.

Limitazioni relative al ripristino

Il ripristino non è supportato nei casi seguenti:

  • Il database di origine contiene filegroup di sola lettura o compressi.

  • Tutti i file che erano online al momento della creazione dello snapshot sono offline.

  • Sono disponibili più snapshot del database.

Per ulteriori informazioni, vedere Ripristinare un database a uno snapshot del database.

Sicurezza

Per un'operazione di backup è eventualmente possibile specificare una password per un set di supporti o un set di backup oppure per entrambi. Se è stata impostata una password per un set di supporti o un set di backup, è necessario specificare la password o le password corrette nell'istruzione RESTORE. Queste password impediscono operazioni di ripristino non autorizzate e l'aggiunta non autorizzata di set di backup ai supporti tramite gli strumenti di SQL Server. I supporti protetti con password possono tuttavia essere sovrascritti con l'opzione FORMAT dell'istruzione BACKUP.

Nota sulla sicurezzaNota sulla sicurezza

Il livello di protezione garantito da questa password è ridotto. Lo scopo è impedire un ripristino non corretto da parte di utenti autorizzati o non autorizzati mediante gli strumenti di SQL Server. Non viene impedita la lettura dei dati di backup eseguita con altri mezzi, né la sostituzione della password. Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa caratteristica in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Per ottenere un livello di protezione adeguato dei backup è consigliabile archiviare i nastri di backup in un luogo sicuro oppure eseguire il backup su file su disco protetti da elenchi di controllo di accesso (ACL) appropriati. Gli elenchi di controllo di accesso devono essere impostati a livello della directory radice in cui vengono creati i backup.

Autorizzazioni

Se il database da ripristinare non esiste, per eseguire un'operazione RESTORE l'utente deve disporre delle autorizzazioni CREATE DATABASE. Se il database esiste, le autorizzazioni per l'istruzione RESTORE vengono assegnate per impostazione predefinita ai membri dei ruoli predefiniti del server sysadmin e dbcreator e al proprietario (dbo) del database (per l'opzione FROM DATABASE_SNAPSHOT, il database esiste sempre).

Le autorizzazioni per l'istruzione RESTORE vengono assegnate ai ruoli in cui le informazioni sull'appartenenza sono sempre disponibili per il server. Poiché è possibile controllare l'appartenenza ai ruoli predefiniti del database solo quando il database è accessibile e non è danneggiato, condizioni che non risultano sempre vere quando si esegue un'operazione RESTORE, i membri del ruolo predefinito del database db_owner non dispongono delle autorizzazioni per l'istruzione RESTORE.

Esempi

In tutti gli esempi si presuppone che sia stato eseguito un backup completo del database.

Sono disponibili gli esempi seguenti per l'istruzione RESTORE:

  • A. Ripristino di un database completo

  • B. Ripristino di backup completi e differenziali del database

  • C. Ripristino di un database con la sintassi RESTART

  • D. Ripristino di un database e spostamento dei file

  • E. Copia di un database tramite BACKUP e RESTORE

  • F. Ripristino temporizzato tramite STOPAT

  • G. Ripristino del log delle transazioni fino a un contrassegno

  • H. Ripristino con la sintassi TAPE

  • I. Ripristino con la sintassi FILE e FILEGROUP

  • J. Ripristino da uno snapshot del database

[!NOTA]

Per ulteriori esempi, vedere le procedure di ripristino elencate in Panoramica del ripristino e del recupero (SQL Server).

A.Ripristino di un database completo

Nell'esempio seguente viene ripristinato un backup completo del database dal dispositivo di backup logico AdventureWorksBackups. Per un esempio della creazione di questo dispositivo, vedere Dispositivi di backup.

RESTORE DATABASE AdventureWorks2012 
   FROM AdventureWorks2012Backups;

[!NOTA]

Per un database impostato per l'utilizzo del modello di recupero con registrazione completa o con registrazione minima delle operazioni bulk, in SQL Server nella maggior parte dei casi è necessario eseguire il backup della parte finale del log prima di ripristinare il database. Per ulteriori informazioni, vedere Backup della parte finale del log [SQL Server].

[Torna all'inizio degli esempi]

B.Ripristino di backup completi e differenziali del database

Nell'esempio seguente viene ripristinato un backup completo del database seguito da un backup differenziale dal dispositivo di backup Z:\SQLServerBackups\AdventureWorks2012.bak, in cui sono entrambi contenuti. Il backup completo del database da ripristinare rappresenta il sesto set di backup nel dispositivo (FILE = 6), mentre il backup differenziale del database rappresenta il nono set di backup nel dispositivo (FILE = 9). Il database viene recuperato al termine del recupero del backup differenziale.

RESTORE DATABASE AdventureWorks2012
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2012.bak'
   WITH FILE = 6
      NORECOVERY;
RESTORE DATABASE AdventureWorks2012
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2012.bak'
   WITH FILE = 9
      RECOVERY;

[Torna all'inizio degli esempi]

C.Ripristino di un database con la sintassi RESTART

Nell'esempio seguente viene utilizzata l'opzione RESTART per riavviare un'operazione RESTORE interrotta a causa di un'interruzione dell'alimentazione del server.

-- This database RESTORE halted prematurely due to power failure.
RESTORE DATABASE AdventureWorks2012
   FROM AdventureWorksBackups;
-- Here is the RESTORE RESTART operation.
RESTORE DATABASE AdventureWorks2012 
   FROM AdventureWorksBackups WITH RESTART;

[Torna all'inizio degli esempi]

D.Ripristino di un database e spostamento dei file

Nell'esempio seguente vengono ripristinati un database completo e il log delle transazioni. Il database ripristinato viene quindi spostato nella directory C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data.

RESTORE DATABASE AdventureWorks2012
   FROM AdventureWorksBackups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks2012_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\NewAdvWorks.mdf', 
      MOVE 'AdventureWorks2012_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\NewAdvWorks.ldf';
RESTORE LOG AdventureWorks2012
   FROM AdventureWorksBackups
   WITH RECOVERY;

[Torna all'inizio degli esempi]

E.Copia di un database tramite BACKUP e RESTORE

Nell'esempio seguente vengono utilizzate le istruzioni BACKUP e RESTORE per creare una copia del database AdventureWorks2012 . L'istruzione MOVE consente di ripristinare i file di dati e di log nelle posizioni specificate. L'istruzione RESTORE FILELISTONLY viene utilizzata per determinare il numero e i nomi dei file del database da ripristinare. Alla nuova copia del database viene assegnato il nome TestDB. Per ulteriori informazioni, vedere RESTORE FILELISTONLY (Transact-SQL).

BACKUP DATABASE AdventureWorks2012 
   TO AdventureWorksBackups ;

RESTORE FILELISTONLY 
   FROM AdventureWorksBackups ;

RESTORE DATABASE TestDB 
   FROM AdventureWorksBackups 
   WITH MOVE 'AdventureWorks2012_Data' TO 'C:\MySQLServer\testdb.mdf',
   MOVE 'AdventureWorks2012_Log' TO 'C:\MySQLServer\testdb.ldf';
GO

[Torna all'inizio degli esempi]

F.Ripristino temporizzato tramite STOPAT

Nell'esempio seguente viene ripristinato lo stato del database corrispondente alle ore 12:00 AM del giorno April 15, 2020 e viene illustrata un'operazione di ripristino di più backup del log. Nel dispositivo di backup, AdventureWorksBackups, il backup completo del database da ripristinare è il terzo set di backup (FILE = 3), il primo backup del log è il quarto set di backup (FILE = 4) e il secondo backup del log è il quinto set di backup (FILE = 5).

RESTORE DATABASE AdventureWorks2012
   FROM AdventureWorksBackups
   WITH FILE=3, NORECOVERY;

RESTORE LOG AdventureWorks2012
   FROM AdventureWorksBackups
   WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';

RESTORE LOG AdventureWorks2012
   FROM AdventureWorksBackups
   WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';
RESTORE DATABASE AdventureWorks2012 WITH RECOVERY; 

[Torna all'inizio degli esempi]

G.Ripristino del log delle transazioni fino a un contrassegno

Nell'esempio seguente viene ripristinato il log delle transazioni fino al contrassegno nella transazione contrassegnata denominata ListPriceUpdate.

USE AdventureWorks2012
GO
BEGIN TRANSACTION ListPriceUpdate
   WITH MARK 'UPDATE Product list prices';
GO

UPDATE Production.Product
   SET ListPrice = ListPrice * 1.10
   WHERE ProductNumber LIKE 'BK-%';
GO

COMMIT TRANSACTION ListPriceUpdate;
GO

-- Time passes. Regular database 
-- and log backups are taken.
-- An error occurs in the database.
USE master;
GO

RESTORE DATABASE AdventureWorks2012
FROM AdventureWorksBackups
WITH FILE = 3, NORECOVERY;
GO

RESTORE LOG AdventureWorks2012
   FROM AdventureWorksBackups 
   WITH FILE = 4,
   RECOVERY, 
   STOPATMARK = 'UPDATE Product list prices';

[Torna all'inizio degli esempi]

H.Ripristino con la sintassi TAPE

Nell'esempio seguente viene ripristinato un backup completo del database da un dispositivo di backup di tipo TAPE.

RESTORE DATABASE AdventureWorks2012 
   FROM TAPE = '\\.\tape0';

[Torna all'inizio degli esempi]

I.Ripristino con la sintassi FILE e FILEGROUP

Nell'esempio seguente viene ripristinato un database denominato MyDatabase che include due file, un filegroup secondario e un log delle transazioni. Per il database viene utilizzato il modello di recupero con registrazione completa.

Il backup del database è il nono set di backup nel set di supporti in un dispositivo di backup logico denominato MyDatabaseBackups. Vengono quindi ripristinati tre backup del log, disponibili nei tre set di backup successivi (10, 11 e 12) nel dispositivo MyDatabaseBackups, utilizzando WITH NORECOVERY. Dopo il ripristino dell'ultimo backup del log, il database viene recuperato.

[!NOTA]

Il recupero viene eseguito come passaggio distinto per ridurre la possibilità che questa operazione venga eseguita troppo presto, ovvero prima del ripristino di tutti i backup del log.

Si noti che in RESTORE DATABASE sono disponibili due tipi di opzioni FILE. Le opzioni FILE che precedono il nome del dispositivo di backup specificano i nomi di file logici dei file di database da ripristinare dal set di backup, ad esempio FILE = 'MyDatabase_data_1'. Questo set di backup non è il primo backup del database nel set di supporti. La relativa posizione nel set di supporti viene pertanto indicata tramite l'opzione FILE nella clausola WITH, FILE=9.

RESTORE DATABASE MyDatabase
   FILE = 'MyDatabase_data_1',
   FILE = 'MyDatabase_data_2',
   FILEGROUP = 'new_customers'
   FROM MyDatabaseBackups
   WITH 
      FILE = 9,
      NORECOVERY;
GO
-- Restore the log backups.
RESTORE LOG MyDatabase
   FROM MyDatabaseBackups
   WITH FILE = 10, 
      NORECOVERY;
GO
RESTORE LOG MyDatabase
   FROM MyDatabaseBackups
   WITH FILE = 11, 
      NORECOVERY;
GO
RESTORE LOG MyDatabase
   FROM MyDatabaseBackups
   WITH FILE = 12, 
      NORECOVERY;
GO
--Recover the database:
RESTORE DATABASE MyDatabase WITH RECOVERY;
GO

[Torna all'inizio degli esempi]

K.Ripristino da uno snapshot del database

Nell'esempio seguente viene eseguito il ripristino di un database con uno snapshot del database. Nell'esempio si presuppone che per il database esista un solo snapshot. Per un esempio della modalità di creazione di questo snapshot del database, vedere Creare uno snapshot del database (Transact-SQL).

[!NOTA]

Il ripristino da uno snapshot causa l'eliminazione di tutti i cataloghi full-text.

USE master;  
RESTORE DATABASE AdventureWorks2012 FROM DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';
GO

Per ulteriori informazioni, vedere Ripristinare un database a uno snapshot del database.

[Torna all'inizio degli esempi]

Vedere anche

Riferimento

BACKUP (Transact-SQL)

RESTORE REWINDONLY (Transact-SQL)

RESTORE VERIFYONLY (Transact-SQL)

Concetti

Backup e ripristino di database SQL Server

Backup e ripristino di Database di sistema (SQL Server)

Backup e ripristino di indici e cataloghi full-text

Backup e ripristino di database replicati

Set di supporti, gruppi di supporti e set di backup (SQL Server)

Informazioni sulla cronologia e sull'intestazione del backup (SQL Server)