The PIT
Röster från ITM-koncernen.

Automatisk Backup av alla databaser i SQL Server

September 18, 2008 01:26 by dennis johansson

Jag har fått en ny dator av jobbet och skulle flytta över alla mina data dit. Alla projekt m.m var ju inga problem, men när man kom till databaser osv så tyckte jag att det blev jobbigare. Jag har ca 40 databaser och tänkte göra Backup från min gamla maskin och Restore på nya maskinen. Suck!! Jag gillar inte att klicka en massa...

Vad behövde jag göra?

1. Göra Backup via t-sql.
2. Lista databasernas namn.
3. Loopa igenom ett resultset.
4. Exekvera t-sql texten.
5. Göra Restore via t-sql.
6. Skapa Restore-textfil för att automatisera restoren.

ca. 50 min senare hade jag mitt sql-script färdigmekat tack vare sökande i andras bloggar och tyckte därför att jag kan skriva en rad eller två själv om det.

Jag har ej fixat stöd för databaser i offline-läge, det blir fel vid backup men scriptet fortsätter. Dom kommer även med i AutoRestore.txt. Den har jag inte testat än, sker imorgon! ;)

   1: use master
   2: DECLARE @dbName varchar(255), 
   3:     @cmdtxt varchar(1000)
   4:  
   5: -- Tar bort restore textfilen.
   6: set @cmdtxt='del c:\SQLBackups\AutoRestore.txt'
   7: exec xp_cmdshell @cmdtxt
   8:  
   9: -- Skapar en pekare mot queryn för att hämta databasnamnen
  10: DECLARE TableCrsr CURSOR FOR
  11: -- sid=0x01 är det på databaser som kommer till vid installationen. Iallafall i min DB. ;)
  12: SELECT name FROM sysdatabases where sid<>0x01 order by name
  13:  
  14: -- Öppnar pekaren
  15: OPEN TableCrsr
  16:  
  17: -- Hämtar första raden in i min variabel
  18: FETCH TableCrsr INTO @dbName
  19:  
  20: -- Loopar till status = 0
  21: WHILE @@Fetch_Status = 0
  22:    BEGIN
  23:     -- Skapar min restore text som skrivs ner med gamla hederliga DOS-komandot echo till textfilen med hjälp av xp_cmdshell i SQL Servern.
  24:     select @cmdtxt = 'echo restore database '+@dbName+' from disk =N''c:\SQLBackups\'+@dbName+'.bak'' >> c:\SQLBackups\AutoRestore.txt'
  25:     exec xp_cmdshell @cmdtxt
  26:  
  27:     -- Visar enkelt vart man är under själva exekveringen av backup.
  28:     select 'Backing up DB: ' + @dbName
  29:     -- Gör själva backupen.
  30:     exec (N'backup database '+@dbName+' to disk =N''c:\SQLBackups\'+@dbName+'.bak'' with init')
  31:        
  32:     -- Hämtar nästa rad av databasnamnen
  33:        FETCH TableCrsr INTO @dbName
  34:    END
  35: -- Stänger pekaren
  36: CLOSE TableCrsr
  37: DEALLOCATE TableCrsr

Tags: , ,
Categories: SQL
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed