Procedura: Ripristino di un database con un nuovo nome e una nuova posizione (Transact-SQL)

In questo argomento viene descritta la procedura per il ripristino del backup completo di un database in un nuovo percorso e, facoltativamente, con un nuovo nome. Questa procedura consente di spostare o creare una copia di un database nella stessa istanza server o in una diversa. Per ulteriori considerazioni sullo spostamento di un database, vedere Copia di database tramite backup e ripristino.

Prerequisiti e indicazioni

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

  • Per motivi di protezione, è consigliabile non collegare o ripristinare database da origini sconosciute o non attendibili. Tali database possono contenere codice dannoso che potrebbe eseguire codice Transact-SQL indesiderato o causare errori modificando lo schema o la struttura fisica di database. Prima di utilizzare un database da un'origine sconosciuta o non attendibile, eseguire DBCC CHECKDB sul database in un server non di produzione ed esaminare il codice, ad esempio le stored procedure o altro codice definito dall'utente, nel database.

Livello di compatibilità del database dopo l'aggiornamento

I livelli di compatibilità dei database tempdb, model, msdb e Resource sono impostati su 100 dopo l'aggiornamento. Il database di sistema master mantiene il livello di compatibilità che aveva prima dell'aggiornamento, a condizione che tale livello non sia minore di 80. Se il livello di compatibilità di master è minore di 80 prima dell'aggiornamento, viene impostato su 80 dopo l'aggiornamento.

Se il livello di compatibilità di un database utente è 80 o 90 prima dell'aggiornamento, rimane invariato dopo l'aggiornamento. Se il livello di compatibilità è 70 o meno prima dell'aggiornamento, nel database aggiornato viene impostato su 80, ovvero sul livello di compatibilità supportato più basso in SQL Server 2008.

[!NOTA]

I nuovi database utente erediteranno il livello di compatibilità del database model.

Procedure

