Artykuły

A A A
Drukuj Ekportuj do PDF
Opublikowane: 2010.08.19 15:21 | Dariusz Brejnak | Aktualizacja: 2010.08.20 8:41

[Porada] Jak wykonać automatyczny backup i "zip" baz w MS SQL Server 2005/2008 ?

Jak wykonać automatyczny backup i "zip" baz w MS SQL Server 2005/2008 ?

Zmęczony ręcznym tworzeniem backupów z SQL Servera oraz pamiętaniem, które bazy należy kopiować zacząłem szukać rozwiązania do automatycznego backupu. Na forum CodeGuru.pl znalazłem namiastkę rozwiązania przedstawiono przez „alazif" . Po modyfikacji i dopisaniu kodu stworzyłem skrypt, który automatycznie wykonuje backup wszystkich baz danych umieszczonych w aktualnej instancji serwera.

Nazwy wszystkie kopii składają się z prefixu (w tym wypadku używam nazwy instancji serwera), roku, miesiąca i dnia wykonania kopi oraz z samej nazwy bazy danych.

Dodatkowo stworzyłem fragment, który jest odpowiedzialny za wykonanie pakowania, ( za pomocą zipa, rara, 7zipa itp - odpowiednią komendę podaje się w zmiennej tekstowej) backapów baz danych.

W zmiennej @choice ustawia się odpowiednie parametry dotyczące sposobu wykonywania kopii, i tak dla:

  • 0 - Wykonywany jest backup, który jest pakowany a następnie pliki *.bak są zakasowywane (opcja oszczędzająca miejsce na dysku)
  • 1 - Wykonywany jest backup, który jest pakowany, pliki *.bak nie są kasowane (podwójne zabezpieczenie)
  • 2 - Wykonywany jest tylko sam backup. Pakowanie nie jest wykonywane.

 

W zmiennej @VirtualPath ustawiamy ścieżkę docelową składowania backapu.

W zmiennej @Prefix ustawiamy przedrostek do nazwy kopii.

W zmiennej @CommandArchive ustawiamy komendę uruchamiającą archiwizator

Z uwagi na to, że skrypt używa widoku systemowego „sys.master_files" oraz na czasową zmianę konfiguracji serwera, która umożliwia dopuszcza użycie „xp_cmdshell" może on być uruchomiony na wersji MS SQL Server 2005/2008/2008R2.

----------------------------------------------------------------------------------------------------------------
-- Script : AutomaticBackupDataBasesFromSQLServer.sql
-- Author : Dariusz Brejnak aka `DBSoft (c) 2010
-- Created : 2010-08-10
-- Modified : 2010-08-19
-- Description: script designed to automatically copy the databases on the SQL server.
-- copies of the databases are then zip and delete resources
-- Other : Only MS SQL Server 2005, 2008 and 2008R2. !!!!!!!!! NOT FOR MS SQL SERVER 2000 !!!!!!!
-----------------------------------------------------------------------------------------------------------------

USE master
GO

-- mode show advanced options is enabled
EXEC sp_configure 'show advanced options',1
reconfigure with override;
-- unblocked access to procedure 'sys.xp_cmdshell'
EXEC sp_configure 'xp_cmdshell',1
reconfigure with override;

DECLARE @DBName varchar(255)
DECLARE @VirtualPath varchar(255)
DECLARE @CommadArchive varchar(255)
DECLARE @Prefix varchar(255)
DECLARE @DBFile varchar(256)
DECLARE @Cmd varchar(500)
DECLARE @Choice int

----------------------------------------------------------
-- DASHBOARD ---------------------------------------------
SET @VirtualPath ='c:\_SQL_Backup\'
SET @CommadArchive ='"C:\Program Files\WinRAR\rar.exe" a '
SET @Prefix='DBSoft_'
-- @Choice = 0 - Make Backup, zip and delete *.bak
-- @Choice = 1 - Make Backup, zip and don't delete *.bak
-- @Choice = 2 - Only Make Backup
SET @Choice = 0

----------------------------------------------------------

-- Declare Cursor
DECLARE DBCursor CURSOR FOR
SELECT
NAME = db_name(m.database_id)
FROM
sys.master_files m
WHERE
(
-- IS ONLINE WHEN STATE = 0 and Only look at databases to which we have access and exclude master, model, tempdb or other
m.state = 0 and has_dbaccess(db_name(m.database_id)) = 1 and db_name(m.database_id) not in ('master','model','tempdb')
)
-- Not multiple line
GROUP BY m.database_id
ORDER BY NAME
OPEN DBCursor
FETCH NEXT FROM DBCursor INTO @DBName

WHILE @@FETCH_STATUS = 0
BEGIN
SET @DBFile = datename(yy,getdate()) + '_'+datename(mm,getdate()) + '_' + datename(dd,getdate()) + '_' + replace(replace(@DBName,':','_'),'\','_')
SET @Cmd='BACKUP DATABASE [' + @DBName + '] TO DISK = N'''+@VirtualPath +
@Prefix +
@DBFile + '.bak'+char(39) + ' WITH NOFORMAT, INIT, NAME = N''' +
@DBName + '-Full Database Backup'', SKIP, NOREWIND, NOUNLOAD, STATS = 100'
EXEC sys.sp_sqlexec @Cmd
PRINT 'Backup '+@DBName+' as file name '+@Prefix+@DBFile + '. Done ...'
FETCH NEXT FROM DB_Cursor INTO @DBName
END

CLOSE DBCursor
DEALLOCATE DBCursor

-------------------------------------------------------------------------------------

IF (@Choice !=2) -- only backup (don't zip)
BEGIN
-- command shell text to delete zip archive
SET @Cmd= 'exec xp_cmdshell '+char(39)+'del '+@VirtualPath+@Prefix+'_Backup_'+
datename(yy,getdate()) + '_' +datename(


Komentarze 0 Masz uwagi do tej strony? Napisz

Dodaj komentarz

avatar

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Autor Dariusz Brejnak
avatar Ekspert WSS
 

Załóż konto
WSS to serwis, który łączy dziesiątki tysięcy specjalistów IT w Polsce, zajmujących się szeroko pojętymi technologiami Microsoft. Portal działa od 2003 roku, i oprócz setek publikacji technicznych, rozwijającego się forum - portal to ludzie, którzy go tworzą. To właśnie z myślą o nich warto codziennie nas odwiedzać.

Dowiedz się więcej o WSS