Att ta backup på SQL-databaser & loggar är lite lagomt tråkigt.
Gör man det med maintenance-plan’s så får man en miljard (nåja… ett ganska rejält gäng iaf) filer. Kör man det genom någon annan wizard så blir det måttligt bra.
Nu har jag gjort samma backup-script i femtielva varianter och det känns som att det här fungerar riktigt bra.
Vad gör det då? Jo det är tvådelat, ett script för transaktionsloggar och ett för databasbackup.
Det script som är för dbbackup kör man lämpligtvis efter att bandaren har plockat upp filerna på band. Varför? Scriptet kör med “WITH INIT” vilket tömmer filerna och alla transloggar försvinner.
Det andra scriptet kör backup på transloggar på de databaser som är i recovery-model “Full” och inte är satta till “read only”.
Båda scripten kör backup till samma fil vilket gör det mycket enkelt att återläsa, och även att återläsa till en viss tidpunkt.
Databas-backup (Körs lämpligtvis efter bandbackup, en gång per dygn)
-- ------------------------------------------------------------------- -- Funktion: Backup av samtliga lokala databaser -- Skapat: 2007-05-10 av rikard@ronnkvist.nu -- -- Filerna namnsätts \\XYZ\DBBackup\SQLSERVER-INSTANS\DBnamn.bak -- ------------------------------------------------------------------- -- Deklaration av variabler DECLARE @backupPath sysname, @DBname sysname, @backupfile sysname -- Konfiguration SET @backupPath = '\\XYZ\DBBackup\' -- ------------------------------------------------------------------- DECLARE myCur CURSOR -- Läser ur samtliga lokala databaser (förutom tempdb), sortera systemdatabaser först därefter i namnordning FOR SELECT NAME FROM MASTER..SYSDATABASES WHERE NAME NOT IN ('tempdb') ORDER BY SID, NAME FOR READ ONLY OPEN myCur -- Start av loop FETCH NEXT FROM myCur INTO @DBname WHILE (@@FETCH_STATUS <> -1) BEGIN -- Sätter sökvägen för backupfilerna SET @backupfile = @backupPath + RTrim(REPLACE(@@SERVERNAME, '\', '-')) + '\' + RTrim(REPLACE(@DBname, ' ', '_')) + '.bak' -- Skriver info till användaren/loggen PRINT '' PRINT '--- DB-backup to: ' + @backupfile -- Kör backup BACKUP DATABASE @DBname TO DISK = @backupfile WITH NAME = 'Scripted backup', DESCRIPTION = 'Full Backup', INIT -- Fortsätter loopen FETCH NEXT FROM myCur INTO @DBname END CLOSE myCur DEALLOCATE myCur -- -------------------------------------------------------------------
Translogg-backup (Körs lämpligtvis varje halvtimme mellan 06:00 & 19:00, om det nu är tiderna då användare arbetar i databaserna)
-- ------------------------------------------------------------------- -- Funktion: Backup av transaktionsloggen på lokala databaser -- Skapat: 2007-05-10 av rikard@ronnkvist.nu -- -- Filerna namnsätts \\XYZ\DBBackup\SQLSERVER-INSTANS\DBnamn.bak -- ------------------------------------------------------------------- -- Deklaration av variabler DECLARE @backupPath sysname, @DBname sysname, @backupfile sysname -- Konfiguration SET @backupPath = '\\XYZ\DBBackup\' -- ------------------------------------------------------------------- DECLARE myCur CURSOR -- Läser ur samtliga lokala databaser (förutom tempdb & model), sortera systemdatabaser först därefter i namnordning FOR SELECT NAME FROM MASTER..SYSDATABASES WHERE NAME NOT IN ('tempdb', 'model') ORDER BY SID, NAME FOR READ ONLY OPEN myCur -- Start av loop FETCH NEXT FROM myCur INTO @DBname WHILE (@@FETCH_STATUS <> -1) BEGIN -- Kollar att det är recoverymodel full och att den inte är skrivskyddad IF (convert(sysname,DatabasePropertyEx(@DBname,'Recovery')) = 'FULL') AND (convert(sysname,DatabasePropertyEx(@DBname,'Updateability')) = 'READ_WRITE') BEGIN -- Sätter sökvägen för backupfilerna SET @backupfile = @backupPath + RTrim(REPLACE(@@SERVERNAME, '\', '-')) + '\' + RTrim(REPLACE(@DBname, ' ', '_')) + '.bak' -- Skriver info till användaren/loggen PRINT '' PRINT '--- Log-backup to: ' + @backupfile -- Kör backup BACKUP LOG @DBname TO DISK = @backupfile WITH NAME = 'Scripted backup', DESCRIPTION = 'Logbackup', NOINIT END -- Fortsätter loopen FETCH NEXT FROM myCur INTO @DBname END CLOSE myCur DEALLOCATE myCur -- -------------------------------------------------------------------
Det som är (mest) imponerande är att det finns kommentarer! Image may be NSFW.
Clik here to view.