Stored procedure backup databasse là
backup_proc. Thủ tục này nằm trong database
master. Các tham số
@servername để bản backup nằm trên máy nào (chẳng hạn
hosting11),
@mode là chế độ backup, có thể là full hoặc differential,
@dest là đường dẫn thư mục, các file backup sẽ được ghi xuống thư mục đó. Các file backup có định dạng: @servername_mssql_mmdd_databasename nếu là full backup và @servername_mssql_mmdd nếu là differential backup. Trong trường hợp backup full thì mỗi một backup của một database là một file, còn differential backup thì tất cả các database sẽ được backup vào một file.
create procedure backup_proc
@servername varchar(100),
@mode varchar(200),
@dest varchar(1024)
as
begin
declare database_cur cursor for
select name from sysdatabases;
declare @dbname varchar(1024)
declare @ldbname varchar(1024)
declare @prefix varchar(1024)
declare @path varchar(1024)
declare @bkname varchar(1024)
if right(@dest,1) <> '\'
set @dest = @dest + '\'
set @prefix = @dest + @servername + '_mssql_' + right(convert(varchar(8),getdate(),12),4)
open database_cur
fetch next from database_cur into @dbname
if lower(@mode) = 'full'
while @@fetch_status = 0
begin
set @ldbname = lower(@dbname)
set @path = @prefix + '_' + @dbname
set @bkname = @dbname + ' full backup'
if (@ldbname <> 'tempdb' and @ldbname <> 'model' and @ldbname <> 'msdb' and @ldbname <> 'northwind' and @ldbname <> 'pubs')
backup database @dbname to disk = @path with name=@bkname
fetch next from database_cur into @dbname
end
else
while @@fetch_status = 0
begin
set @ldbname = lower(@dbname)
if (@ldbname <> 'master')
set @bkname = @dbname + ' differential backup'
else
set @bkname = @dbname + ' full backup'
if (@ldbname <> 'master' and @ldbname <> 'tempdb' and @ldbname <> 'model' and @ldbname <> 'msdb' and @ldbname <> 'northwind' and @ldbname <> 'pubs')
backup database @dbname to disk = @prefix with differential, name = @bkname
else if (@ldbname = 'master')
backup database @dbname to disk = @prefix with name = @bkname
fetch next from database_cur into @dbname
end
close database_cur
deallocate database_cur
end
File sqlbackup.bat làm nhiệm vụ gọi thủ tục backup sau đó zip các file và ftp lên một máy khác để dự phòng.
echo off
@REM Seamonkey's quick date batch (MMDDYYYY format)
@REM Setups %date variable
@REM First parses month, day, and year into mm , dd, yyyy formats and then combines to be MMDDYYYY
for /F "TOKENS=1* DELIMS= " %%A in ('DATE/T') do set CDATE=%%B
for /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A in ('DATE/T') do set mm=%%B
for /F "TOKENS=1,2 DELIMS=/ eol=/" %%A in ('echo %CDATE%') do set dd=%%B
for /F "TOKENS=2,3 DELIMS=/ " %%A in ('echo %CDATE%') do set yyyy=%%B
set date=%mm%%dd%
set bkloc=e:\backup\
set server=host11
set zip="C:\Program Files\WinZip\WinZserver32.EXE"
set ftp="C:\Program Files\WS_FTP Pro\wsftppro"
set ftpuser=nota
set ftppwd=nota
set ftphost=ftp.mycompany.com
set ftphome=backup
rem starting backup database sql server
isql -E -d master -Q "backup_proc '%server%','%1','%bkloc%'"
rem zip the backup file
for %%f in (%bkloc%%server%_mssql_%date%*) do %zip% -min -m %%f %%f
rem upload to remote computer
%ftp% -quiet -binary -s local:%bkloc%%server%_mssql_%date%*.zip -d ftp://%ftpuser%:%ftppwd%@%ftphost%/%ftphome%/
exit
Có thể đặt lịch cho chạy tự động bằng Windows Scheduled Tasks hoặc chạy trực tiếp file sqlbackup.bat bằng command line.