RESTORE (Transact-SQL)

Data aggiornamento: 12 dicembre 2006

Ripristina i backup eseguiti tramite il comando BACKUP. Questo comande consente di:

  • Ripristinare un intero database da un backup completo del database (ripristino completo).
  • Ripristinare parte di un database (ripristino parziale).
  • Ripristinare file, filegroup o pagine specifici in un database (ripristino di file o pagine).
  • 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 sul backup e il ripristino dei database, vedere Backup e ripristino di database in SQL Server.

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

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

--To restore a complete database from a full database backup (a Complete Restore):
RESTORE DATABASE { database_name | @database_name_var } 
[ FROM <backup_device> [ ,...n ] ]
[ WITH 
   [ { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] KEEP_REPLICATION ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
   [ [ , ] MEDIAPASSWORD = { mediapassword |
                    @mediapassword_variable } ] 
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
    [ [ , ] BLOCKSIZE = { blocksize | @blocksize_variable } ] 
    [ [ , ] BUFFERCOUNT = { buffercount | @buffercount_variable } ] 
   [ [ , ]    MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable } ] 
   [ [ , ] ENABLE_BROKER ] 
   [ [ , ] ERROR_BROKER_CONVERSATIONS ] 
   [ [ , ] NEW_BROKER ] 
   [ [ , ] { RECOVERY | NORECOVERY | STANDBY = 
          {standby_file_name | @standby_file_name_var } 
   } ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ] 
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [ = percentage ] ] 
    [ [ , ] { STOPAT = { 'date_time' | @date_time_var } 
    |  STOPATMARK = { 'lsn:lsn_number' }
              [ AFTER 'datetime' ] 
    |  STOPBEFOREMARK = { 'lsn:lsn_number' }
             [ AFTER 'datetime' ]
   } ] 
]
[;]

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

--Restore part of a database (a partial restore):
RESTORE DATABASE { database_name | @database_name_var } 
  <files_or_filegroups> [ ,...n ] 
 [ FROM <backup_device> [ ,...n ] ] 
 [ WITH 
     PARTIAL 
   [ [ , ] { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
   [ [ , ] MEDIAPASSWORD = { mediapassword |
                      @mediapassword_variable } ] 
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
   [ [ , ] NORECOVERY ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ]
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [=percentage ] ] 
   [ [ , ] { STOPAT = { 'date_time' | @date_time_var } 
    |  STOPATMARK = { 'lsn:lsn_number' }
              [ AFTER 'datetime' ] 
    |  STOPBEFOREMARK = { 'lsn:lsn_number' }
             [ AFTER 'datetime' ] 
   } ] 
]
[;]

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

--To Restore Specific Files, Filegroups, or Pages: 
RESTORE DATABASE { database_name | @database_name_var } 
     <file_or_filegroup_or_pages> [ ,...n ]
[ FROM <backup_device> [ ,...n ] ] 
[ WITH 
   [ { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 

   [ [ , ] MEDIAPASSWORD = { mediapassword |
                      @mediapassword_variable } ]
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
   [ [ , ] NORECOVERY ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ]
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [ =percentage ] ] 
]
[;]

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

<file_or_filegroup_or_pages> ::=
{ 
   FILE = { logical_file_name_in_backup | @logical_file_name_in_backup_var }
   | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } }
      | PAGE = 'file:page [ ,...n ]'  
} 

--To Restore a Transaction Log:
RESTORE LOG { database_name | @database_name_var } 
     [ <file_or_filegroup_or_pages> [ ,...n ] ]
[ FROM <backup_device> [ ,...n ] ] 
[ WITH 
   [ { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]
   [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ] 
   [ [ , ] KEEP_REPLICATION ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
   [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable }      ]
   [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
   [ [ , ] { RECOVERY | NORECOVERY | STANDBY = 
          {standby_file_name | @standby_file_name_var } }
   ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ]
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
   [ [ , ] STATS [=percentage ] ] 
   [ [ , ] { STOPAT = { 'date_time' | @date_time_var } 
    |  STOPATMARK = { 'mark_name' | 'lsn:lsn_number' }
              [ AFTER 'datetime' ] 
    |  STOPBEFOREMARK = { 'mark_name' | 'lsn:lsn_number' }
             [ AFTER 'datetime' ] 
   } ] 
]
[;]

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

<file_or_filegroup_or_pages> ::=
{ 
   FILE = { logical_file_name_in_backup | @logical_file_name_in_backup_var }
   | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } }
      | PAGE = 'file:page [ ,...n ]'  
} 

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

