RESTORE (Transact-SQL)

Ripristina i backup eseguiti tramite il comando BACKUP. Questo comando consente di eseguire 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) e Implementazione degli scenari di ripristino per database di SQL Server.

[!NOTA]

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

Icona di collegamento a un argomentoConvenzioni 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>
      | , <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

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

Osservazioni

Non è possibile ripristinare il backup di un database compresso in un database non compresso.

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

Per ulteriori informazioni sul recupero di database, vedere Informazioni sul funzionamento dei processi di ripristino e recupero dei backup in SQL Server e Implementazione degli scenari di ripristino per database di 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). Per ulteriori informazioni, vedere Risposta agli errori di ripristino di SQL Server provocati da backup danneggiati.

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

Il ripristino di un database master danneggiato viene eseguito tramite una procedura speciale. Per ulteriori informazioni, vedere Considerazioni sul ripristino del Database master.

Non è possibile ripristinare i backup creati con MicrosoftSQL Server in una versione precedente di 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 tutta la durata dello scaricamento della cache.

Per eseguire il ripristino in SQL Server 2008, la versione del database ripristinato deve essere almeno la 80 (SQL Server 2000). Per i database di SQL Server 2000 o SQL Server 2005 con un livello di compatibilità inferiore a 80, al momento del ripristino viene impostato il livello di compatibilità 80.

[!NOTA]

