Ripristino di un database in una nuova posizione (SQL Server)
Si applica a: SQL Server
Questo articolo descrive come ripristinare un database di SQL Server in un nuovo percorso ed eventualmente rinominare il database in SQL Server usando SQL Server Management Studio (SSMS) o Transact-SQL. È possibile spostare un database in un nuovo percorso di directory o crearne una copia nella stessa istanza server o in una diversa.
Operazioni preliminari
Limitazioni e restrizioni
- L'amministratore di sistema che esegue il ripristino di un backup completo del database deve essere l'unico utente collegato al database.
Prerequisiti
Nel modello di recupero con registrazione completa o con registrazione minima delle operazioni bulk, prima di poter ripristinare un database, è necessario eseguire il backup del log delle transazioni attivo. Per altre informazioni, vedere Backup di un log delle transazioni (SQL Server).
Per ripristinare un database crittografato, è necessario poter accedere al certificato o alla chiave asimmetrica usata per crittografare il database. Non è possibile effettuare l'operazione di ripristino del database senza almeno uno di questi due elementi. Il certificato usato per crittografare la chiave di crittografia del database deve essere mantenuto finché è necessario il backup. Per altre informazioni, vedere SQL Server Certificates and Asymmetric Keys.
Consigli
Per altre considerazioni sullo spostamento di un database, vedere Copiare database tramite backup e ripristino.
Se si ripristina un database SQL Server 2005 (9.x) o versione successiva in SQL Server, il database viene aggiornato automaticamente. In genere, il database diventa subito disponibile. Se tuttavia un database di SQL Server 2005 (9.x) include 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 10 volte più lunga. Si noti inoltre che quando l'opzione di aggiornamento è impostata sull'importazione, gli indici full-text associati vengono ricompilati se non è disponibile un catalogo full-text. Per modificare l'impostazione della proprietà del server upgrade_option , usare sp_fulltext_service.
Sicurezza
Per motivi di sicurezza, è 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 del 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 contenuto nel database, ad esempio le stored procedure o altro codice definito dall'utente.
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.
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.
Ripristinare un database in un nuovo percorso e facoltativamente rinominare il database usando SSMS
Stabilire una connessione all'istanza appropriata del motore di database SQL Server, in Esplora oggetti selezionare il nome del server per espanderne l'albero.
Fare clic con il pulsante destro del mouse su Database e scegliere Ripristina database. Verrà visualizzata la finestra di dialogo Ripristina database .
Per specificare l'origine e il percorso dei set di backup da ripristinare, nella pagina Generale , utilizzare la sezione Origine . Selezionare una delle seguenti opzioni:
Database
Selezionare il database da ripristinare dall'elenco a discesa. Nell'elenco sono inclusi solo i database di cui è stato eseguito il backup in base alla cronologia dei backup di msdb .
Nota
Se il backup viene eseguito da un server diverso, il server di destinazione non disporrà delle informazioni della cronologia di backup per il database specificato. In questo caso, selezionare Dispositivo per specificare manualmente il file o il dispositivo da ripristinare.
Dispositivo
Selezionare il pulsante Sfoglia (...) per aprire la finestra di dialogo Seleziona dispositivi di backup. Nella casella Tipi di supporti di backup selezionare uno dei tipi di dispositivi elencati. Per selezionare uno o più dispositivi per la casella Supporti di backup, selezionare Aggiungi.
Dopo avere aggiunto i dispositivi desiderati nella casella di riepilogo Supporti di backup, selezionare OK per tornare alla pagina Generale.
Nella casella di riepilogo Origine: Dispositivo: Database selezionare il nome del database da ripristinare.
Nota Questo elenco è disponibile solo se si seleziona Dispositivo . Saranno disponibili solo i database che dispongono di backup sul dispositivo selezionato.
Nella sezione Destinazione , la casella Database viene popolata automaticamente con il nome del database da ripristinare. Per modificare il nome del database, immettere il nome nuovo nella casella Database .
Nella casella Ripristina fino a mantenere l'impostazione predefinita Ultimo backup eseguito oppure selezionare Cronologia per accedere alla finestra di dialogo Cronologia di backup e selezionare manualmente un momento specifico per arrestare l'azione di recupero. Per ulteriori informazioni sulla designazione di un momento specifico, vedere Backup Timeline .
Nella griglia Selezionare i set di backup da ripristinare selezionare i set di backup che si desidera ripristinare. In questa griglia vengono visualizzati i backup disponibili per il percorso specificato. Per impostazione predefinita, viene suggerito un piano di recupero. Per ignorare il piano di recupero suggerito, è possibile modificare le impostazioni selezionate nella griglia. I backup che dipendono dal ripristino di un backup precedente vengono automaticamente deselezionati quando il backup precedente è deselezionato.
Per informazioni sulle colonne nella griglia Selezionare i set di backup da ripristinare, vedere Ripristina database (pagina Generale).
Per specificare il nuovo percorso dei file di database, selezionare la pagina File, quindi selezionare Riloca tutti i file nella cartella. Fornire un nuovo percorso per Cartella file di dati e Cartella file di log. Per altre informazioni su questa griglia, vedere Ripristina database (pagina File).
Se lo si desidera, regolare le opzioni nella pagina Opzioni . Per altre informazioni su queste opzioni, vedere Ripristina database (pagina Opzioni).
Ripristinare un database in un nuovo percorso e facoltativamente rinominare il database usando T-SQL
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 <dispositivo_backup> WITH FILE = backup_set_file_number
Dove backup_set_file_number indica la posizione del backup nel set di supporti. È possibile ottenere la posizione di un set di backup utilizzando l'istruzione RESTORE HEADERONLY . Per altre informazioni, vedere Specifica di un set di backup.
Questa istruzione supporta inoltre diverse opzioni WITH. Per altre informazioni, vedere RESTORE FILELISTONLY (Transact-SQL).
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 altre informazioni su questi argomenti, vedere RESTORE (Transact-SQL).
new_database_name
Nuovo nome del database.
Nota
Se il database viene ripristinato in una diversa istanza del server, è 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 altre informazioni, vedere Dispositivi di backup (SQL Server).
{ 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 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 backup_set_file_number di un backup usando 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 altre informazioni, vedere "Specifica di un set di backup" in Argomenti 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. Nota: per ottenere un elenco dei file logici dal set di backup, usare RESTORE FILELISTONLY. |
operating_system_file_name | Specifica un nuovo percorso per il file indicato da logical_file_name_in_backup. Il file è 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 tramite cui viene indicata la possibilità di specificare istruzioni MOVE aggiuntive. |
Esempio (Transact-SQL)
In questo esempio viene creato un nuovo database denominato MyAdvWorks
ripristinando un backup del database di esempio AdventureWorks2022
in cui sono inclusi due file: AdventureWorks2022
_Data e AdventureWorks2022
_Log. In questo database viene utilizzato il modello di recupero con registrazione minima. Il database AdventureWorks2022
è già presente nell'istanza del server, pertanto i file del backup devono essere ripristinati in un nuovo percorso. L'istruzione RESTORE FILELISTONLY viene utilizzata per stabilire il numero e i nomi dei file del database da ripristinare. Il backup del database corrisponde al primo set disponibile sul dispositivo.
Nota
Gli esempi di backup e di ripristino del log delle transazioni, inclusi i ripristini temporizzati, utilizzano il database MyAdvWorks_FullRM
creato da AdventureWorks2022
esattamente come nell'esempio seguente basato su MyAdvWorks
. Tuttavia, è necessario modificare il database MyAdvWorks_FullRM
risultante per utilizzare il modello di recupero con registrazione completa tramite la seguente istruzione Transact-SQL: ALTER DATABASE <nome_database> SET RECOVERY FULL.
USE master;
GO
-- First determine the number and names of the files in the backup.
-- AdventureWorks2022_Backup is the name of the backup device.
RESTORE FILELISTONLY
FROM AdventureWorks2022_Backup;
-- Restore the files for MyAdvWorks.
RESTORE DATABASE MyAdvWorks
FROM AdventureWorks2022_Backup
WITH RECOVERY,
MOVE 'AdventureWorks2022_Data' TO 'D:\MyData\MyAdvWorks_Data.mdf',
MOVE 'AdventureWorks2022_Log' TO 'F:\MyLog\MyAdvWorks_Log.ldf';
GO
Per un esempio relativo alla creazione di un backup completo del database AdventureWorks2022
, vedere Creare un backup completo del database (SQL Server).