Argomenti

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

Osservazioni

Durante un ripristino non in linea, se il database specificato è in uso, l'istruzione RESTORE disconnette forzatamente gli 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, 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, l'istruzione RESTORE può essere impostata 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 Microsoft SQL Server 2005 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 temporaneo peggioramento delle prestazioni di esecuzione delle query. In SQL Server 2005 Service Pack 2 il log degli errori di SQL Server contiene il messaggio informativo seguente per ogni archivio cache cancellato nella cache dei piani: "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.

Scenari di ripristino

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

Compatibilità con le versioni precedenti

Per mantenere la compatibilità con le versioni precedenti, nella sintassi dell'istruzione RESTORE è possibile utilizzare le parole chiave seguenti:

  • La parola chiave LOAD in sostituzione della parola chiave RESTORE.
  • La parola chiave TRANSACTION in sostituzione della parola chiave LOG.
  • La parola chiave DBO_ONLY in sostituzione della parola chiave RESTRICTED_USER.

Database con il formato di archiviazione vardecimal

Le funzionalità di backup e ripristino supportano correttamente il formato di archiviazione vardecimal, ma è necessario aggiornare Motore di database almeno a SQL Server 2005 Service Pack 2. Non è possibile ripristinare il backup di un database compresso in un database non compresso. Non è inoltre supportato il ripristino di un backup di un database compresso della versione Service Pack 2 in una versione precedente di SQL Server. 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. Ciò consente la continuazione del rollforward con l'istruzione successiva nella sequenza.
    In questo caso, la sequenza di ripristino può 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 consistente con il database. Se non è stato eseguito il rollforward del set di rollforward fino al punto di renderlo consistente 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, ricominciando l'operazione file per file. Per ricominciare, ripristinare il file desiderato ed eseguire nuovamente il rollforward. Ad esempio, se 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

In SQL Server 2005, i dati full-text vengono ripristinati insieme agli altri dati del database durante un ripristino completo. Nelle operazioni di ripristino, i cataloghi full-text vengono gestiti come file. 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.

Per i dati full-text, l'istruzione RESTORE consente inoltre di eseguire ripristini in posizioni alternative, ripristini differenziali, ripristini di file e filegroup, nonché ripristini di file e filegroup differenziali. Inoltre, l'istruzione RESTORE supporta il ripristino di file full-text solo con i criteri validi per i dati di database.

[!NOTA] Non è possibile ripristinare un catalogo full-text nella directory principale.

Per ulteriori informazioni, vedere Backup e ripristino di cataloghi full-text.

Impostazioni del database e ripristino

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

[!NOTA] Questo comportamento rappresenta una differenza rispetto alle versioni di SQL Server precedenti a SQL Server 2000.

Se si utilizza l'opzione WITH RESTRICTED_USER, tuttavia, questo funzionamento viene ignorato per l'impostazione dell'opzione di accesso dell'utente. Tale 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

A partire da SQL Server 2005, è 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 per l'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 transazioni di massa, in SQL Server 2005 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 non includa la clausola WITH REPLACE o WITH STOPAT. 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.

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, una novità in SQL Server 2005, consente di migliorare le funzionalità di ripristino parziale di Microsoft SQL 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 in varie fasi e in momenti diversi, il ripristino a fasi include controlli per garantire la consistenza finale del database.

[!NOTA] In SQL Server 2000 è possibile eseguire un ripristino parziale solo da un backup completo del database. Questa restrizione non è più presente in SQL Server 2005.

Per ulteriori informazioni, vedere Esecuzione di ripristini a fasi.

Ripristino di un database con uno snapshot del database

