Se utilizzi SQL Server Management Studio (SSMS) o un'altra GUI per gestire i database, potresti essere abituato a eseguire il backup e il ripristino dei database utilizzando "punta e fai clic".
Di solito ciò comporta il clic con il pulsante destro del mouse sul database e la selezione di Ripristina o simili, quindi seguendo le istruzioni (ad esempio, durante il ripristino di un database in Azure Data Studio).
Ma se hai bisogno di farlo con T-SQL, puoi usare il RESTORE DATABASE
dichiarazione.
Esempio
Ecco un esempio di base:
RESTORE DATABASE World
FROM DISK = N'/var/opt/mssql/Bak/World.bak'
WITH FILE = 1;
Questo è quasi il più semplice possibile. Il RESTORE DATABASE
ha una sintassi piuttosto complessa (come con la maggior parte delle cose T-SQL), ma questa istruzione è sufficiente per un'operazione di ripristino predefinita di base.
In questo caso, ho ripristinato un database chiamato World da un file .bak. Ho usato FROM DISK
per specificare che proveniva da un file .bak e ho fornito il percorso completo di quel file. Altre opzioni qui includono FROM TAPE
e FROM URL
.
Ho incluso anche WITH FILE = 1
qui ma questo è comunque il valore predefinito. Questa clausola specifica il numero di file del set di backup da utilizzare. Ovvero, quale set di backup utilizzare nel file (un file può avere più set di backup).
Ottieni un elenco di set di backup
Puoi usare RESTORE HEADERONLY
per ottenere un elenco di set di backup nel file. Più specificamente, restituisce un set di risultati di informazioni sull'intestazione del backup per tutti i set di backup.
Esempio:
RESTORE HEADERONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';
Questo restituisce molte colonne, quindi non le presenterò tutte qui.
Una delle colonne si chiama Posizione . Questo deve essere utilizzato con il FILE =
opzione durante il ripristino del database.
Esempio con più opzioni
Ecco un esempio con più opzioni:
RESTORE DATABASE [WideWorldImporters]
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak'
WITH FILE = 1,
MOVE N'WWI_Primary' TO N'/var/opt/mssql/data/WideWorldImporters.mdf',
MOVE N'WWI_UserData' TO N'/var/opt/mssql/data/WideWorldImporters_UserData.ndf',
MOVE N'WWI_Log' TO N'/var/opt/mssql/data/WideWorldImporters.ldf',
MOVE N'WWI_InMemory_Data_1' TO N'/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1',
NOUNLOAD,
STATS = 5;
Questo è in realtà lo script che Azure Data Studio ha generato per me quando ho usato l'interfaccia della GUI per avviare un'operazione di ripristino. Quando lo fai, Azure Data Studio ti offre la possibilità di eseguire immediatamente il ripristino o di generare uno script con il codice T-SQL che puoi eseguire in seguito.
In questo caso, lo script utilizza MOVE
argomento per spostare ogni nome di file logico nel file di backup nel percorso del file fisico specificato sul sistema operativo. In questo caso, il file .bak utilizzava una diversa posizione del file fisico (e utilizzava i percorsi dei file di Windows) e quindi questo doveva cambiare per adattarsi al mio sistema. Vedi sotto per una spiegazione su come ottenere queste informazioni.
Il NOUNLOAD
è in realtà un'opzione nastro. Garantisce che il nastro non venga scaricato dall'unità una volta completato il ripristino. Dato che non stavo ripristinando dal nastro, questa opzione è stata ignorata.
Le STATS
argomento consente di valutare l'avanzamento dell'operazione di ripristino. Specifica che verrà visualizzato un messaggio ogni volta che viene completata un'altra percentuale. Se non includi un valore percentuale qui, SQL Server visualizzerà un messaggio dopo che ogni 10% è stato completato.
RIPRISTINA SOLO FILELIST
Se si desidera creare un'istruzione come quella precedente, che utilizza il MOVE
argomento per spostare ogni nome di file logico nel file di backup, nella posizione del file fisico specificato sul sistema operativo, puoi usare RESTORE FILELISTONLY
per restituire i nomi dei file logici (e altro).
RESTORE FILELISTONLY
restituisce un set di risultati contenente un elenco del database e dei file di registro contenuti nel set di backup.
Ecco un esempio che utilizza lo stesso file .bak WideWorldImporters dell'esempio precedente:
RESTORE FILELISTONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';
Risultato (usando l'output verticale):
-[ RECORD 1 ]------------------------- LogicalName | WWI_Primary PhysicalName | D:\Data\WideWorldImporters.mdf Type | D FileGroupName | PRIMARY Size | 1073741824 MaxSize | 35184372080640 FileId | 1 CreateLSN | 0 DropLSN | 0 UniqueId | 8d30f4f9-a463-404f-805a-9bd1c634b66b ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 11993088 SourceBlockSize | 512 FileGroupId | 1 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 2 ]------------------------- LogicalName | WWI_UserData PhysicalName | D:\Data\WideWorldImporters_UserData.ndf Type | D FileGroupName | USERDATA Size | 2147483648 MaxSize | 35184372080640 FileId | 3 CreateLSN | 37000000095200001 DropLSN | 0 UniqueId | 28d406e0-78ff-4400-9a4b-3a05d136b1f3 ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 434962432 SourceBlockSize | 512 FileGroupId | 2 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 3 ]------------------------- LogicalName | WWI_Log PhysicalName | E:\Log\WideWorldImporters.ldf Type | L FileGroupName | NULL Size | 104857600 MaxSize | 2199023255552 FileId | 2 CreateLSN | 0 DropLSN | 0 UniqueId | 6ac6807e-8774-415b-8efc-e8c569b0855e ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 0 SourceBlockSize | 512 FileGroupId | 0 LogGroupGUID | NULL DifferentialBaseLSN | 0 DifferentialBaseGUID | 00000000-0000-0000-0000-000000000000 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 4 ]------------------------- LogicalName | WWI_InMemory_Data_1 PhysicalName | D:\Data\WideWorldImporters_InMemory_Data_1 Type | S FileGroupName | WWI_InMemory_Data Size | 0 MaxSize | 0 FileId | 65537 CreateLSN | 624000000336200003 DropLSN | 0 UniqueId | f65663c8-a250-433e-bbe6-e13a5599a607 ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 980090880 SourceBlockSize | 512 FileGroupId | 3 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL
Quindi possiamo vedere che le posizioni fisiche di questo file utilizzano i percorsi dei file di Windows. Ad esempio, il primo (con un nome logico di WWI_Primary ) ha una posizione fisica di D:\Data\WideWorldImporters.mdf .
Nel mio caso, ho ripristinato il database su SQL Server per Linux (in esecuzione in un contenitore Docker sul mio Mac), quindi quando ho ripristinato questo file .bak sul mio sistema, ho dovuto modificare i percorsi fisici per adattarli al mio sistema.
Naturalmente, se necessario, puoi anche modificare i percorsi dei file durante il ripristino su un computer Windows.
La sintassi completa
Il backup e il ripristino dei database possono essere piuttosto complicati, a seconda delle tue esigenze. Il RESTORE
istruzione è progettata per coprire molti scenari diversi. In particolare, copre i seguenti scenari di ripristino:
- Ripristina un intero database da un backup completo del database (un ripristino completo).
- Ripristina parte di un database (ripristino parziale).
- Ripristina file o filegroup specifici in un database (ripristino file).
- Ripristina pagine specifiche su un database (ripristino di una pagina).
- Ripristina un registro delle transazioni su un database (ripristino del registro delle transazioni).
- Ripristina un database al momento acquisito da un'istantanea del database.
La sintassi completa contiene molte opzioni, quindi se i tuoi requisiti eccedono lo scopo di questo articolo, controlla la documentazione Microsoft per il RESTORE
ufficiale sintassi e spiegazione.
Leggi anche la Panoramica di ripristino e ripristino di Microsoft per una panoramica delle varie considerazioni e approcci per il ripristino dei database.