Per ripristinare un database in un nuovo percorso e con un nuovo nome

  1. Facoltativamente, determinare i nomi logici e fisici dei file del set di backup che contiene il backup di database completo da ripristinare. Questa istruzione restituisce un elenco dei file di database e di log contenuti nel set di backup. La sintassi di base è la seguente:

    RESTORE FILELISTONLY FROM <backup_device> WITH FILE = backup_set_file_number

    [!NOTA]

    È possibile ottenere il valore di backup_set_file_number di un set di backup utilizzando l'istruzione RESTORE HEADERONLY.

    Questa istruzione supporta inoltre alcune opzioni WITH. Per ulteriori informazioni, vedere RESTORE FILELISTONLY (Transact-SQL).

  2. Eseguire l'istruzione RESTORE DATABASE per ripristinare il backup di database completo. Per impostazione predefinita, i file di dati e di log vengono ripristinati nei percorsi originali. Per modificare il percorso di un database, utilizzare l'opzione MOVE per spostare ogni file di database e per evitare conflitti con i file esistenti.

    La sintassi Transact-SQL di base per il ripristino del database in un nuovo percorso e con un nuovo nome è la seguente:

    RESTORE DATABASE new_database_name

    FROM backup_device [ ,...n ]

    [ WITH

       {

            [ RECOVERY | NORECOVERY ]

       [ , ] [ FILE ={ backup_set_file_number | @backup\_set\_file\_number } ]

       [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' [ ,...n ]

       }

    ;

    [!NOTA]

    Quando si prepara lo spostamento di un database in un disco diverso, è necessario verificare che lo spazio disponibile sia sufficiente e identificare potenziali conflitti con i file esistenti. A tale scopo, utilizzare un'istruzione RESTORE VERIFYONLY che specifica gli stessi parametri MOVE che si intende utilizzare nell'istruzione RESTORE DATABASE.

    Nella tabella seguente vengono descritti argomenti di questa istruzione RESTORE ai fini del ripristino di un database in un nuovo percorso. Per ulteriori informazioni su questi argomenti, vedere RESTORE (Transact-SQL).

    • new_database_name
      Nuovo nome del database.

      [!NOTA]

      Se il database viene ripristinato in un'istanza del server diversa, è possibile utilizzare il nome di database originale anziché uno nuovo.

    • backup_device [ ,...n ]
      Specifica un elenco di dispositivi di backup, da 1 a 64, delimitati da virgole da cui deve essere ripristinato il backup del database. È possibile specificare un dispositivo di backup fisico oppure un dispositivo di backup logico corrispondente, se già definito. Per specificare un dispositivo di backup fisico, utilizzare l'opzione DISK o TAPE:

      { DISK | TAPE } **=**physical_backup_device_name

      Per ulteriori informazioni, vedere Dispositivi di backup.

    • { RECOVERY | NORECOVERY }
      Se per il database si utilizza il modello di recupero con registrazione completa, può essere necessario applicare i backup del log delle transazioni dopo il ripristino del database. In questo caso, specificare l'opzione NORECOVERY.

      In caso contrario, utilizzare l'opzione RECOVERY (impostazione predefinita).

    • FILE = { backup_set_file_number | @backup\_set\_file\_number }
      Identifica il set di backup da ripristinare. Il valore 1 per backup_set_file_number, ad esempio, indica il primo set di backup nel supporto di backup, mentre il valore 2 per backup_set_file_number indica il secondo set di backup. È possibile ottenere il valore di backup_set_file_number di un set di backup utilizzando l'istruzione RESTORE HEADERONLY.

      Se questa opzione non è specificata, per impostazione predefinita viene utilizzato il primo set di backup disponibili sul dispositivo di backup.

      Per ulteriori informazioni, vedere "Specifica di un set di backup" nell'argomento Argomenti dell'istruzione RESTORE (Transact-SQL).

    • MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' [ ,...n ]
      Specifica che il file di dati o di log specificato da logical_file_name_in_backup deve essere ripristinato nel percorso specificato da operating_system_file_name. Specificare un'istruzione MOVE per ogni file logico che si desidera ripristinare dal set di backup in un nuovo percorso.

      Opzione

      Descrizione

      logical_file_name_in_backup

      Specifica il nome logico di un file di dati o di log da includere nel set di backup. Il nome di file logico di un file di dati o di log in un set di backup corrisponde al relativo nome logico nel database al momento della creazione del set di backup.

      NotaNota
      Per ottenere un elenco dei file logici del set di backup, utilizzare RESTORE FILELISTONLY.

      operating_system_file_name

      Specifica un nuovo percorso per il file indicato da logical_file_name_in_backup. Il file verrà ripristinato a questo percorso.

      Facoltativamente, operating_system_file_name specifica un nuovo nome per il file ripristinato. Questo passaggio è necessario se si crea una copia di un database esistente nella stessa istanza del server.

      n

      Segnaposto che indica la possibilità di specificare istruzioni MOVE aggiuntive.

[!NOTA]

Dopo il ripristino di 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. Si noti inoltre che quando l'opzione di aggiornamento è impostata sull'importazione, gli indici full-text associati vengono ricostruiti se non è disponibile un catalogo full-text. Per modificare l'impostazione della proprietà del server upgrade_option, utilizzare sp_fulltext_service.

Esempio

Descrizione

In questo esempio viene creato un nuovo database denominato MyAdvWorks. MyAdvWorks è una copia del database AdventureWorks esistente che include due file: AdventureWorks_Data e AdventureWorks_Log. Per il database si utilizza il modello di recupero con registrazione minima. Il database AdventureWorks esiste già nell'istanza del server, pertanto i file del backup devono essere ripristinati in un nuovo percorso. L'istruzione RESTORE FILELISTONLY consente di determinare il numero e i nomi dei file del database da ripristinare. Il backup del database corrisponde al primo set disponibile sul dispositivo.

[!NOTA]

Per un esempio relativo alla creazione di un backup completo del database AdventureWorks, vedere Procedura: Creazione di un backup completo del database (Transact-SQL).

[!NOTA]

Gli esempi di backup e di ripristino del log delle transazioni, inclusi i ripristini temporizzati, utilizzano il database MyAdvWorks_FullRM creato da AdventureWorks esattamente come nell'esempio seguente basato su MyAdvWorks. È tuttavia necessario che il database MyAdvWorks_FullRM risultante sia modificato in modo da utilizzare il modello di recupero con registrazione completa, ALTER DATABASE MyAdvWorks_FullRM SET RECOVERY FULL.

Codice

USE master
GO
-- First determine the number and names of the files in the backup.
-- AdventureWorks_Backup is the name of the backup device.
RESTORE FILELISTONLY
   FROM AdventureWorks_Backup
-- Restore the files for MyAdvWorks.
RESTORE DATABASE MyAdvWorks
   FROM AdventureWorks_Backup
   WITH RECOVERY,
   MOVE 'AdventureWorks_Data' TO 'D:\MyData\MyAdvWorks_Data.mdf', 
   MOVE 'AdventureWorks_Log' TO 'F:\MyLog\MyAdvWorks_Log.ldf'
GO