Artykuły

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

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

Jak wykonać automatyczny backup i "zip" baz w MS SQL Server 2000 ?

Przedstawiam skrypt,, który automatycznie wykonuje backup wszystkich baz danych umieszczonych w aktualnej instancji SQL Server 2000.

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 „xp_cmdshell" może on być uruchomiony na wersji MS SQL Server 2000. W wersjach wyższych należy dokonać czasowej zmiany konfiguracji serwera, która nadaje uprawnienia do użycia „xp_cmdshell"

 

----------------------------------------------------------------------------------------------------------------
-- Script : AutomaticBackupDataBasesFromSQLServer2000.sql
-- Author : Dariusz Brejnak aka `DBSoft (c) 2010
-- Created : 2010-08-19
-- 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 FOR MS SQL SERVER 2000 !!!!!!!
-- : If you want to use SQL 2005 or higher, select ONLY option 2-'Only Make Backup'
-----------------------------------------------------------------------------------------------------------------

USE master
GO

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_SCRIPTS\a\'
SET @CommadArchive ='"C:\Program Files\WinRAR\rar.exe" a '
SET @Prefix='DBSoft2000_'
-- @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.dbid)
FROM
[master].[dbo].[sysdatabases] 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.dbid)) = 1 and db_name(m.dbid) not in ('master','model','tempdb')
)
-- Not multiple line
GROUP BY m.dbid
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(mm,getdate()) + '_' + datename(dd,getdate()) +'.zip' +CHAR(39)
-- delete
-- PRINT @cmd
EXEC sys.sp_sqlexec @Cmd

-- command shell text to zip backups
SET @Cmd= 'exec xp_cmdshell '+char(39)+@CommadArchive+' '+@VirtualPath+@Prefix+'_Backup_' +
datename(yy,getdate()) + '_'+datename(mm,getdate()) + '_' + datename(dd,getdate()) +'.zip ' +
@VirtualPath+@Prefix+datename(yy,getdate())+'_'+datename(mm,getdate()) + '_' + datename(dd,getdate()) +'_*.bak'+CHAR(39)
--PRINT @Cmd
-- zip ....


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