Condividi tramite


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

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 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 Microsoft SQL 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 registro 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 R2, 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

Dopo il ripristino di un database di SQL Server 2005 o SQL Server 2000 in SQL Server 2008 R2, il database viene reso immediatamente disponibile e viene quindi aggiornato automaticamente. Se nel database 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 per l'importazione (upgrade_option = 2) o la 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 fino a dieci volte più lunga. Quando l'opzione di aggiornamento è impostata per l'importazione, gli indici full-text associati vengono ricompilati 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

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

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 eseguire 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 un catalogo full-text di SQL Server 2008 nella documentazione online di SQL Server 2005.

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 è 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 si verifica 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 sui backup della parte finale del log, vedere Backup della parte finale del log.

Ripristino online

Nota

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

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

Nota

I ripristini online 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 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 offline e non sono accessibili. I filegroup offline, 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 ha esito positivo e il filegroup FILESTREAM non può più essere recuperato.

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 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 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 online al momento della creazione dello snapshot sono offline.

  • 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 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 sicurezzaNota sulla sicurezza

Il livello di protezione garantito da questa password è vulnerabile. Lo scopo è impedire un ripristino non corretto da parte di utenti autorizzati o non autorizzati mediante gli strumenti di SQL Server. Non impedisce la lettura dei dati di backup eseguita con altri mezzi o la sostituzione della password. Questa caratteristica 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 nella radice della directory in cui vengono creati i backup.

Esempi

Nota

Il database AdventureWorks2008R2 viene utilizzato esclusivamente a scopo illustrativo. AdventureWorks2008R2 è 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 AdventureWorks2008R2.

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 logicoAdventureWorks2008R2Backups. Per un esempio della creazione di questo dispositivo, vedere Dispositivi di backup.

RESTORE DATABASE AdventureWorks2008R2 
   FROM AdventureWorks2008R2Backups

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\AdventureWorks2008R2.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 AdventureWorks2008R2
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2.bak'
   WITH FILE = 6
      NORECOVERY;
RESTORE DATABASE AdventureWorks2008R2
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2.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 AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
-- Here is the RESTORE RESTART operation.
RESTORE DATABASE AdventureWorks2008R2 
   FROM AdventureWorks2008R2Backups 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_50.MSSQLSERVER\MSSQL\Data.

RESTORE DATABASE AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks2008R2_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\NewAdvWorks2008R2.mdf', 
      MOVE 'AdventureWorks2008R2_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\NewAdvWorks2008R2.ldf'
RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   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 AdventureWorks2008R2. 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 AdventureWorks2008R2 
   TO AdventureWorks2008R2Backups ;

RESTORE FILELISTONLY 
   FROM AdventureWorks2008R2Backups ;

RESTORE DATABASE TestDB 
   FROM AdventureWorks2008R2Backups 
   WITH MOVE 'AdventureWorks2008R2_Data' TO 'C:\MySQLServer\testdb.mdf',
   MOVE 'AdventureWorks2008R2_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, AdventureWorks2008R2Backups, 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 AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   WITH FILE=3, NORECOVERY;

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

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

RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups 
   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 AdventureWorks2008R2 
   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 AdventureWorks2008R2 FROM DATABASE_SNAPSHOT = 'AdventureWorks2008R2_dbss1800';
GO

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

[Torna all'inizio degli esempi]