SQL backup og restore

i start menuen, find programmet eller søg efter det "DP for SQL Management Console"

i programmet udvid ned igennem træ strukturen og find den ønskede SQL instans (der kan godt være flere)


Vælg den ønskede SQL instance find databasen og højreklik på den og der er nu flere valgmuligheder

Der kan normalt vælges imellem:
Full Backup
Copy-Only Full Backup
Differential
Log backup

Bemærk: Log backup er kun en mulighed hvis databasen kører med en full recovery model.



Manuel backup fra kommando linjen


Hvis man ønsker, kan der også afvikles backup fra kommando linjen. Denne findes per default:

C:\program files\tivoli\tsm\tdpsql\

Syntaxen til backup, er rimelig simpel:

C:\Program Files\tivoli\tsm\TDPSql\tdpsqlc.exe backup <name of the database> <type of backup>

Det vil så bliver til:

C:\Program Files\tivoli\tsm\TDPSql\tdpsqlc.exe backup master full

Hvis man vil køre en fuld backup af databasen "master".


Navnet på databasen kan også erstattes af en "*" hvis man ønsker at tage backup af alle databaser.
Eksempelvis:

C:\Program Files\tivoli\tsm\TDPSql\tdpsqlc.exe backup * log

Hvis hvis man ønsker at køre en log backup af alle databaser.

Man kan også angive en serie af databaser med et komma imellem, hvis man ønsker:

....\tdpsqlc.exe backup dataBase1,database2,database3 full

Hvis der er mere end 1 sql instans på serveren, eller den er named. Så kan der i nogen tilfælde være behov for, at man angiver denne specifikt:

tdpsqlc.exe backup * log /sqlserver=Sqlserver\SQL2017



GUI restore (fra Flashcopy Manager / DP for SQL)

Start med at finde, og køre "DP for SQL Management Console " fra start menuen:


Udvid ned igennem træ strukturen til SQL instansen findes

Klik på "Recover" fanen:

Som udgangspunktet vil alle database (og evt logs) vises i vinduet, som er kørt siden sidste fulde backup.

Hvis man ønsker at finde ældre backup'er, så skal man klikke på den lille knap "Active Backups"

Den vil så bruge lidt (nogle gange meget) tid på at finde disse frem.

En restore, kan som udgangspunkt, laves på 2 måder:
Man kan overskrive den kørende database,
eller man kan restore til et nyt navn, så den kørende database ikke påvirkes.


Restore og overskriv

Start med at klikke på knappen "Show Restore Options"


Og sørg for, at "Replace" værdien er sat til "Yes"


Bemærk:  Hvis databasen har aktive sessioner, kan TSM klienten ikke nødvendigvis får lov til at overskrive den. Og restore opgaven vil derfor fejle udmiddelbart efter den er sat igang. Hvis man er i tvivl, kan man altid starte med at sætte database offline, da det vil afbryde alle sessioner, og sikre at restoren går fint igennem.

Igennem SQL Management Studio gøres det som sådan:

Højreklik på databasen,
- Vælg "Tasks"
- "Take Offline"

Sørg for at der er valgt "Drop All Active Connections" (denne mulighed findes ikke i alle versioner af SQL)

Markér nu de objekter der ønskes restoret, og højreklik og vælg "restore"

Bemærk: Man skal som udgangspunkt altid restore en fuld backup, men hvis det ønskes, kan der restores log objekter også, for at komme frem i tid. Man kan ikke restore logs alene, der skal altid startes med en fuld.

Når den er færdig, kan man dobbelt klikke på den task der ligger i bunden af vinduet, og se en status




Restore og relocate filer

I mange tilfælde kan det være brugbart at restore en backup, som blot bringes online ved siden af den kørende aktive database.
Du finder det data man skal bruge, på samme måde som i ovenstående guide. Men når man højreklikker på objekterne, vælger man "restore to alternate location"

Skriv det nye navn databasen skal have (det må naturligvis ikke være et, der allerede findes i forvejen):

Sørg også for, at der markeres i bunden af vinduet at man bruger "relocate files..." og her angiver et nyt fil navn til både logfilen og databasen.


Øvrige brugbare funktioner

Hvis backup'en har været kørt i et SQL Always On setup, så kan databaserne kun ses i "Recover", hvis man først klikker på "DP Node Backups":

Knappen vil så skifte navn så der istedet står:

I "Protect" fanen, er der også skiftet navn fra

til dette i stedet

I "restore options" menuen, kan det være brugbart at have funktionen "Auto Select" sat til "yes"

Det gør, at hvis man vælger et log objekt til restore, så vil klienten selv markere de evt tidligere log objekter der skal bruges, samt den fulde backup.


Restore fra kommando linjen

