Comandi Transact-SQL per il backup e il restore
SQL Server - Backup and restore

PER CONTROLLARE LA CONSISTENZA DEL DATABASE ...

... è consigliabile utilizzare il comando DBCC:

DBCC {
CHECKALLOC [(nome_database)] |
CHECKCATALOG [(nome_database)] |
CHECKTABLE [(nome_tabella)] |
CHECKDB [(nome_database)] |
NEWALLOC [(nome_database)]
}
Tale comando consente di controllare la consistenza logica e fisica di un database, controlla l'uso di memoria, diminuisce la dimensione di un database, ecc. Per tale comando consideriamo solo alcune parametri:

nome_database
è il nome del database in cui si vuol far eseguire il comando

nome_tabella
è il nome della tabella da usare

CHECKALLOC [(nome_database)]
controlla il database specificato per verificare che tutte le pagine siano allocate correttamente ed usate; se non si mette il nome del database, viene controllato il database corrente; tale comando restituisce anche l'ammontare dello spazio allocato e usato

CHECKCATALOG [(nome_database)]
controlla la consistenza dentro e tra le tabelle di sistema

CHECKTABLE [(nome_tabella)]
controlla la tabella specificata per vedere se gli indici e le pagine dei dati siano correttamente lincati, che gli indici siano in ordine di sort appropriato, che tutti i puntatori siano consistenti, che le informazioni su ogni pagina sia ragionevole; se il segmento di log è su una device a parte, eseguendo DBCC CHECKTABLE sulla tabella syslogs si ha come risultato il ritorno delle informazioni relative all'uso del log e lo spazio libero

CHECKDB [(nome_database)]
esegue gli stessi controlli della CHECKTABLE, ma su tulle le tabelle del database specificato; se non è esplicitato il nome del database viene considerato quello corrente

NEWALLOC [(nome_database)]
controlla le pagine degli indici e dei dati confrontando le strutture esistenti; tale comando riporta le informazioni di tutte le tabelle così come lo realizza DBCC CHECKALLOC, però a differenza di questa NEWALLOC non ferma il controllo anche se incontra un errore


IL COMANDO PER ESEGUIRE IL BACKUP ...

... è DUMP ed ha la seguente sintassi:

Salvataggio di un database:

DUMP DATABASE {nome_database}
TO dump_device [, dump_device2 [ ..., dump_devicen]]
[WITH opzioni]

Salvataggio di un transaction log:

DUMP TRANSACTION {nome_database}
TO dump_device [, dump_device2 [ ..., dump_devicen]]
[WITH { TRUNCATE_ONLY | NO_LOG | NO_TRUNCATE } opzioni]

ove

dump_device =
nome_dump_device
[VOLUME = id_volume]
opzioni =
[[,] {UNLOAD | NOUNLOAD}]
[[,] {INIT | NOINIT}]
[[,] {SKIP | NOSKIP}]
[[,] {{ EXPIREDATE = data } | { RETAINDAYS = giorni }}]

Per tale comando consideriamo solo alcune parametri:

nome_database
è il nome del database su cui esegue il backup

nome_dump_device
è il nome della dump_device

DATABASE
specifica che l'intero database e i transaction log saranno salvati. Se i transaction log sono nella stessa device col database, usando DUMP DATABASE è il solo modo per creare una copia di backup che contiene sia database che transaction log. DUMP DATABASE però non rimuove le parti inattive dei log, per fare questo è necessario un DUMP TRANSCATION WITH TRUNCATE_ONLY per pulire i log dalle transazioni completate che non rimuove

TRANSACTION
specifica che solo i transaction log saranno salvati (si può fare se i transaction log sono memorizzati su device separate da quelle del database.

TRUNCATE_ONLY
rimuove la parte inattiva dei log senza care una copia di backup di questi

NO_LOG
si usa quando si è andati fuori dallo spazio nel database e non si può usare DUMP TRANSCATION WITH TRUNCATE_ONLY per pulire il log. Tale opzione rimuove la parte inattiva del log senza fare una copia di backup di questa e salva lo spazio in quanto non fa il login dell'operazione

NO_TRUNCATE
fa il possibile per fare il backup di un transacionn log anche se il database è inaccessibile utilizzando un puntatore al transaction log nel database master (quando le device sono intatte ma una porzione di un database utente è danneggiato)

VOLUME = id_volume
specifica l'ID del volume (al più 6 caratteri)

UNLOAD
specifica che il nastro è automaticamente riavvolto e scollegato dopo che il backup è finito

NOUNLOAD
specifica che il nastro non è automaticamente riavvoltodopo che il backup è finito

INIT
specifica che il backup deve essere il primo file sulla device di tipo disco o nastro

NOINIT
specifica che il backup deve essere accodato sulla corrente device di tipo disco o nastro

SKIP
istruisce il server a non leggere la testata della device nastro ANSI

NOSKIP
istruisce il server a leggere la testata della device nastro ANSI

EXPIREDATE = data
specifica la data quando la copia di backup scadrà e si potrà sovrascrivere

RETAINDAYS = giorni
specifica il numero di giorni che devono trascorrere dalla data un cui viene creato il backup prima che il backup scada e sia sovrascritto


IL COMANDO PER ESEGUIRE IL RESTORE ...

... è LOAD ed ha la seguente sintassi:

Recupero di un database:

LOAD DATABASE {nome_database}
FROM dump_device [, dump_device2 [ ..., dump_devicen]]
[WITH opzioni]

Recupero di un transaction log:

LOAD TRANSACTION {nome_database}
FROM dump_device [, dump_device2 [ ..., dump_devicen]]
[WITH opzioni]

ove

dump_device =
nome_dump_device
[VOLUME = id_volume]
opzioni =
[[,] {UNLOAD | NOUNLOAD}]
[[,] {SKIP | NOSKIP}]
[[,] {FILE = numero_file}]

Per tale comando consideriamo solo alcune parametri:

nome_database
specifica il nome del database di cui è stato fatto un backup dell'intero database o solo del transaction log

nome_dump_device
è il nome della dump_device

numero_file
è il numero delfile che sarà caricato dalla device del nastro o del disco che contiene salvataggi multipli del database

DATABASE
specifica che l'intero database e i transaction log saranno recuperati

TRANSACTION
specifica che solo i transaction log saranno applicati al database; devono essere eseguiti in ordine sequenziale

VOLUME = id_volume
specifica l'ID del volume (al più 6 caratteri)

UNLOAD
specifica che il nastro è automaticamente riavvolto e scollegato dopo che il backup è finito

NOUNLOAD
specifica che il nastro non è automaticamente riavvoltodopo che il backup è finito

SKIP
istruisce il server a non leggere la testata della device nastro ANSI

NOSKIP
istruisce il server a leggere la testata della device nastro ANSI