Una volta ripristinato un database di SQL Server 2005 o SQL Server 2000 in SQL Server 2008, il database viene reso immediatamente disponibile e viene quindi aggiornato automaticamente. Se il database include indici full-text, questi vengono importati, reimpostati o ricostruiti 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 ricostruzione (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 ricostruzione può risultare dieci volte più lunga. Quando l'opzione di aggiornamento è impostata per l'importazione, gli indici full-text associati vengono ricostruiti se non è disponibile alcun catalogo full-text. Per modificare l'impostazione della proprietà del server upgrade_option, utilizzare sp_fulltext_service.

Scenari di ripristino

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

Parole chiave RESTORE obsolete

In SQL Server 2008 le parole chiave seguenti sono obsolete:

Parola chiave obsoleta

Sostituita da...

Esempio di parola chiave di sostituzione

LOAD

RESTORE

RESTORE DATABASE

TRANSACTION

LOG

RESTORE LOG

DBO_ONLY

RESTRICTED_USER

RESTORE DATABASE ... WITH RESTRICTED_USER

Requisiti per il ripristino di un database crittografato

Per ripristinare un database crittografato, è necessario disporre di accesso alla chiave asimmetrica o al certificato utilizzato per eseguirne la crittografia. 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.

Database abilitati per il formato di archiviazione vardecimal

Il backup e il ripristino funzionano correttamente con il formato di archiviazione vardecimal. Per ulteriori informazioni sul formato di archiviazione vardecimal, vedere Archiviazione di dati decimal come lunghezza variabile.

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, il Motore di database genera un errore.

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 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 o SQL Server 2000 vengono 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 cataloghi full-text di SQL Server 2008 nella documentazione in linea di SQL Server 2005.

Impostazioni e ripristino del database

Durante il ripristino, la maggior parte delle opzioni di database che è possibile impostare con ALTER DATABASE viene reimpostata sui valori attivi al momento della fine del backup.

[!NOTA]

Questo comportamento è diverso rispetto alle versioni di SQL Server precedenti a SQL Server 2000.

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 che include l'opzione WITH RESTRICTED_USER.

Tabelle di cronologia di backup e ripristino

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 esegue un'operazione di ripristino, vengono modificate anche le tabelle di cronologia di backup. Per informazioni su tali tabelle, vedere Visualizzazione di informazioni sui backup.

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 verrà generato un errore, a meno che l'istruzione RESTORE DATABASE non includa la clausola WITH REPLACE o WITH STOPAT, che deve specificare l'ora o la transazione verificatasi al termine del backup dei dati. Per ulteriori informazioni sul backup della parte finale del log, vedere Backup della parte finale del log.

Ripristino in linea

[!NOTA]

Il ripristino in linea è consentito solo in SQL Server 2005 Enterprise Edition e versioni successive.

Se il ripristino in linea è supportato e il database è in linea, i ripristini di file e pagine vengono eseguiti automaticamente in linea, così come i ripristini di filegroup secondari dopo la fase iniziale di un ripristino a fasi.

[!NOTA]

I ripristini in linea possono includere transazioni posticipate.

Per ulteriori informazioni, vedere Esecuzione di ripristini in linea.

Ripristino a fasi

Il ripristino a fasi, introdotto in SQL Server 2005, consente di migliorare le funzionalità di ripristino parziale di MicrosoftSQL Server 2000. Il ripristino a fasi consente di ripristinare i filegroup dopo l'esecuzione di un ripristino iniziale parziale del filegroup primario e di alcuni dei filegroup secondari. I filegroup non ripristinati vengono contrassegnati come non in linea e non sono accessibili. I filegroup non in linea, tuttavia, possono essere ripristinati in seguito con un ripristino di file. Per consentire il ripristino dell'intero database a fasi in momenti diversi, il ripristino a fasi include controlli per garantire la coerenza finale del database.

[!NOTA]

In SQL Server 2000 è possibile eseguire un ripristino parziale solo da un backup completo del database. Questa restrizione è stata rimossa in SQL Server 2005.

Se una sequenza di ripristino parziale esclude qualsiasi filegroup FILESTREAM, il ripristino temporizzato non è supportato. È possibile forzare la continuazione della sequenza di ripristino. Tuttavia i filegroup FILESTREAM omessi dall'istruzione RESTORE non potranno più essere ripristinati. Per forzare un ripristino temporizzato, specificare l'opzione CONTINUE_AFTER_ERROR insieme all'opzione STOPAT, STOPATMARK o STOPBEFOREMARK che è necessario specificare anche nelle istruzioni RESTORE LOG successive. Se si specifica CONTINUE_AFTER_ERROR, la sequenza di ripristino parziale riesce e il filegroup FILESTREAM diviene irrecuperabile.

Per ulteriori informazioni sul ripristino a fasi, vedere Esecuzione di ripristini a fasi.

Ripristino di un database in 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 ricostruzione 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 dopo la 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 da uno snapshot del database non è adatto per il recupero di 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.

Restrizioni per il ripristino da snapshot

Il ripristino da snapshot non è supportato nei casi seguenti:

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

  • Alcuni file in linea al momento della creazione dello snapshot non sono più in linea.

  • Sono disponibili più snapshot del database.

Per ulteriori informazioni, vedere Ripristino di uno snapshot del database.

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.

Per un'operazione di backup è possibile specificare facoltativamente 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, la password o le password corrette devono essere specificate 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 protezioneNota sulla protezione

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 caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità 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 protetto 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.

Esempi

[!NOTA]

Il database AdventureWorks viene utilizzato esclusivamente a scopo illustrativo. AdventureWorks è uno dei database di esempio disponibili in SQL Server. Adventure Works Cycles è un'azienda manifatturiera fittizia utilizzata per esemplificare concetti e scenari relativi ai database. Per ulteriori informazioni su questo database, vedere Database di esempio AdventureWorks.

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. Recupero 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 Esempi di sequenze di ripristino in scenari diversi e le procedure di ripristino illustrate in Procedure per il backup e il ripristino (Transact-SQL).

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 AdventureWorks 
   FROM AdventureWorksBackups

[!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.

[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\AdventureWorks.bak, che li contiene entrambi. 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 AdventureWorks
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks.bak'
   WITH FILE = 6
      NORECOVERY;
RESTORE DATABASE AdventureWorks
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks.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 AdventureWorks
   FROM AdventureWorksBackups
-- Here is the RESTORE RESTART operation.
RESTORE DATABASE AdventureWorks 
   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\MSSQL10.MSSQLSERVER\MSSQL\Data.

RESTORE DATABASE AdventureWorks
   FROM AdventureWorksBackups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\NewAdvWorks.mdf', 
      MOVE 'AdventureWorks_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\NewAdvWorks.ldf'
RESTORE LOG AdventureWorks
   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 AdventureWorks. 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 AdventureWorks 
   TO AdventureWorksBackups ;

RESTORE FILELISTONLY 
   FROM AdventureWorksBackups ;

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

[Torna all'inizio degli esempi]

F. Recupero 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 AdventureWorks
   FROM AdventureWorksBackups
   WITH FILE=3, NORECOVERY;

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

RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups
   WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';
RESTORE DATABASE AdventureWorks 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 AdventureWorks
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 AdventureWorks
FROM AdventureWorksBackups
WITH FILE = 3, NORECOVERY;
GO

RESTORE LOG AdventureWorks
   FROM AdventureWorksBackups 
   WITH FILE = 4,
   RECOVERY, 
   STOPATMARK = 'ListPriceUpdate';

[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 AdventureWorks 
   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]

J. 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 Procedura: Creazione di 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 AdventureWorks FROM DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';
GO

Per ulteriori informazioni, vedere Ripristino di uno snapshot del database.

[Torna all'inizio degli esempi]