I nogle tilfælde, kan det være en fordel at bruge kommando linje klienten til at lave restores. Det kan være fordi at GUI klienten måske "hænger" eller bruge lang tid på at vise data(især set ved installationen med mange databaser).
Men der kan også være steder, hvor GUI'en slet ikke virker -normalt mest set i ældre setup, hvor der måske mangler at blive installeret nyere versioner af Powershell eller andre komponenter.

Stien til kommando linje klienten er som standard:

C:\Program Files\Tivoli\tsm\tdpsql\


Liste backups

For at få en liste over alle aktive backups:

tdpsqlc.exe q tsm *

Listen kan gøres mere specifik ved at indsætte navnet på den database med vil spørge på:

tdpsqlc.exe q tsm <navn på databasen>  (bemærk, den er case sensitiv!)

Den bør så returnere noget lignende, dette:

Som standard, lister den kun seneste active version. Hvis man ønsker alle backups fra en given database, skal man sætte "/all" på sin forespørgsel. Dette vil også inkludere evt log eller differential backupper:

tdpsqlc.exe q tsm <database>  /all

I mange tilfælde kan det være en fordel at få listen ud i en fil, så man nemmere kan søge i den:

tdpsqlc.exe q tsm <database> /all > c:\temp\sql_backup.txt

Hvis man har behov for at få information omkring hvor en database har ligget i mappe strukturen, kan dette gøres med:

tdpsqlc.exe q tsm <database> full /fileinfo

Som vil give info som:

I tilfælde af restore af master databasen, kan det være vigtigt at kende den præcise version af den oprindelige SQL instans. Dette kan findes ved at køre:

tdpsqlc.exe q tsm <database> full /compat

Som vil liste informationerne:



Restore og overskriv databasen med kommandolinjen

Ligesom man kan lave en restore i GUI klienten, kan man naturligvis også på kommando linjen. Det er dog meget vigtigt at man her, er opmærksom på rækkefølgen, og hvilke objekter man vælger til restore.

Som udgangspunkt skal en restore altid startes med en fuld backup, herefter kan man -hvis det ønskes, restore log backups eller differentials. Man kan altid nøjes med en fuld, men man kan (normalt) aldrig restore en log backup alene.

Når man skal restore objekter, skal man bruge den formation man trak ud omkring backup'en, i sektionen ovenfor.

Det vil sige, at man har en information som dette:

Vi kan se at det er en fuld backup, vi har dato'en for hvornår den er kørt, samt det database objekt navn den har.

Bemærk: Der kan være forskel på hvordan dato angivelsen er i udtræk fra kommandolinjen, sammenligner med hvordan GUI klienten viser det.

I dette tilfælde ønsker vi også at restore 2 log objekter, for at komme længere frem i tid. 

Log nummer 1, som er fra kl 07:37


Log nummer 2 som er kl ca 09:36:

Vi har nu 3 objekter der skal restores: En fuld backup og 2 x log backup. Der skal nu laves 3 restore kommandoer.

En vigtig detalje er, at uanset hvor mange objekter man ønsker at restore, skal alle, undtagen det sidste have "/recovery=no" på. Det sidste objekt, skal derimod have:

/recovery=yes

Hvis man kun restore 1 objekt, skal dette have /recovery=yes på.

I vores tilfælde vil de 3 linjer der skal bruges til restore, hedde:

tdpsqlc restore SHOP_xxxxxx /object=20180605035319\000028BC /replace /recovery=no

tdpsqlc restore SHOP_xxxxxx log=* /object=20180605073752\000029DC /recovery=no

tdpsqlc restore SHOP_xxxxxx log=* /object=20180605093656\00001DC0 /recovery=yes

Bemærk, at der er forskel på hvad der indgår i restore af log og den fulde backup.
Bemærk også, at den er case sensitiv på databasenavnet!



Restore til et andet navn med kommando linjen

Hvis man ønsker at restore en backup, til et andet database navn, kan dette gøres ud fra følgende opsætning:

tdpsql restore <name_of_db> /object=<objectID> /into=<new_database_name> /relocate=<logical_name_db>,<logical_name_db_log> /to=<path_to_file.mdf>,<path_to_log.ldf> /recovery=<yes>/<no>

Hvilket i et rigtigt eksempel kan se ud som sådan:

tdpsqlc restore database-Prod full /object=20180530000852\00000CDC /into=Database_RESTORE /relocate=database-prod,database-prod_log /to=c:\temp\databaseprod_restore.mdf,c:\temp\database-prod_log_restore.ldf /recovery=yes


Her er det vigtigt man kender de logisk navne på databasen og logfilen, da de bruges af /relocate

Man kan naturligvis kombinere dette, både med fulde og log objekter.