KAP 16 BACKUP, RESTORE OCH RECOVERY Backup - strategier Backuptyper Recoverymodeller Backup med Management Studio Backup med TSQL Hur transaktionsloggen fungerar Automatiskt återhämtning (Recovery) Återhämta databaser - Recover Återställning (restore) av databas med Mstudio Återställning (restore) av databas med TSQL 1 BACKUP Med en backup kan du återställa databasen från Fel på media Fel på system-mjukvara Oavsiktlig felaktig användning av delete och update DELETE Customers DROP DATABASE SalesProduction Format C: UPDATE Employees SET Salary=200000 Elaka virus Naturkatastrofer Klantiga tekniker Eldsvådor Stöld En databas representerar för de flesta en mycket värdefull investering Det gäller att förvalta den väl med genomtänkta säkerhetskopieringar 2 1
BACKUPSTRATEGI Var alltid beredd på det värsta! Ditt jobb är att förbereda för katastrofer och hoppas att du aldrig behöver använda dina förberedelser. Det finns inget som heter paranoid när det gäller backuper! Data som förlorats är borta för evigt! Det finns två sorters diskar sådana som har gått sönder sådana som ännu inte gjort det Utveckla en backupstrategi Backupstrategin bestämmer punkten fram till vilken databasen kan återställas efter en katastrof. Den strategi som ska väljas bestäms av hur viktiga dina data är. Det räcker normalt inte att kunna återställa backupen från i söndags! Man måste kunna återställa till tidpunkten för krashen! Det är här transaktions-loggen kommer till räddning, den innehåller information om vilka kommandon som har förändrat databasen. I händelse av en krasch är det möjligt att köra kommandon igen (ROLLFORWARD) för att återhämta (recover) databasen från den senaste backupen fram till godtycklig tidpunkt. För att detta ska fungera måste man emellertid se till att databasen är inställd på rätt Recovery model. Se längre fram! 3 BACKUPSTRATEGI Hur ofta och vilka typer av backupmedia som behövs beror på hur ofta och hur mycket databasen förändras med tiden. Det är vanligt att säkerhetskopiera (ta backup på) hela databasen 2 gånger per vecka och däremellan ta backup på transaktionsloggen och göra differentiella backuper flera gånger per dag. Man bör också använda sig av åtminstone tre generationer av backupmedia (t ex band) som man växlar mellan. Små databaser kan man med fördel alltid ta full backup på då de inte tar så stor plats och att det går snabbt, men glöm inte transaktionsloggen, den är viktig. Även systemdatabaserna ska säkerhetskopieras när något förändrats i systemet, t ex då man lagt till nya login, databaser och programmerade uppgifter. För att ta en säkerhetskopia (backup) behöver man inte kasta ut användarna utan all backuptagning kan göras online. Detta beror på att alla kommandon som påverkar databasen också sparas i transaktionsloggen. 4 2
BACKUPTYPER Flera backuptyper Full Differential Transaction log File eller group File differential - Fullständig kopia tas av databasen - Kopia tas på ändrade sidor sedan förra backupen - Kopierar endast transaktionsloggen - Kopierar endast angiven fil eller filgrupp - Alla ändrade sidor i filen sedan förra filbackupen Begrepp Backup - säkerhetskopiering Restore - återställning av säkerhetskopia Recover- återhämtning från krasch 5 ÅTERHÄMTNINGS (RECOVERY) MODELLER Simple Recovery Model Endast full databas och differentiell backup gfilen blir minimal Recovery model kan väljas på Properties - Kan endast återhämta (recover) kraschade filer till Options sidan till databasen senaste backup. Lämplig för små databaser med få uppdateringar, test-databaser samt även till master och msdb då dessa inte använder transaktioner. Full Recovery Model Säkraste recovery-modellen Kan återhämta (recover) från kraschade filer till godtycklig tidpunkt om inte transaktionsloggen är skadad. Transaktionsloggarna kan bli enormt stora BULK_LOGGED Recovery Model Tillåter mycket snabba bulk-operationer - Bulk Copy, BULK INSERT, SELECT INTO, WRITETEXT, UPDATE TEXT, CREATE INDEX Tar minimalt logg-utrymme då det endast loggas att en bulkoperation ägde rum. Kan återhämta (recover) kraschade filer till sista logg-backupen Servercrasch hanteras automatiskt av alla modellerna genom en ROLLFORWARD av comittade transaktioner (finns lagrade i transaktionsloggen) 6 3
Generalsidan SÄKERHETSKOPIERA MED MANAGEMENT STUDIO #1 Välj backuptyp Full Differentiell g Välj databas fil filgrupp Sökväg till backup Fil Device OBS! Endast lokala diskar är åtkomliga via interfacet. Om du ska spara backup'en på en nätverksdisk anges UNC - sökväg eller så skapar du en Backup Device som är ett alias till sökvägen. SQL Server måste ges skriv och läsrättighet där. 7 Optionssidan SÄKERHETSKOPIERA MED MANAGEMENT STUDIO #2 Addera till befintlig Skriv över Kolla media & datum Verifiera backup Komprimera backup? Default inställning Komprimera Komprimera inte Komprimering av backupen gör den snabbare och mindre! Endast Enterprise- och Developer-versionerna har komprimering. Återställning kan göras av alla versioner fr.o.m. 2008 8 4
ATT SÄKERHETSKOPIERA EN DATABAS MED TSQL Säkerhetskopiering av hel databas med TSQL BACKUP DATABASE NorthWind TO DISK = 'D:\backup\Nwbackup.bak' [WITH COMPRESSION] Differentiell backup med TSQL BACKUP DATABASE NorthWind TO DISK = 'D:\backup\Nwbackup.bak' WITH DIFFERENTIAL [, COMPRESSION] Säkerhetskopiering av Transaktionsloggen med TSQL BACKUP LOG Northwind TO DISK = 'D:\backup\Nwbackup.bak' [WITH COMPRESSION] En liten test av filstorlek för backup med och utan komprimering gav resultatet: 1062/3673 KB 9 HUR TRANSAKTIONSLOGGEN FUNGERAR I transaktionsloggen sparas information om utförda kommandon. gstart Äldsta uncommited transaction Checkpoints gslut 141 142 143 144 145 146 147 148 begin begin update Check Point update Commit Check Point Update INACTIVE ENTRIES sparade ACTIVE Entries EJ sparade 1. Till vänster påbörjas (141), därefter påbörjas (142) som fortsätter i (143). 2. Därefter kommer en CHECKPOINT (144). Vid en checkpoint sparas bland annat commit'ade transaktioner till disk. Det finns inga sådana transaktioner ännu. 3. Tran 1 fortsätter (145) och avslutas med commit i (146). 4. Vid kommande CHECKPOINT (147) sparas nu transaktionen som började i (141). 5. Allt till vänster om äldsta uncommited transaktion 142 ligger nu på disk och är nu INACTIVE Entries. 6. Transaktionen som började med (142) fortsätter nu att köras i (148) och ligger fortfarande i de ACTIVE Entries som inte sparats på disk. = Sequence Number 10 5
TRANSAKTIONSLOGGEN De flesta MS använder Write - Ahead log vilket innebär att modifikationer skrivs till loggen innan de skrivs till databasen. Detta garanterar återskapande av högsta klass. Förra backupen En CHECKPOINT Inträffar c:a en gång per minut, beroende på belastning "Commit'ade" datasidor skrivs till databasen Aktiva transaktioner bokförs i loggen INACTIVE ENTRIES sparade (ej backup) Tail of the log Inaktiva loggposter raderas vid simple recovery model. ACTIVE Entries EJ sparade Vid andra recoverymodeller tas inaktiva loggposter bort från loggen vid nästa backup av loggen. Vid datakrasch ska detta väljas bort. Istället ska man ta backup på Tail of the log så att kommandon efter förra backup'en kan köras igen. 141 begin 142be gin 143 update 144 Check Point 145 update 146 Commit 147 Check Point 148 Update Radera inactive Entries med MStudio OBS! Om man inte tar backup på loggen blir den så stor att den till slut inte går att göra några operationer på databasen 11 AUTOMATISKT ÅTERHÄMTNING (RECOVERY) Alla databaser har en transaktionslogg, operationer som påverkar databas och data spelas in i denna logg och används till att återskapa efter mediafel eller förstörd databas för Full och Bulk logged recovery model Transaktionsloggen innehåller också information till "Automatic Recovery" efter Server-krasch, t ex strömavbrott. Det kan då hända att commit'ade transaktioner inte hunnit sparas på disk och man kan ana att det finns risk att dessa commit'ade transaktioner blir förlorade. Så är dock inte fallet, kraven enligt ACID 1) (Durability) säkerställer att dessa transaktioner även kommer att slutföras på ett säkert sätt. När datorn återstartas efter ev. reparation sker automatiskt "roll forward" på commit'ade men ej sparade transaktioner, dvs de körs en gång till. Transaktioner som ej var slutförda (uncommited transactions) vid serverkraschen görs rollback på och felmeddelande visas så att de kan utföras på nytt. Denna automatiska återhämtning (recovery) gäller alla recovery modellerna. 1) ACID Sammanfattar de fyra krav som ska ställas på en transaktion (atomicity, consistency, isolation och durability). Se hjälp eller googla! 12 6
ÅTERHÄMTA DATABASER - RECOVER Hur vet man att det uppstått problem? Fysiska fel på en enhet märks vanligen direkt! - Disken för oväsen eller står still - Databasen "försvinner" i MStudio Ser misstänkt tomt ut Andra fel visas i - SQL Server Error (Current + 6 äldre) - Windows NT Application log 13 ÅTERHÄMTNINGS (RECOVERY) SCENARIER #1 Vad som ska göras efter en krasch beror på vad som är skadat och vilken recovery model som används A. Om servern gått ner Om du fått strömavbrott, hårdvarufel som inte förstört datafiler, mm, så är det bara att starta om servern efter eventuell reparation. Automatic Recovery kör igång vid återstart och återställer committed transactions som inte hunnit ner på disk. (Roll forward). Rollback görs automatiskt på uncommitted transactions som får göras om. B. Datakrasch vid "Simple Recovery Model" Skadad transaktionslogg Om endast transaktionsloggen är skadad är det bara att starta om servern så skapas automatiskt en ny transaktionslogg på 1MB. Expandera denna om du behöver mer utrymme. Skadad databas Återstarta servern och återställ (Restore) den fulla backupen och differentiella backuper. Data ändrad efter sista backupen är förlorad 14 7
LS N LS N 143 144 145 146 147 148 ÅTERHÄMTNINGS (RECOVERY) SCENARIER #2 C. Full eller Bulk logged Recovery Model Både databasfil och transaktionslogg skadad Återställ (Restore) senaste fulla backupen, differentiella backuper, transaktionsloggar. Ändringar sedan den sista transaktionsloggs-backupen kommer att förloras. Endast skadad databas 1. Ta backup på aktuell transaktionslogg (innehåller transaktioner sedan senaste backup) med inaktiva poster kvar (NO_TRUNCATE) backup INACTIVE ENTRIES 2. Återställ: senaste fulla backupen differentiella backuper transaktionsloggar (även loggen i 1.) Tail of the log ACTIVE Entries ej sparade 3. Databasen kommer att blir återställd till tidpunkten för felet. 15 RESTORE / RECOVER Vad är det för skillnad mellan Restore och Recover? Restore (Återställning) säkerhetskopia (backup) återställes till databasen från backupmedium flytta/kopiera återställa skadade filer data ändrad efter senaste säkerhetskopieringen kommer att förloras Recovery (Återhämtning) återställer databas efter krasch till tidpunkt för krasch använder databasens loggar genom roll forward kräver tidigare full backup 16 8
ÅTERHÄMTNING (RECOVERY) MED "SIMPLE MODEL"? Till vilken punkt kan vi återhämta databasen om databasen kraschar kl 15.00 på Onsdag? Må 22 Full kopia Må 22.00 Full kopia On 22.00 Full kopia Fr 22.00 ÅTERHÄMTNING (RECOVERY) MED "FULL MODEL"? Antag att databasen krashar Onsdag kl 17.00. Till vilken punkt kan man återhämta (recover)? On 17 10.00 14.00 18.00 Söndag Måndag Tisdag Onsdag? 24.00 Full Vad gäller om transaktionsloggen också är skadad? On 14 Diff Diff Full 17 ÅTERSTÄLLNING (RESTORE) AV DATABAS MED MSTUDIO Högerklicka, välj Tasks -> Restore - General sidan Databasnamn Restore med info från msdb Restore från angiven fil Markera backup som ska återställas Börja med senaste fulla 18 9
ÅTERSTÄLLNING (RESTORE) AV DATABAS MED MSTUDIO Högerklicka, välj Tasks -> Restore - General sidan Nya namn och sökvägar kan anges till data och logg Lämna databasen i operationellt skick 19 ÅTERSTÄLLNING (RESTORE) AV DATABAS MED TSQL Återställning med TSQL är betydligt svårare då man måste ta reda på numret på ingående filer i backupen. Återställ en full databas backup (fil nr 1) och den senaste differentiella backupen (fil nr 7) RESTORE DATABASE mydb FROM DISK='c:\backup\mydb.bak' WITH PASSWORD = 'hemlig', FILE=1, NORECOVERY RESTORE DATABASE mydb FROM DISK='c:\backup\mydb.bak' WITH PASSWORD = 'hemlig', FILE=7 FILE är numret på backupen. Kan utforskas med RESTORE HEADERONLY FROM <backupdevice> Använd NORECOVERY på alla utom den sista "restoren" Se books online för detaljer! 20 10
LOGG-MARKERINGAR Applikationer kan sätta markeringar i transaktionsloggen för att markera när en viss transaktion börjar: BEGIN TRANSACTION abc WITH MARK 'abc tran' Det är sedan möjligt att återställa till eller till och med en sådan markering i loggen. Den sista återställningen av loggen kan då se ut så här: RESTORE DATABASE mydb FROM DISK='c:\backup\mydb.bak' WITH FILE=3, STOP AT 'abc tran' Man kan också återställa till viss tidpunkt:: RESTORE DATABASE mydb FROM DISK='c:\backup\mydb.bak' WITH FILE=3, STOP AT 'Apr 15, 2005 12:00 AM' Se books online för detaljer! 21 ÅTERSTÄLLA MASTER-DATABASEN Om masterdatabasen blivit skadad går det inte att starta SQL Server. Det som då måste göras är att installera en ny masterdatabas från installationsdisken. Därefter kan SQL Server startas på nytt. Det kommer dock inte finnas några databaser och login-konton registrerade. Alla programmerade jobb har också försvunnit. För att få tillbaka allt detta återställer man backupen till master och msdbdatabaserna. Allt detta beskrivs i hjälpen och har man bara en aktuell backup på master och msdb databaserna går det att återställa servern i ursprungligt läge. Se books online för detaljer! 22 11