Access Point

0
VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)

Резервное копирование MSSQL 2008 с отправкой на FTP

admin 27.10.2012

Скрипт бекапа базы

Создает файл бекапа в формате «DateBaseName год-месяц-число час-мин-сек.bak»
Каждый раз когда выполняется скрипт бекапа, создается отдельный файл бекапа.

Скрип отправки на FTP

Скрипт работает на PowerShell, отправляет запароленные архивы с именем mssqlГодМесяцДеньЧасМинСек.rar
После чего очищает папку с бекапами БД и создает файл лог очистки папки.

Скрипт бекапа базы данных (T-SQL)

DECLARE @DISKSTR varchar (255)

SET @DISKSTR = 'C:\Backup\DateBaseName '
+ replace(convert(char(19),getdate(),120),':','-') + '.bak'

BACKUP DATABASE DateBaseName] TO DISK = @DISKSTR WITH NOFORMAT, INIT,
NAME = N'DateBaseName-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10,
CHECKSUM, CONTINUE_AFTER_ERROR
GO

Скрипт отправки бекапов на FTP (PoewrShell)

#Путь до архиватора
$rar="C:\Progra~1\WinRAR\rar.exe"
#Папка в которую бекапятся БД
$papka1="C:\BackUp"
#mssql начало имени файла отправляемого на FTP
$tmp="C:\task\tmp\mssql.rar"
#Ключи архиватора (-hp Задать пароль на архив)
$cmdLine = "a -ag -hpPASSWORD $tmp $papka1"
#Директория для временных файлов
$tmp_dir="C:\task\tmp\"
$rm_test_dir="$tmp_dir"+"*"

Remove-Item $rm_test_dir
invoke-expression "$rar $cmdLine"

$ls=Get-ChildItem $tmp_dir
foreach ($archive in $ls)
{
$File = "$tmp_dir"+"$archive"
$filename = "$archive"
#Имя:Пароль@фтп сервер/папка/$filename
$ftp = "ftp://FTPUSER:FTPPASSWORD@ftp.server.ru/$filename"

"ftp url: $ftp"

$webclient = New-Object System.Net.WebClient
$uri = New-Object System.Uri($ftp)

"Uploading $File..."
$webclient.UploadFile($uri, $File)
}
#Удаление всех файлов из папки C:\BackUp
dir $papka1\*.*|?{$_.CreationTime -lt (Get-Date).adddays(-0)}|tee -FilePath $papka1\del.log|rm

1. Открываем Microsoft SQL Server Managment Studio

Открываем Microsoft SQL Server Managment Studio, переходим в SQL Server Agent и на пункте Jods нажимаем правой кнопкой New Job…

2. Создаем задачу

В открывшемся окне заполняем Name, желательно чтобы название отражало действие задания.

3. Добавляем шаги в задачу

Переходим на страницу Steps и нажимаем New…

4. Добавляем шаг бекапа БД

В открывшемся окне заполняем Step name (Имя шага) , и в поле Command добавляем:

DECLARE @DISKSTR varchar (255)

SET @DISKSTR = 'C:\Backup\DateBaseName '
+ replace(convert(char(19),getdate(),120),':','-') + '.bak'

BACKUP DATABASE DateBaseName] TO DISK = @DISKSTR WITH NOFORMAT, INIT,
NAME = N'DateBaseName-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10,
CHECKSUM, CONTINUE_AFTER_ERROR
GO

По необходимости меняем 3-4 строки — Путь в котором будут создаваться бекапы БД (C:\Backup\), Имя БД (DateBaseName), дата и время в 24 часовом формате (+ replace(convert(char(19),getdate(),120),’:’,’-‘) + ‘), расширение (‘.bak’ 6-7 строки изменяем DateBaseName на имя вашей БД

5. Добавляем шаг отправки БД на FTP

Нажимаем OK и создаем еше один шаг (Переходим в пункт Steps и нажимаем New…) В открывшемся окне заполняем Step name (Имя шага), Type выбираем PowerShell и в поле Command добавляем и исправляем под себя:

#Путь до архиватора
$rar="C:\Progra~1\WinRAR\rar.exe"
#Папка в которой находятся бекапятся БД
$papka1="C:\BackUp"
#mssql начало имени файла отправляемого на FTP
$tmp="C:\task\tmp\mssql.rar"
#Ключи архиватора (-hp Задать пароль на архив)
$cmdLine = "a -ag -hpPASSWORD $tmp $papka1"
#Директория для временных файлов
$tmp_dir="C:\task\tmp\"
$rm_test_dir="$tmp_dir"+"*"

Remove-Item $rm_test_dir
invoke-expression "$rar $cmdLine"

$ls=Get-ChildItem $tmp_dir
foreach ($archive in $ls)
{
$File = "$tmp_dir"+"$archive"
$filename = "$archive"
#Имя:Пароль@фтп сервер/папка/$filename
$ftp = "ftp://FTPUSER:FTPPASSWORD@ftp.server.ru/$filename"

"ftp url: $ftp"

$webclient = New-Object System.Net.WebClient
$uri = New-Object System.Uri($ftp)

"Uploading $File..."
$webclient.UploadFile($uri, $File)
}
#Удаление всех файлов из папки C:\BackUp
dir $papka1\*.*|?{$_.CreationTime -lt (Get-Date).adddays(-0)}|tee -FilePath $papka1\del.log|rm

6. Добавляем расписание выполнения задачи

Нажимаем OK и переходим на страницу Sсhedules, нажимаем кнопки New… Тут мы задаем расписание выполнения задания, на картинке ниже, задание выполняется раз в час. 

Leave a Comment

Login to your account

Can't remember your Password ?

Register for this site!