L'operazione di ripristino del database da uno snapshot (specificata con l'opzione DATABASE_SNAPSHOT) consente di portare un database di origine completo in un momento anteriore nel tempo tramite il ripristino di uno snapshot del database, ovvero sovrascrivendo il database di origine con i dati del punto nel tempo mantenuto 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 sarà 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 sono gli stessi esistenti al momento della creazione dello snapshot. Tuttavia, il ripristino da uno snapshot causa l'eliminazione di tutti i cataloghi full-text.

Il ripristino da uno snapshot del database non è adatto per il recupero di supporti. Diversamente da un set di backup regolare, lo snapshot del database rappresenta una copia incompleta dei file di 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 solo filegroup di sola lettura o compressi.
  • I 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 2005. Tuttavia, i supporti protetti con password possono essere sovrascritti con l'opzione FORMAT dell'istruzione BACKUP.

ms186858.security(it-it,SQL.90).gifNota 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 2005. Non impedisce la lettura dei dati di backup eseguita con altri mezzi o la sostituzione della password. 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 appropriati. Gli elenchi di controllo di accesso devono essere impostati a livello della directory principale 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 2005. Adventure Works Cycles è un'azienda manifatturiera fittizia utilizzata per esemplificare concetti e scenari relativi ai database. Per ulteriori informazioni su questo database, vedere Esempi e database di esempio.

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 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 dalla periferica di backup logica AdventureWorksBackups. Per un esempio della creazione di questa periferica, vedere Periferiche 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 transazioni di massa, in SQL Server 2005 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 dalla periferica di backup Z:\SQLServerBackups\AdventureWorks.bak, che li contiene entrambi. Il backup completo del database da ripristinare rappresenta il sesto set di backup (FILE = 6), mentre il backup differenziale del database rappresenta il nono set di backup nella periferica (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\MSSQL.1\MSSQL\Data.

RESTORE DATABASE AdventureWorks
   FROM AdventureWorksBackups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\NewAdvWorks.mdf', 
      MOVE 'AdventureWorks_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\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. Ripristino temporizzato tramite STOPAT

Nell'esempio seguente viene ripristinato lo stato del database corrispondente alle ore 12:00 AM del giorno April 15, 2020. Viene inoltre illustrata un'operazione di ripristino di più log e con più periferiche di backup.

RESTORE DATABASE AdventureWorks
   FROM AdventureWorksBackups
   WITH NORECOVERY;

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

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

[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 una periferica 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 del set di supporti in una periferica di backup logica denominata MyDatabaseBackups. Vengono quindi ripristinati tre backup del log, disponibili nei tre set di backup successivi (10, 11 e 12) nella periferica MyDatabaseBackups, utilizzando WITH NORECOVERY. Dopo il ripristino dell'ultimo backup del log, viene recuperato il database.

[!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 della periferica 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 sulla 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]

Vedere anche

Riferimento

BACKUP (Transact-SQL)
RESTORE REWINDONLY (Transact-SQL)
RESTORE VERIFYONLY (Transact-SQL)

Altre risorse

Backup e ripristino di cataloghi full-text
Backup e ripristino dei database replicati
Implementazione degli scenari di ripristino per database di SQL Server
Set di supporti, gruppi di supporti e set di backup
Informazioni sul funzionamento dei processi di ripristino e recupero dei backup in SQL Server
Visualizzazione di informazioni sui backup

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

12 dicembre 2006

Nuovo contenuto:
  • Aggiunta delle opzioni BLOCKSIZE, BUFFERCOUNT e MAXTRANSFERSIZE alla sezione della sintassi.
  • Correzione della sintassi di STOPATMARK e STOPBEFOREMARK per RESTORE DATABASE.
  • Aggiunta alla sezione Osservazioni di informazioni sul ripristino di database di SQL Server 2005 Service Pack 2 per i quali è attivato il formato di archiviazione vardecimal.
  • Aggiunta alla sezione Osservazioni di un paragrafo sulla cancellazione della cache dei piani.
Contenuto modificato:
  • Correzione della sintassi di STOPAT, STOPATMARK e STOPBEFOREMARK.

14 aprile 2006

Contenuto modificato:
  • Chiarimento della restrizione relativa allo snapshot del database per i file non in linea.
  • Modifica della sintassi del nome logico di un file di cui è stato eseguito il backup dal nome di variabile logical_file_name a logical_file_name_in_backup.