by Alexey Knyazev
31. марта 2009 17:18
В продолжение своего первого поста по этой теме (http://www.t-sql.ru/post/BackupScript1.aspx), решил выложить скрипт написанный на Power Shell с использованием архиватора 7-zip (бесплатный файловый архиватор для Windows с высокой степенью сжатия).
#Архивируем с помощью 7-zip (http://www.7-zip.org/) в папку ‘C:BackupDBBackupArchive’
#бесплатный архиватор с отличным качеством сжатия
$dir="C:BackupDBBackupArchive"
$date=Get-Date -uformat "%d_%m_%Y"
#Алиас для 7-zip
Set-Alias -name SevenZip -value "C:Program Files7-Zip7z.exe"
#Запрос на создание БэкАпа базы данных ‘master’,
#с именем в формате ‘master_31-03-2009.bak’в папку ‘C:BackupDB’
$Query = "DECLARE @str NVARCHAR(255) "+ "SET @str='C:BackupDBmaster_'+CONVERT(VARCHAR, GETDATE(), 105)+'.bak' "+ "BACKUP DATABASE master TO DISK=@str "
#Как вариант можно следом добавить в запрос БэкАпирование ещё ряда баз данных
# Создаём соединение
$SQLConnection = New-Object System.Data.SqlClient.SqlConnection("Data Source=(local);Integrated Security=SSPI")
# Создаем SQL команду, используя наш запрос и созданное соединение
$SQLCommand = New-Object System.Data.SqlClient.SqlCommand($Query, $SQLConnection)
# Открываем соединение
$SQLConnection.Open()
# Выполняем….
$SQLCommand.ExecuteNonQuery()
# Закрываем соединение
$SQLConnection.Close()
#Архивируем SevenZip a -r -mx C:BackupDBBackupArchive$date.zip C:BackupDB*.bak
#Удаляем сами БэкАпы
dir C:BackupDB*.bak|rm
#Удаляем из папки с архивами БэкАпов все файлы старше 3х месяцев
#и создаём log-файл с текущей датой обо всех удалённых файлах
dir $dir*.zip|?{$_.CreationTime -lt (Get-Date).AddMonths(-3)}|tee $dir$date.log|rm